Tải bản đầy đủ (.pdf) (57 trang)

giáo trình cấu trúc dữ liệu và giải thuật nghề công nghệ thông tin trung cấp

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (777.37 KB, 57 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

Sæ LAO ĐàNG, TH¯¡NG BINH VÀ Xà HàI ĐÂK LÂK

<b>TR¯âNG TRUNG CÂP TR¯âNG S¡N </b>

<b>GIÁO TRèNH </b>

<b>MễN HC: CU TRC Dỵ LIU V GII THUắT NGHÀ: CƠNG NGHà THƠNG TIN </b>

<b>TRÌNH ĐÞ: TRUNG CÂP </b>

<i>của Hiệu trưởng Trường trung cấp Trường Sơn </i>

<b>ĐÁk LÁk, năm 2022 </b>

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

<b>LâI GIàI THIàU </b>

HiÉn nay, t¿i Tr°ång ch°a có giáo trình CÃu trúc dā liÉu & giÁi tht. Đặc biÉt trên thá tr°ång khơng có tài liÉu hãc tÁp, tham khÁo phù hāp vãi ch°¢ng trình khung Cao đẳng nghÃ, trung cÃp nghà thuác nghà Cơng nghÉ thơng tin (CNTT) trong q trình đào t¿o nghà hiÉn nay.

Nhóm tác giÁ biên so¿n giáo trình lÁp trình c¢ bÁn nhằm măc đích giúp hãc sinh, sinh viên (HSSV) sÿ dăng giáo trình làm tài liÉu nghiên cću và hãc tÁp mát cách thn tiÉn. Ch°¢ng trình mơn hãc đ°āc sÿ dăng đÅ giÁng d¿y cho sinh viên trung cÃp nghà Công nghÉ thông tin (ćng dăng phần mÃm) và làm tài liÉu tham khÁo cho các nghà thuác các ngành nghà kỹ thuÁt.

VÁy, rÃt mong đ°āc să góp ý cąa b¿n đãc đÅ tài liÉu này ngày càng đ°āc hoàn thiÉn h¢n, chúng tơi xin chân thành cÁm ¢n..

<b>Xin chân thành cÁm ¢n!. </b>

ĐÃk LÃk, ngày 02 tháng 8 nm 2022 Tham gia biên so¿n

1. NguyÇn Nh° C°ång - Chą biên 2. NguyÇn Thá Nhung

3. L°u Thá Th°¢ng

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

MĂC LĂC

LäI GIâI THIÈU ... III

GIÁO TRÌNH MƠN HâC ... 7

CH¯¡NG I. THIÀT KÀ VÀ PHÂN TÍCH GIÀI THUÀT ... 9

1. TĈ BÀI TỐN ĐÀN CH¯¡NG TRÌNH: ... 9

1.1 Modul hóa viÉc giÁi qut bài tốn:<small> ... 9 </small>

1.2 PhÂng phỏp tinh chònh tng bóc<small> ... 9 </small>

2. PHN TÍCH GIÀI THT: ... 9

3. Đà PHĆC T¾P TÍNH TỐN CĄA GIÀI THT ... 10

3.1 Khái niÉm:<small> ... 10 </small>

3.2. Ví dă<small> ... 10 </small>

3.3 Xác đánh đá phćc t¿p tính tốn cąa giÁi tht:<small> ... 10 </small>

CH¯¡NG II. ĐÈ QUY VÀ GIÀI THUÀT ĐÈ QUY ... 12

1. KHÁI NIÈM ĐÈ QUY: ... 12

2. GIÀI THUÀT ĐÈ QUY VÀ THĄ TĂC ĐÈ QUY ... 12

3. THIÀT KÀ GIÀI THUÀT ĐÈ QUY ... 12

3.1 Bài tốn tính n!<small> ... 12 </small>

3.2. Dãy sß Fibonacci:<small> ... 14 </small>

3.3 Bài toán tháp Hà Nái:<small> ... 14 </small>

4. HIÈU LĂC ĐÈ QUY: ... 14

2.2 Đánh nghĩa kiÅu cÃu trúc<small> ... 17 </small>

2.3 Khai báo biÁn cÃu trúc<small> ... 18 </small>

3. L¯U TRĀ KÀ TIÀP CĄA DANH SÁCH TUYÀN TÍNH ... 18

3.1. Khái niÉm:<small> ... 18 </small>

3.2. Khai báo biÁn tÁp hāp:<small> ... 18 </small>

3.3 Khai báo biÁn kiÅu tÁp hāp:<small> ... 19 </small>

4 STACK HAY DANH SÁCH KIÄU NGN XÀP: ... 20

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

4.1. Khái niÉm - CÃu trúc dā liÉu:<small> ... 20 </small>

1.2. Mát sß khái niÉm liên quan<small> ... 27 </small>

1.3. BiÅu diÇn cây<small> ... 28 </small>

2. CÂY NHà PHÂN (BINARY TREE): ... 29

2.2. BiÅu diÇn cây nhá phân:<small> ... 30 </small>

3. PHÉP DUYÈT CÂY NHà PHÂN: ... 30

3.1 DuyÉt theo thć tă tr°ãc NLR (Node – Left – Right)<small> ... 31 </small>

3.2 DuyÉt theo thć tă giāa LNR (Left – Node – Right)<small> ... 31 </small>

3.3 DuyÉt theo thć tă sau LRN (Left – Right – Node )<small> ... 33 </small>

4. CÂY NHà PHÂN TÌM KIÀM: ... 33

4.1. Đánh nghĩa<small> ... 33 </small>

4.2. Tìm kiÁm trên cây nhá phân tìm kiÁm<small> ... 34 </small>

4.3.Thêm phần tÿ mãi vào cây nhá phân tìm kiÁm<small>... 35 </small>

4.4.Xóa phần tÿ khåi cây nhá phân tìm kiÁm<small> ... 36 </small>

4.5. Xóa tồn bá cây nhá phân<small> ... 39 </small>

5. BÀI TÀP: ... 39

CH¯¡NG V. Đà THà VÀ MàT VÀI CÂU TRÚC PHI TUYÀN ... 40

1. CÁC KHÁI NIÈM VÂ Đà THà ... 40

2. BIÄU DIỈN Đà THà ... 41

2.1 BiÅu diÇn bằng ma trÁn lân cÁn:<small> ... 41 </small>

2.2 BiÅu diÇn bằng danh sách lân cÁn<small> ... 42 </small>

3. PHÉP DUYÈT MàT Đà THà ... 42

3.1 Tìm kiÁm theo chiÃu sâu:<small> ... 42 </small>

3.2 Tìm kiÁm theo chiÃu ráng:<small> ... 42 </small>

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

4. CÂY KHUNG ... 42

4.1 GiÁi thuÁt Kruskal<small> ... 42 </small>

4.2 GiÁi thuÁt Prim:<small> ... 44 </small>

5.CÂU HäI VÀ BÀI TÀP ... 45

CH¯¡NG VI. SÂP XÀP VÀ TÌM KIÀM ... 46

1. SÂP XÀP: ... 46

1.1 Khái quỏt v sp xp<small> ... 46 </small>

1.2. Mỏt sò phÂng pháp sÃp xÁp<small> ... 46 </small>

2. TÌM KIÀM ... 51

2.1 Khái quát và tìm kiÁm<small> ... 51 </small>

2.2 Tìm tuần tă (Linear Search)<small> ... 51 </small>

2.3. Tìm nhá phân (Binary Search)<small> ... 54 </small>

3. CÂU HäI VÀ BÀI TÀP ... 55

TÀI LIÈU THAM KHÀO ... 57

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

GIÁO TRÌNH MƠN HâC

<b>Tên mơn hác: CÂU TRÚC DĀ LIÈU VÀ GIÀI THT Mã mơn hác: MH10 </b>

<b>Vß trí, tính chÃt, ý nghĩa và vai trị của mơ đun: </b>

- Vỏ trớ: L mụn hóc c sỗ nghà trong ch°¢ng trình đào t¿o Trung cÃp nghà Công nghÉ thông tin (ćng dăng phần mÃm). Môn hãc này đ°āc hãc sau khßi mơn hãc chung và tr°ãc các môn hãc, mô đun chuyên môn ngành, nghÃ.

- Tính chÃt: Mơn hãc cung cÃp nhāng kiÁn thćc c¢ bÁn và phân tích thiÁt kÁ và đánh giá đá phćc t¿p tht tốn và các kiÅu dā liÉu c¢ sỗ. cỏch ci t v cỏc thao tỏc Cỏc cu trúc dā liÉu trĉu t°āng, cÃu trúc dā liÉu cây nhá phân: cài đặt và các thao tác trên cây nhá phân. Đáng thåi, cài đặt danh sách liên kÁt - ngn xÁp - hàng đāi, cài đặt cây nhá phân Cài đặt các thuÁt toán sÃp xÁp - tìm kiÁm và các thao tác liên quan.

- Ý nghĩa và vai trị cąa mơ đun:

<b>Mục tiêu của mơ đun: - VÁ ki¿n thức: </b>

- Trình bày đ°āc mßi quan hÉ giāa cÃu trúc dā liÉu và giÁi tht trong viÉc xây dăng ch°¢ng trình;

- Trình bày đ°āc khái niÉm thåi gian thăc hiÉn giÁi tht, đá phćc t¿p tính tốn cąa giÁi tht và các yÁu tß liên quan đÁn thåi gian thăc hiÉn giÁi thuÁt;

- Trình bày đ°āc các khái niÉm và đÉ quy, giÁi thuÁt đÉ quy và thą tăc đÉ quy; - Trình bày đ°āc các khái niÉm, cÃu trúc l°u trā, phân lo¿i, cách duyÉt cây; - Trình bày đặc điÅm cąa các cách biÅu diÇn đá thá;

- Trình bày đ°āc các phép duyÉt đá thá vãi các giÁi thuÁt minh hãa;

- Trình bày đ°āc ý tỗng, thut toỏn chi tit ca mỏt sò phÂng phỏp sp xp; - Trỡnh by c ý tỗng, thut toỏn chi tit ca mỏt sò phÂng phỏp tỡm kim; - Trình bày đ°āc các khái niÉm và đÉ quy, giÁi thuÁt đÉ quy và thą tăc đÉ quy.

<b>- VÁ kỹ năng: </b>

- Xây dăng đ°āc låi giÁi mát bài toán: chia mát bài toán thành nhiÃu bài tốn nhå đÅ giÁi sau đó phßi hāp, ghép các bài toán nhå l¿i vãi nhau đÅ đ°a và bài tốn ban đầu;

- Xác đánh, phân tích đ°āc trên mát sß ví dă và đÉ quy và giÁi tht đÉ quy; - Cài đặt đ°āc mát sß thao tác xÿ lý danh sách liên kÁt, ngn xÁp, hàng đāi trên ngơn ngā C, Pascal;

- BiÅu diÇn đ°āc cách biÅu diÇn cây nhá phân

- Phân biÉt đ°āc các lo¿i đá thá: Đá thá đánh h°ãng, đá thá không đánh h°ãng, đánh h°ãng liên thông và đánh h°ãng không liên thơng;

- Phân biÉt đ°āc các phép tìm kiÁm theo chiÃu ráng và tìm kiÁm theo chiÃu sâu vãi các đá thá;

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="8">

- Áp dăng mát sß thuÁt tốn sÃp xÁp, tìm kiÁm vào thăc hiÉn viÉc sÃp xÁp và tìm kiÁm các dãy khóa că thÅ;

<b>- VÁ năng lực tự chủ và trách nhiám: </b>

- Xây dăng đ°āc låi giÁi mát bài toán: chia mát bài tốn thành nhiÃu bài tốn nhå đÅ giÁi sau đó phßi hāp, ghép các bài tốn nhå l¿i vãi nhau đÅ đ°a và bài toán ban đầu;

- Xác đánh, phân tích đ°āc trên mát sß ví dă và đÉ quy và giÁi thuÁt đÉ quy; - Cài đặt đ°āc mát sß thao tác xÿ lý danh sách liên kÁt, ngn xÁp, hàng đāi trên ngôn ngā C, Pascal;

- BiÅu diÇn đ°āc cách biÅu diÇn cây nhá phân

- Phân biÉt đ°āc các lo¿i đá thá: Đá thá đánh h°ãng, đá thá không đánh h°ãng, đánh h°ãng liên thông và đánh h°ãng không liên thông;

- Phân biÉt đ°āc các phép tìm kiÁm theo chiÃu ráng và tìm kiÁm theo chiÃu sâu vãi các đá thá;

- Áp dăng mát sß thuÁt tốn sÃp xÁp, tìm kiÁm vào thăc hiÉn viÉc sÃp xÁp và tìm kiÁm các dãy khóa că thÅ.

<b>Nßi dung của môn hác: </b>

<b>Thãi gian Tång </b>

<b>sá thuy<sup>Lý </sup>¿t hành, <sup>Th</sup><sup>ực </sup><sup>Ki</sup>ểm tra<sup>* </sup></b>

1 Ch°¢ng I. ThiÁt kÁ và phân tích giÁi thuÁt 7 2 5 2 Ch°¢ng II. ĐÉ quy và giÁi thuÁt đÉ quy 5 2 3

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

<b>CH¯¡NG I. THI¾T K¾ VÀ PHÂN TÍCH GIÀI THU¾T Giái thiáu: </b>

<b>Mục tiêu: </b>

<i>Học xong chương này, người học có khả năng: </i>

- Trình bày đ°āc khái niÉm giÁi thuÁt và ý nghĩa cąa giÁi thuÁt đÅ giÁi mát bài tốn bằng ch°¢ng trình;

- Trình bày đ°āc quy trình xây dăng låi giÁi mát bài tốn;

- Trình bày đ°āc khái niÉm thåi gian thăc hiÉn giÁi tht, đá phćc t¿p tính tốn cąa giÁi tht và các yÁu tß liên quan đÁn thåi gian thăc hiÉn giÁi thuÁt;

- Phân biÉt đ°āc các quy tÃc tổng, quy tÃc nhân khi xác đánh đá phćc t¿p cąa tht tốn;

- Có thái đá nghiêm túc, cháu khó tìm tịi hãc håi;

- Rèn lun tính cẩn thÁn, tß mß, chính xác, sáng t¿o, linh ho¿t trong cụng viẫc.

<b>Nòi dung: </b>

<b>1. T bi toỏn n chÂng trình: </b>

Có thÅ nói rằng khơng có mát ch°¢ng trình máy tính nào mà khơng có dā liÉu đÅ xÿ lý. Dā liÉu có thÅ là dā liÉu đ°a vào (input data), dā liÉu trung gian hoặc dā liÉu đ°a ra (output data). Do vÁy, viÉc tổ chćc đÅ l°u trā dā liÉu phăc vă cho ch°¢ng trình có ý nghĩa rÃt quan trãng trong toàn bá hẫ thòng chÂng trỡnh. Viẫc xây dăng cÃu trúc dā liÉu quyÁt đánh rÃt lãn đÁn chÃt l°āng cũng nh° cơng sćc cąa ng°åi lÁp trình trong viÉc thiÁt kÁ, cài đặt ch°¢ng trình.

1.1 Modul hóa viÉc giÁi quyÁt bài toán:

Khái niÉm giÁi thuÁt hay thuÁt giÁi mà nhiÃu khi còn đ°āc gãi l thut toỏn dựng chò phÂng phỏp hay cách thćc (method) đÅ giÁi quyÁt vần đÃ. GiÁi thuÁt có thÅ đ°āc minh hãa bằng ngôn ngā tă nhiên (natural language), bằng s¢ đá (flow chart) hoặc bằng mã giÁ (pseudo code). Trong thăc tÁ, giÁi thuÁt th°ång đ°āc minh hãa hay thÅ hiÉn bằng mã giÁ tăa trên mát hay mát sß ngơn ngā lÁp trình nào đó (th°ång là ngôn ngā mà ng°åi lÁp trình chãn đÅ cài đặt tht tốn), chẳng h¿n nh° C, Pascal, ?

1.2 PhÂng phỏp tinh chònh tng b°ãc

Khi đã xác đánh đ°āc cÃu trúc dā liÉu thích hāp, ng°åi lÁp trình s¿ bÃt đầu tiÁn hành xây dăng tht giÁi t°¢ng ćng theo u cầu cąa bài tốn t ra trờn c sỗ ca cu trỳc d liÉu đã đ°āc chãn. ĐÅ giÁi quyÁt mát vÃn đà có thÅ có nhiÃu ph°¢ng pháp, do vÁy să lăa chãn ph°¢ng pháp phù hāp là mát viÉc mà ng°åi lÁp trình phÁi cân nhÃc và tính tốn. Să lăa chãn này cũng có thÅ góp phần đáng kÅ trong viÉc giÁm bãt công viÉc cąa ng°åi lÁp trình trong phần cài đặt tht tốn trên mát ngơn ngā că thÅ.

<b>2. Phân tích giÁi thu¿t: </b>

Mßi quan hÉ giāa cÃu trúc dā liÉu và GiÁi thuÁt có thÅ minh hãa bằng đẳng thćc:

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

CÃu trúc dā liÉu + GiÁi tht = Ch°¢ng trình

Nh° vÁy, khi đã có cÃu trúc dā liÉu tßt, nÃm vāng giÁi tht thăc hiÉn thì viÉc thÅ hiÉn ch°¢ng trình bằng mát ngơn ngā că thÅ chß là vÃn đà thåi gian. Khi có cÃu trúc dā liÉu mà ch°a tìm ra thuÁt giÁi thì khơng thÅ có ch°¢ng trình và ng°āc l¿i khơng thÅ có ThuÁt giÁi khi ch°a có cÃu trỳc d liẫu. Mỏt chÂng trỡnh mỏy tớnh chò cú thÅ đ°āc hồn thiÉn khi có đầy đą cÁ CÃu trúc dā liÉu đÅ l°u trā dā liÉu và GiÁi thuÁt xÿ lý dā liÉu theo yêu cầu cąa bài tốn đặt ra.

<b>3. Đß phức t¿p tính toán của giÁi thu¿t </b>

3.1 Khái niÉm:

Đá phćc t¿p thåi gian là toàn bá tài nguyên và thåi gian mà máy tính cần đÅ thăc thi mát thuÁt tốn nào đó, đ°āc thÅ hiÉn bằng hàm sß y = f\left ( x \right ). Thông th°ång, đá phćc t¿p thåi gian s¿ dăa vào sß lần mà mát câu lÉnh c¢ bÁn vãi thåi gian thăc thi là hằng sß đ°āc thăc thi. Chúng ta s¿ tìm hiu rừ hÂn qua vớ d ỗ cỏc phn sau.

òi vói mỏt chÂng trỡnh, s cú hai loi ỏ phćc t¿p là đá phćc t¿p thåi gian và đá phćc t¿p bá nhã. Tuy nhiên, trong khoá hãc này, mình s¿ chą yÁu đà cÁp đÁn đá phćc t¿p thåi gian. Do đó, khi mình nói <đá phćc t¿p ch°¢ng trình= tćc là nói và đá phćc t¿p thåi gian cąa ch°¢ng trình đó.

Trên thăc tÁ, do să khác biÉt và dā liÉu đầu vào nh° đã nói ç trên, đa phần các tht tốn s¿ đ°āc tính toán đá phćc t¿p dăa vào tr°ång hāp xÃu nhÃt (worst-case), tc l khong thồi gian tòi a m chÂng trình s¿ ch¿y vãi mát bá dā liÉu có kích th°ãc cß đánh. Mát sß tht tốn s¿ đ°āc đánh giá dăa theo tr°ång hāp trung bình (average-case) ví dă nh° Quick Sort. ĐÅ biÁt t¿i sao Quick Sort l¿i đ°āc đánh giá dăa vào tr°ång hāp trung bình thì hãy tiÁp tăc theo dõi khố hãc này nhé.

Ngồi ra cịn có mát cách đánh giá dăa vào tr°ång hāp tßt nhÃt (best-case). Tuy nhiên, ta s¿ không quan tâm đÁn cách đánh giá này do nó khơng bao giå đ°āc áp dăng trong thăc tÁ.

Tuy nhiên, do các hàm sß thÅ hiÉn đá phćc t¿p th°ång rÃt khó tính tốn nên chúng ta cần mát ph°¢ng pháp đánh giá hiÉu q h¢n. Mát cách đ°āc sÿ dăng phổ biÁn đó là Đá phćc t¿p thåi gian BigO.

3.2. Ví dă

3.3 Xác đánh đá phćc t¿p tính tốn cąa giÁi thuÁt:

ViÉc đánh giá đá phćc t¿p cąa mát thuÁt tốn q khơng dÇ dàng chút nào. æ dây, chúng ta chß mußn °ãc l°āng thåi gian thăc hiÉn thuÁn toán T(n) đÅ có thÅ có s so sỏnh tÂng òi giāa các thuÁt toán vãi nhau. Trong thăc tÁ, thåi gian thăc hiÉn mát thuÁt toán còn phă thuác rÃt nhiÃu vào các điÃu kiÉn khác nh° cÃu t¿o cąa máy tớnh, d liẫu a vo, ỗ õy chỳng ta chß xem xét trên mćc đá cąa l°āng dā liÉu đ°a vào ban đầu cho thuÁt toán thăc hiÉn.

ĐÅ °ãc l°āng thåi gian thăc hiÉn thuÁt tốn chúng ta có thÅ xem xét thåi gian thăc hiÉn thuÁt toán trong hai tr°ång hāp:

- Trong tr°ång hāp tßt nhÃt: Tmin - Trong tr°ång hāp xÃu nhÃt: Tmax

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

Tĉ đó chúng ta có thÅ °ãc l°āng thåi gian thăc hiÉn trung bình cąa tht tốn: 3.3.1 Quy tÃc tổng

3.3.2. Quy tÃc nhân

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

<b>CH¯¡NG II. Đà QUY VÀ GIÀI THU¾T Đà QUY Giái thiáu: </b>

<b>Mục tiêu </b>

<i>Học xong chương này, người học có khả năng: </i>

- Trình bày đ°āc các khái niÉm và đÉ quy, giÁi thuÁt đÉ quy và thą tăc đÉ quy; - Trình bày đ°āc các b°ãc thiÁt kÁ giÁi thuÁt đÉ quy;

- So sánh đ°āc hiÉu lăc giāa giÁi thuÁt đÉ quy vãi giÁi thuÁt khác;

- Xác đánh, phân tích đ°āc trên mát sß ví dă và đÉ quy và giÁi thuÁt đÉ quy; - Rèn luyÉn tính cẩn thÁn, tß mß, chính xác, sáng t¿o, linh ho¿t trong cơng viÉc.

<b>Nßi dung </b>

<b>1. Khái niám đá quy: </b>

BÃt cć mát hàm nào đó có thÅ triÉu gói hm khỏc, nhng ỗ õy mỏt hm no ú có thÅ tă triÉu gãi chính mình. KiÅu hàm nh° thÁ đ°āc gãi là hàm đá quy.

<b>2. GiÁi thu¿t đá quy và thủ tục đá quy </b>

Ph°¢ng pháp đÉ quy th°ång dùng phổ biÁn trong nhāng ćng dăng mà cách giÁi quyÁt có thÅ đ°āc thÅ hiÉn bằng viÉc áp dăng liên tiÁp cùng giÁi pháp cho nhāng tÁp hāp con cąa bài toán.

<b>3. Thi¿t k¿ giÁi thu¿t đá quy </b>

3.1 Bài tốn tính n!

n! = 1*2*3*&*(n-2)*(n-1)*n vãi n >= 1 và 0! = 1. /* Ham tinh giai thua */

#include <stdio.h> #include <conio.h> void main(void) {

int in;

long giaithua(int);

printf("Nhap vao so n: "); scanf("%d", &in);

printf("%d! = %ld.\n", in, giaithua(in)); getch();

}

long giaithua(int in) {

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

int i;

long ltich = 1; if (in == 0)

return (1L); else

{

for (i = 1; i <= in; i++) ltich *= i;

return (ltich); }

}

- Kết quả in ra màn hình Nhap vao so n: 5 5! = 120.

int i; if (in == 0)

return (1L); else

return (in * giaithua(in – 1)); }

Ch¿y l¿i ch°¢ng trình, quan sát, nhÁn xét và đánh giá kÁt quÁ

<i><b>Giải thích hoạt động của hàm đệ quy giaithua </b></i>

Ví dă giá trá truyÃn vào hàm giaithua qua biÁn in = 5. • Thć tă gãi thăc hiÉn hàm giaithua

giaithua(in) return(in * giaithua(in – 1)) 5 * giaithua(4) = 5 * ?

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

4 * giaithua(3) = 4 * ? 3 * giaithua(2) = 3 * ? 2 * giaithua(1) = 2 * ? 1 * giaithua(0) = 1 * ?

Khi tham sß in = 0 thì return và giá trá 1L (giá trá 1 kiÅu long). Lúc này các giá trá ?

bÃt đầu đánh trá theo thć tă ng°āc l¿i. • Đánh trá theo thć tă ng°āc l¿i

giaithua(in) return(in * giaithua(in – 1)) 1 * giaithua(0) = 1 * 1 = 1

2 * giaithua(1) = 2 * 1 = 2 3 * giaithua(2) = 3 * 2 = 6 4 * giaithua(3) = 4 * 6 = 24 5 * giaithua(4) = 5 * 24 = 120 KÁt quÁ sau cùng ta có 5! = 120.

Thć tă gãi đÉ quy Đánh trá theo thć tă ng°āc l¿iA 3.2. Dãy sß Fibonacci:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, & BÃt đầu bằng 0 và 1, các sß tiÁp theo bằng tổng hai sß đi tr°ãc.

Dãy Fibonacci đ°āc khai báo đÉ quy nh° sau: Fibonacci(0) = 0

<b>4. Hiáu lực đá quy: </b>

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

<b>CH¯¡NG III. MÀNG VÀ DANH SÁCH Giái thiáu: </b>

- Trình bày đ°āc cÃu trúc, các phép xÿ lý, khÁ nng áp dăng cąa ngn xÁp, hàng đāi;

- Trình bày đ°āc khái niÉm Stack, quy chÁ l°u trā Stack bằng mÁng, khái niÉm Queue, quy chÁ l°u trā Queue bằng mÁng;

- Xác đánh và phân tích đ°āc mát sß ćng dăng cąa Stack, bổ sung và lo¿i mát phần tÿ ra khåi Queue;

- Cài đặt đ°āc mát sß thao tác xÿ lý danh sách liên kÁt, ngn xÁp, hàng đāi trên ngôn ngā C, Pascal;

<i>-</i> Nghiêm túc, tß mß, sáng t¿o trong viÉc hãc và vÁn dăng vào làm bài tÁp. Chą

<i>đáng kÁt hāp các ngơn ngā lÁp trình đÅ cài đặt tht tốn. </i>

MÁng có thÅ hiÅu là mát tÁp hāp nhiÃu phần tÿ có cùng kiÅu giá trá và cùng cùng chung mát tên. Mßi phần tÿ mÁng biÅu diÇn đ°āc mát giá trá. Có bao nhiêu kiÅu biÁn thì có bÃy nhiêu kiÅu mÁng. mÁng cần đ°āc khai báo đÅ đánh rõ: lo¿i mÁng: int, float, double,&.

Tên mÁng.

Sß chiÃu dài và kích th°ãc mßi chiÃu.

Khái niÉm và kiÅu mÁng và tên mÁng cũng gißng nh° khái niÉm và kiÅu biÁn và tên biÁn. ta s¿ giÁi thích và sß chiÃu và kích th°ãc mßi chiÃu thong qua các ví dă că thÅ d°ãi đây.

Các khai báo: int a[10],b[4][2]; float x[5],y[3][3]; Chú ý:

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

Các phần tÿ cąa mÁng đ°āc cÃp phát các khoÁn nhã lien tiÁp nhau trong bá nhã. Nói cách khác, các phần tÿ cąa mÁng liên tiÁp nhau.

Trong bá nhã, các phần tÿ cąa mÁng hai chiÃu đ°āc sÃp xÁp theo hang. Chß sß mÁng:

Mát phần tÿ că thÅ cąa mÁng đ°āc xác đánh nhå các chß sß cąa nó. Chß sß cąa mÁng phÁi có giá trá int khơng v°āt q kích th°ãc t°¢ng ćng. sß chß sß bằng sß chiÃu cąa mÁng.

GiÁ sÿ z,b,x,y đ°āc khai báo nh° trên, và giÁ sÿ i,j là các biÁn nguyên trong đó i=2, J=1, khi đó:

a[j+i-1] là a[2] b[j+i][2-i] là b[3][0] y[i][j] là y[2][1] Chú ý:

MÁng có bao nhiêu chiÃu thì ta phÁi viÁt bÃy nhiêu chß sß. vì thÁ nÁu ta viÁt nh° sau s¿ là sai: y[i]( vì y là mÁng hai chiÃu),vv&

BiÅu thćc dung làm chß sß có thÅ thăc hiÉn. khi đó phần nguyên cąa biÅu thćc thăc s¿ là chß sß mÁng.

Ví dă:

A[2.5] là a[2] B[1.9] là a[1]

*Khi chß sß v°āt ra ngồi kích th°ãc mÁng, máy s¿ v¿n khơng báo lßi, nh°ng nó s¿ truy cÁp đÁn mát vùng nhã bên ngồi mÁng và có thÅ làm lo¿n ch°¢ng trình.

<b>2. CÃu trúc l°u trÿ của mÁng </b>

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

2.2 Đánh nghĩa kiÅu cÃu trúc struct <Tên cÃu trúc> {

<KiÅu> <Tr°ång 1> ; <KiÅu> <Tr°ång 2> ; &&..

<KiÅu> <Tr°ång n> ; };

struct NgayThang {

unsigned char Ngay; unsigned char Thang; unsigned int Nam; };

typedef struct {

unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang;

Ví d 2: Mòi sinh viờn cn c qun lý bỗi các thơng tin: mã sß sinh viên, hã tên, ngày tháng nm sinh, giãi tính, đáa chß th°ång trú. Lúc này ta có thÅ khai báo mát struct gám các thông tin trên.

struct SinhVien {

char MSSV[10]; char HoTen[40];

struct NgayThang NgaySinh;

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

int Phai;

char DiaChi[40]; };

typedef struct {

char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai;

char DiaChi[40]; } SinhVien;

2.3 Khai báo biÁn cÃu trúc

ViÉc khai báo biÁn cÃu trúc cũng t°¢ng tă nh° khai báo biÁn thuác kiÅu dā liÉu chuẩn.

Cú pháp:

- Đßi vãi cÃu trúc đ°āc đánh nghĩa theo cách 1: struct <Tên cÃu trúc> <BiÁn 1> [, <BiÁn 2>&]; - Đßi vãi các cÃu trúc đ°āc đánh nghĩa theo cách 2: <Tên cÃu trúc> <BiÁn 1> [, <BiÁn 2>&];

Ví dă: Khai báo biÁn NgaySinh có kiÅu cÃu trúc NgayThang; biÁn SV có kiÅu cÃu trúc SinhVien.

struct NgayThang NgaySinh; struct SinhVien SV;

NgayThang NgaySinh; SinhVien SV;

<b>3. L°u trÿ k¿ ti¿p của danh sách tuy¿n tính </b>

3.1. Khái niÉm:

Đßi vãi các kiÅu dā liÉu ta đã biÁt nh° kiÅu sß, kiÅu mÁng, kiÅu cÃu trúc thì dā liÉu kiÅu tÁp hāp (typedef) là kiÅu dā liÉu bao gám nhiÃu thành phần có kiÅu dā liÉu gißng hoặ khác nhau, mßi thành phần đ°āc gãi là mát tr°ång (field).

3.2. Khai báo biÁn tÁp hāp:

Sÿ dăng tĉ khóa typedef (Type definitions) đÅ đánh nghĩa kiÅu: Typedef struct

{

<KiÅu> <Tr°ång 1> ;

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

<KiÅu> <Tr°ång 2> ; &&..

<KiÅu> <Tr°ång n> ; } <Tên cÃu trúc>; Trong đó:

- typedef (Type definitions): là kiÅu do ng°åi dùng đánh nghĩa.

- <Tên cÃu trúc>: là mát tên đ°āc đặt theo quy tÃc đặt tên cąa danh biÅu; tên này mang ý nghĩa s¿ là tên kiÅu cÃu trúc.

<KiÅu> <Tr°ång i> (i=1..n): mßi tr°ång trong cÃu trúc có dā liÉu thuác kiÅu dā liÉu c¢ bÁn.

Ví dă 1: ĐÅ quÁn lý ngày, tháng, nm cąa mát ngày trong nm ta có thÅ khai

báo kiÅu cÃu trúc gám 3 thông tin: ngày, tháng, nm. Typedef struct

{

unsigned char Ngay; unsigned char Thang; unsigned int Nam; } NgayThang;

Ví dă 2: Mòi sinh viờn cn c qun lý bỗi cỏc thụng tin: mã sß sinh viên, hã tên, ngày tháng nm sinh, giãi tính, đáa chß th°ång trú. Lúc này ta có thÅ khai báo mát struct gám các thơng tin trên.

typedef struct {

char MSSV[10]; char HoTen[40]; NgayThang NgaySinh; int Phai;

char DiaChi[40]; } SinhVien;

3.3 Khai báo biÁn kiÅu tÁp hāp:

ViÉc khai báo biÁn tÁp hāp cũng t°¢ng tă nh° khai báo biÁn thuác kiÅu dā liÉu chuẩn.

Cú pháp:

- Đßi vãi cÃu trúc đ°āc đánh nghĩa theo cách 1: struct <Tên cÃu trúc> <BiÁn 1> [, <BiÁn 2>&];

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

- Đßi vãi các cÃu trúc đ°āc đánh nghĩa theo cách 2: <Tên cÃu trúc> <BiÁn 1> [, <BiÁn 2>&];

Ví dă: Khai báo biÁn NgaySinh có kiÅu cÃu trúc NgayThang; biÁn SV có kiÅu cÃu trúc SinhVien.

struct NgayThang NgaySinh; struct SinhVien SV;

NgayThang NgaySinh; SinhVien SV;

<b>4 Stack hay danh sách kiểu ngăn x¿p: </b>

4.1. Khái niÉm - CÃu trúc dā liÉu:

Ngn xÁp là mát danh sách mà trong đó thao tác thêm mát phần tÿ vào trong danhvà thao tác lÃy ra mát phần tÿ tĉ trong danh sách đ°ācthăc hiẫn ỗ cựng u

Nh vy, cỏc phn t c đ°a vào trong ngn xÁp sau cùng s¿ đ°āc lÃy ra tr°ãctiên, phần tÿ đ°a vào trong hàng đāi tr°ãc tiên s¿

đ°āc lÃy ra sau cùng. Do đó màngn xÁp còn đ°āc gãi là danh sách vào sau ra tr°ãc (LIFO List) và cÃu trúc dā liÉunày còn đ°āc gãi là cÃu trúc LIFO (Last In – First Out).

T°¢ng tă nh° hàng đāi, có nhiÃu cách đÅ biÅu diÇn và tổ chćc các ngn xÁp - Sÿ dăng danh sách đặc,

- S dng danh sỏch liờn kt,

Do ỗ õy cÁ hai thao tác thêm vào và lÃy ra đÃu c thc hiẫn ỗ mỏt u nờn chỳng ta chò cần quÁn lý vá trí đầu cąa danh sách dùng làm mặt cho ngn xÁp thơng qua biÁn chß sß bà mặt SP (Stack Pointer). Chß sß này có thÅ là cùng chiÃu (đầu) hoặc ng°āc chiÃu (cußi) vãi thć tă các phần tÿ trong mÁng và trong danh sách liênkÁt. ĐiÃu này có nghĩa là bà mặt ngn xÁp có thÅ là đầu mÁng, đầu danh sách liênkÁt mà cũng có thÅ là ci mÁng, ci danh sách liên kt. thun tiẫn, ỗ õychỳng ta gi s b mặt cąa ngn xÁp là đầu mÁng, đầu danh sách liên kÁt. Tr°ång hāp ng°āc l¿i, sinh viên tă áp dăng t°¢ng tă.

ỉ đây chúng ta cũng s¿ biÅu diÇn và tổ chćc hàng đāi bằng danh sách đặc v bngdanh sỏch liờn kt Ân c qun lý bỗi con trå đầu danh sách. Do vÁy cÃu trúc dāliÉu cąa ngn xÁp và các thao tác trên đó s¿ đ°āc trình bày thành hai tr°ång hāpkhác nhau.

T * List;// Nái dung ngn xÁp

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

} C_STACK; C_STACK CS_List;

- BiÅu diÇn và tổ chćc bằng danh sách liên kÁt đ¢n; typedef struct S_Element

- Phép nhân, chia - Phép cáng, trĉ

- b)Biểu thức hậu tố:

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

<b>5. Hàng đợi (Queue) </b>

5.1 Khái niÉm:

- CÃu trúc dā liÉu: Hàng đāi là mát danh sách mà trong đó thao tác thêm mát phn t vo trong danhsỏch c thc hiẫn ỗ mỏt đầu này và thao tác lÃy ra mát phần tÿ t trong danhsỏch li c thc hiẫn ỗ u kia.

Nh° vÁy, các phần tÿ đ°āc đ°a vào trong hàng đāi tr°ãc s¿ đ°āc lÃy ra tr°ãc, phầntÿ đ°a vào trong hàng đāi sau s¿ đ°āc lÃy ra sau. Do đó mà hàng đāi cịn đ°āc gãilà danh sách vào tr°ãc ra tr°ãc (FIFO List) và cÃu trúc dā liÉu này còn đ°āc gãi là cÃu trúc FIFO (First In – First Out). Có nhiÃu cách đÅ biÅu diÇn và tổ chćc các hàng đāi:

- Sÿ dăng danh sách đặc, - Sÿ dăng danh sách liên kÁt,

Tuy nhiên, điÃu quan trãng và cần thiÁt là chúng ta phÁi qn lý vá trí hai đầu cąa hàng đāi thơng qua hai biÁn: BiÁn tr°ãc (Front) và BiÁn sau (Rear). Hai biÁn này cóthÅ cùng chiÃu hoặc ng°āc chiÃu vãi thć tă các phần tÿ trong mÁng và trong danhsách liên kÁt. ĐiÃu này có nghĩa là đầu hàng đāi có thÅ là đầu mÁng, đầu danh sáchliên kÁt mà cũng có thÅ là ci mng, cuòi danh sỏch liờn kt. thun tiẫn, ỗ đâychúng ta giÁ sÿ đầu hàng đāi cũng là đầu mÁng, đầu danh sách liên kÁt. Tr°ång hāp ng°āc l¿i, sinh viên tă áp dăng t°¢ng tă.

ỉ đây chúng ta s¿ biÅu diÇn và tổ chćc hàng đāi bằng danh sách đặc và bằng danhsách liên kÁt đ¢n c qun lý bỗi hai con trå đầu và cußi danh sách. Do vÁy cÃutrúc dā liÉu cąa hàng đāi cũng nh° các thao tác trên hàng đāi s¿ đ°āc trình bàythành hai tr°ång hāp khác nhau- BiÅu diÇn và tổ chćc bằng danh sách đặc:

typedef struct Q_C {

int Len; // ChiÃu dài hàng đāi int Front, Rear;

T * List;// Nái dung hàng đāi

C_QUEUE CQ_List;

- BiÅu diÇn và tổ chćc bằng danh sách liên kÁt đ¢n;

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

typedef struct Q_Element {

S_QUEUE SQ_List; Hình Ánh minh hãa:

+ Front = 1 và Rear = Len, khi: Front < Rear + Rear + 1 = Front, khi: Rear < Front

Ghi chú:

NÁu chúng ta khÃc phăc hàng đāi bá tràn bằng ph°¢ng pháp dách tÃt cÁ phần tÿ cąa hàng đāi ra phía tr°ãc Front=1 vá trí thì hàng đāi bá đầy khi thåa mãn điÃu

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="24">

kiÉn: Front = 1 và Rear = Len (ỉ đây ta ln ln có: Front ≤ Rear). 4. Câu håi và Bài tÁp:

1.Trình bày khái niÉm cąa các lo¿i danh sách? ¯u, nh°āc điÅm và ćng dăng cąa mßi lo¿i danh sách?

2. Hãy đ°a ra các cÃu trúc dā liÉu đÅ quÁn lý các lo¿i danh sách vĉa kÅ trên? Mßi lo¿i b¿n hãy chãn ra mát cÃu trúc dā liÉu mà theo b¿n là hay nhÃt? GiÁi thích să lăachãn đó?

3. Trình bày tht tốn và cài đặt tÃt cÁ các thao tác trên danh sách liên kÁt đ¢n trongtr°ång hāp quÁn lý bằng con trå đầu và cußi trong danh sách?

4. Trình bày tht tốn và cài đặt tÃt cÁ các thao tác trên danh sách liên kÁt đơi Trong tr°ång hāp chß qn lý bằng con trå đầu trong danh sách?

5. Trình bày thuÁt toán và cài đặt tÃt cÁ các thao tác trên hng i, ngn xp biu diầnbỗi danh sỏch liờn kÁt đôi trong hai tr°ång hāp:

Danh sách liên kÁt cùng chiÃu và ng°āc chiÃu vãi hàng đāi, ngn xÁp?

6. VÁn dăng các thuÁt toán sÃp xÁp đã hãc, hãy cài đặt các hàm sÃp xÁp trên danhsách liên kÁt đ¢n, liên kÁt đơi theo hai cách qn lý:

- QuÁn lý đáa chß nút đầu danh sách;

- QuÁn lý đáa chß nút đầu và cußi danh sách.

Theo b¿n tht tốn sÃp xÁp nào dÇ vÁn dăng h¢n trên danh sách liên kÁt đ¢n, liên kÁt đôi trong hai tr°ång hāp này?

7. Sÿ dăng Stack, vit chÂng trỡnh chuyn i mỏt sò nguyờn N trong hẫ thp phõn (hẫ 10) sang biu diần ỗ:

a. HÉ nhá phân (hÉ 2) b. HÉ thÁp lăc phân (hÉ 16)

8. ViÁt ch°¢ng trình mơ phång cho bài toán <Tháp Hà nái= và <Tháp Saigon= vãi cÃu trúc dā liÉu nh° sau:

a. Sÿ dăng danh sách liên kÁt đÅ l°u trā các cát tháp; b. Sÿ dăng Stack đÅ l°u trā các cát cąa tháp

Có nhÁn xét gì cho tĉng tr°ång hāp?

9. VÁn dăng Stack đÅ gÿ đÉ quy cho thuÁt toán QuickSort? 10. VÁn dăng danh sách liên kÁt vòng đÅ giÁi bài toán Josephus.

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

<b>CH¯¡NG IV. CÂY Giái thiáu: </b>

<b>Mục tiêu </b>

- Trình bày đ°āc các khái niÉm và cây, cây con, cây rßng và các lo¿i nút cąa cây - Trình bày đ°āc mát sß khái niÉm nh° bÁc cąa nút, bÁc cąa cây, nút trung gian, nút kÁt thúc, mćc cąa nút, chiÃu cao cąa cây, nút tr°ãc, nút sau và đ°ång đi cąa cây

- Trình bày đ°āc bÁn chÃt cąa cây nhá phân và tính chÃt cąa nó - Trình bày đ°āc đặc điÅm các cách biÅu diÇn cây nhá phân; - Trình bày và phân biÉt đ°āc các phép duyÉt cây khác nhau; - DuyÉt đ°āc cây nhá phân theo các cách khác nhau;

- Xác đánh đ°āc mát sß bài tốn thăc tÁ có thÅ vÁn dăng cÃu trúc dā liÉu kiÅu cây;

- Cài đặt và thăc hiÉn các thao tác trên cây nhá phân;

- Cung cÃp mát sß thą tăc và đÉ quy và không đÉ quy mô tÁ các giÁi thuÁt duyÉt cây theo thć tă tr°ãc, theo thć tă giāa và theo thć tă sau;

- Áp dăng cÃu trúc dā liÉu d¿ng cây vào mát sß bài toán ćng dăng că thÅ nh°: cây quyÁt đánh, mã nén Huffman;

- Nghiêm túc, tß mß, sáng t¿o trong viÉc hãc và vÁn dăng vào làm bài tÁp. - Rèn lun tính cẩn thÁn, tß mß, chính xác, sáng t¿o, linh ho¿t trong cơng viÉc.

<b>2. Nßi dung </b>

<b>1. Cỏc khỏi niỏm c bn: 1.1. ònh ngha cõy: </b>

Ví dă: có mßi quan hÉ hã hàng sau:

 Ông Nam có 3 ng°åi con là Hùng, Huân , HÁi  Ơng Hùng có 2 ng°åi con là S¢n, HÁu

 Ơng Hn có 2 ng°åi con là Trang, Minh

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

Cây là mát tÁp hāp các phần tÿ (các nút) đ°āc tổ chćc và có các đặc điÅm sau:

<i>Định nghĩa đệ quy: </i>

• Mát nút đ°āc gãi là mát cây và là nút gßc cąa cây đó.

• NÁu T1, T2, &, Tk là các cây và n1, n2, &, nk lần l°āt là các nút gßc. n là mát nút và n là cha cąa các nút con n1, n2, &, nk. Hình thành nên mát cây T và n là nút gßc cąa cây T này.

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

Ví dă: Cây th° măc trên mát đĩa cćng

1.2. Mát sß khái niÉm liên quan a. BÁc cąa mát nút:

BÁc cąa mát nút (node’s degree) là sß cây con cąa nút đó Ví dă: BÁc cąa nút OS trong cây trên bằng 2

khơng và lànút gßc cây con cąa mát cây con nào đó trong cây).

Ví dă: Các nút OS, PROGRAMS, APPLICATIONS, UTILITIES, PASCAL, C, WORD, EXCEL cąa cây trên là các nút trung gian.

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

NC, NU cąacây trên bằng 3; mćc cąa các nút BIN, INCLUDE, BGI, DOC, PICTURE, SHEET, cąa cây trên bằng 4.

g. ChiÃu cao hay chiÃu sâu cąa mát cây:

ChiÃu cao cąa mát cây (tree’s height) hay chiÃu sâu cąa mát cây (tree’s deep’th) là mćc cao nhÃt cąa các nút trong cây.

Ví dă: ChiÃu cao cąa cây trên bằng 4. h. Nút tr°ãc và nút sau cąa mát nút:

Nút T đ°āc gãi là nút tr°ãc (ancestor’s node) cąa nút S nÁu cây con có gßc là Tchća cây con có gßc là S. Khi đó, nút S đ°āc gãi là nút sau (descendant’s node) cąa nút T.

Ví dă: Nút PROGRAMS là nút tr°ãc cąa các nút BIN, BGI, INCLUDE, PASCAL, C vàng°āc l¿i các nút BIN, BGI, INCLUDE, PASCAL, C là nút sau cąa nút PROGRAMS trong cây trên.

i. Nút cha và nút con cąa mát nút:

Nút B đ°āc gãi là nút cha (parent’s node) cąa nút C nÁu nút B là nút tr°ãc cąa nút Cvà mćc cąa nút C lãn h¢n mćc cąa nút B là 1 mćc. Khi đó, nút C đ°āc gãi là nút con (child’s node) cąa nút B.

Ví dă: Nút PROGRAMS là nút cha cąa các nút PASCAL, C và ng°āc l¿i các nútPASCAL, C là nút con cąa nút PROGRAMS trong cây trên.

j. ChiÃu dài đ°ång đi cąa mát nút:

ChiÃu dài đ°ång đi cąa mát nút là sß đßnh (sß nút) tính tĉ nút gßc đÅ đi đÁn nút đó.

Nh° vÁy, chiÃu dài đ°ång đi cąa nút gßc ln luôn bằng 1, chiÃu dài đ°ång đi tãi mát nút bằng chiÃu dài đ°ång đi tãi nút cha nó cáng thêm 1.

Ví dă: ChiÃu dài đ°ång đi tãi nút PROGRAMS trong cây trên là 2. k. ChiÃu dài đ°ång đi cąa mát cây:

ChiÃu dài đ°ång đi cąa mát cây (path’s length of the tree) là tổng tÃt cÁ các chiÃu dài đ°ång đi cąa tÃt cÁ các nút trên cây.

Ví dă: ChiÃu dài đ°ång cąa cây trên là 65.

Ghi chú: Đây là chiÃu dài đ°ång đi trong (internal path’s length) cąa cây. ĐÅ có đ°ācchiÃu dài đ°ång đi ngoài (external path’s length) cąa cây ng°åi ta mỗ rỏng tt ccỏc nỳt ca cõy sao cho tÃt cÁ các nút cąa cây có cùng bÁc bằng cách thêm vàocác nút giÁ sao cho tÃt cÁ các nút có bÁc bằng

bÁc cąa cây. ChiÃu dài đ°ång đingoài cąa cây bằng tổng chiÃu dài cąa tt c cỏc nỳt mỗ rỏng.

1.3. Biu diần cõy

Có nhiÃu cách đÅ biÅu diÇn cây:

- Sÿ dăng ỏ thỏ: Nh vớ d v cõy th mc ỗ trên.

</div>

×