168
CHƯƠNG 1: CÁC KHÁI NIỆM CƠ SỞ 1. Khái niệm thuật toán (giải thuật) - Algorithm 1.1. Định nghĩa thuật toán Có rất nhiều các định nghĩa cũng như cách phát biểu khác nhau về định nghĩa của thuật toán. Theo như cuốn sách giáo khoa nổi tiếng viết về thuật toán là Introduction to Algorithms” (Second Edition của Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest và Clifford Stein) thì thuật toán được định nghĩa như sau: “một thuật toán là một thủ tục tính toán xác định (well-defined) nhận các giá trị hoặc một tập các giá trị gọi là input sinh ra ra một vài giá trị hoặc một tập giá trị được gọi là output”. Nói một cách khác các thuật toán giống như là các cách thức, qui trình để hoàn thành một công việc cụ thể xác định (well-defined) nào đó. Ví dụ một đoạn mã chương trình tính các phần tử của dãy số Fibonaci là một cài đặt của một thuật toán cụ thể. Thậm chí một hàm đơn giản để cộng hai số cũng là một thuật toán hoàn chỉnh, mặc dù đó là một thuật toán đơn giản. 1.2. Đặc trưng của thuật toán Tính đúng đắn: Thuật toán cần phải đảm bảo cho một kết quả đúng sau khi thực hiện đối với các bộ dữ liệu đầu vào. Đây có thể nói là đặc trưng quan trọng nhất đối với một thuật toán. Tính dừng: Thuật toán cần phải đảm bảo sẽ dừng sau một số hữu hạn bước. Tính xác định: Các bước của thuật toán phải được phát biểu rõ ràng, cụ thể, tránh gây nhập nhằng hoặc nhầm lẫn đối với người đọc và hiểu, cài đặt thuật toán. Tính hiệu quả: thuật toán được xem là hiệu quả nếu như nó có khả năng giải quyết hiệu quả bài toán đặt ra trong thời gian hoặc các điều kiện cho phép trên thực tế đáp ứng được yêu cầu của người dùng. Tính phổ quát: thuật toán được gọi là có tính phố quát (phổ biến) nếu nó có thể giải quyết được một lớp các bài toán tương t.

Bai Giang Ctdl

Embed Size (px)

DESCRIPTION

Bản doc

Citation preview

Bai giang CTDL-print.docx

CHNG 1: CC KHI NIM C S1. Khi nim thut ton (gii thut) - Algorithm1.1. nh ngha thut tonC rt nhiu cc nh ngha cng nh cch pht biu khc nhau v nh ngha ca thut ton. Theo nh cun sch gio khoa ni ting vit v thut ton l Introduction to Algorithms (Second Edition ca Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest v Clifford Stein) th thut ton c nh ngha nh sau: mt thut ton l mt th tc tnh ton xc nh (well-defined) nhn cc gi tr hoc mt tp cc gi tr gi l input v sinh ra ra mt vi gi tr hoc mt tp gi tr c gi l output.Ni mt cch khc cc thut ton ging nh l cc cch thc, qui trnh hon thnh mt cng vic c th xc nh (well-defined) no . V d mt on m chng trnh tnh cc phn t ca dy s Fibonaci l mt ci t ca mt thut ton c th. Thm ch mt hm n gin cng hai s cng l mt thut ton hon chnh, mc d l mt thut ton n gin.1.2. c trng ca thut tonTnh ng n: Thut ton cn phi m bo cho mt kt qu ng sau khi thc hin i vi cc b d liu u vo. y c th ni l c trng quan trng nht i vi mt thut ton.Tnh dng: Thut ton cn phi m bo s dng sau mt s hu hn bc.Tnh xc nh: Cc bc ca thut ton phi c pht biu r rng, c th, trnh gy nhp nhng hoc nhm ln i vi ngi c v hiu, ci t thut ton.Tnh hiu qu: thut ton c xem l hiu qu nu nh n c kh nng gii quyt hiu qu bi ton t ra trong thi gian hoc cc iu kin cho php trn thc t p ng c yu cu ca ngi dng.Tnh ph qut: thut ton c gi l c tnh ph qut (ph bin) nu n c th gii quyt c mt lp cc bi ton tng t.Ngoi ra mi thut ton theo nh ngha u nhn cc gi tr u vo c gi chung l cc gi tr d liu Input. Kt qu ca thut ton (thng l mt kt qu c th no ty theo cc bi ton v thut ton c th) c gi l Output.2. Biu din thut tonThng c bn cch biu din mt thut ton, cch th nht l m t cc bc thc hin ca thut ton, cch th hai l s dng s gii thut, cch th ba l dng m gi, cch th 4 l dng ngn ng lp trnh.2.1. M t cc bc thc hin biu din thut ton ngi ta m t chnh xc cc bc thc hin ca thut ton, ngn ng dng m t thut ton c th l ngn ng t nhin hoc mt ngn ng lai ghp gia ngn ng t nhin vi mt ngn ng lp trnh no gi l cc on gi m lnh.V d: m t thut ton tm c s chung ln nht ca hai s nguyn.Input: Hai s nguyn a, b.Output: c s chung ln nht ca a, b.Thut ton:Bc 1: Nu a=b th USCLN(a, b)=a.Bc 2: Nu a > b th tm USCLN ca a-b v b, quay li bc 1;

Bc 3: Nu a < b th tm USCLN ca a v b-a, quay li bc 1;

2.2. S dng s (lu ) gii thut (flowchart)S dng cc k hiu hnh khi c bn to thnh mt m t mang tnh hnh thc(cch ny r rng hn so vi vic m t cc bc thc hin thut ton).

i khi vic m t gii thut bng hnh v s r rng v d hiu hn. Ton b hnh v dng m t thut ton c gi l lu hay s khi. Cch biu din ny gip chng ta c c mt ci nhn tng qut v ton b qu trnh x l vn /bi ton theo thut ton.

xy dng lu , chng ta quy c mt s k hiu trong hnh v nh sau:

Bt u v kt thc thut ton

Thc hin mt cng vic A

Gi mt chng trnh con A

D liu vo ra

Php th iu kin B

Sau y l v d dng lu biu din gii thut tnh tng ca n s nguyn u tin.

2. M t thut ton dng m gi

Vi nhng thut ton phc tp, vic v v theo di s khi thng khng thun tin. Trong mt s trng hp ngi ta dng ngn ngc gi m(gi ngn ng lp trnh) m t thut ton.

Khi th hin thut ton bng m gi, ta s vay mn cc c php ca mt ngn ng lp trnh no th hin thut ton. Tt nhin, mi ngn ng lp trnh u c nhng thao tc c bn l x l, r nhnh v lp. Dng m gi va tn dng c cc khi nim trong ngn ng lp trnh, va gip ngi ci t d dng nm bt ni dung thut ton. Tt nhin l trong m gi ta vn dng mt phn ngn ng t nhin.

Cc cu trc c bn c dng trong ngn ng gi m cng nh trong bt k ngn ng no Khc l cu trc tun t, r nhnh, cu trc lp.

a. Cu trc un t: Lit k cc cng vic, cc thao tc th t. h tr cho vic theo di c thun tin cng c th thm s th t.

b. Cu trc r nhnh:

+ if(k) ;

+ if(k) ;

Else ;

+ switch(bt)

{

case ds1:; break;

case ds2:; break;

case ds3:; break;

case dsn:; break;

}

+ switch(bt)

{

case ds1:; break;

case ds2:; break;

case ds3:; break;

case dsn:; break;

default

;

}

c. Cu trc lp:

+ for(bt1; bt2; bt3)

Trong : bt1: l biu thc khi to bin iu khin

bt2: kim tra iu kin ca bin iu khin

bt3: bc nhy ca bin iu khin

+ while ;

+ do

{

;

}while;

V d mt on m gi ca thut ton gii phng trnh bc haiif Delta > 0 then beginx1=(-b-sqrt(delta))/(2*a)

x2=(-b+sqrt(delta))/(2*a)

xut kt qu : phng trnh c hai nghim l x1 v x2end

elseif delta = 0 thenxut kt qu : phng trnh c nghim kp l -b/(2*a)

else {trng hp delta < 0 }

xut kt qu : phng trnh v nghim

Khi 1: Khi bt u thut ton, ch c duy nht mt ng ra;Khi 2: Khi kt thc thut ton, c th c nhiu ng vo;Khi 3: Thc hin cu lnh (c th l mt hoc nhiu cu lnh); gm mt ng vo v mt ng ra;Khi 4: R nhnh, kim tra biu thc iu kin (biu thc Boolean), nu biu thc ng thut ton s i theo nhnh ng (True), nu biu thc sai thut ton s i theo nhnh Sai (False).Khi 5: Cc cu lnh nhp v xut d liu.3. phc tp thut ton Algorithm Complexity3.1. Cc tiu ch nh gi thut tonThng thng nh gi mc tt, xu v so snh cc thut ton cng loi, c th da trn hai tiu chun:Thut ton n gin, d hiu, d ci t.- 3 -Bi ging mn hc: Cu trc D liu v Gii thutDa vo thi gian thc hin v ti nguyn m thut ton s dng thc hin trn cc b d liu.Trn thc t cc thut ton hiu qu th khng d hiu, cc ci t hiu qu cng khng d dng thc hin v hiu c mt cch nhanh chng. V mt iu c v nghch l l cc thut ton cng hiu qu th cng kh hiu, ci t cng phc tp li cng hiu qu (khng phi lc no cng ng). V th nh gi v so snh cc thut ton ngi ta thng da trn phc tp v thi gian thc hin ca thut ton, gi l phc tp thut ton (algorithm complexity). V bn cht phc tp thut ton l mt hm c lng (c th khng chnh xc) s php tnh m thut ton cn thc hin (t d dng suy ra thi gian thc hin ca thut ton) i vi mt b d liu input c kch thc N. N c th l s phn t ca mng trong trng hp bi ton sp xp hoc tm kim, hoc c th l ln ca s trong bi ton kim tra s nguyn t chng hn.3.2. nh gi thi gian thc hin thut ton minh ha vic nh gi phc tp thut ton ta xem xt v d v thut ton sp xp chn (selection sort) v sp xp i ch trc tip (exchange sort) nh sau:Ci t ca thut ton sp xp chn:for(i=0;itop_idx = -1;}void push(stack *s, int d){s->data[++s->top_idx] = d;}- 47 -Bi ging mn hc: Cu trc D liu v Gii thutvoid pop(stack *s){s->top_idx --;}int top(const stack *s){return s->data[s->top_idx];}int size(const stack *s){return s->top_idx+1;}int empty(const stack * s){return (s->top_idx==-1)?(1):(0);}int full(const stack * s){return (s->top_idx==MAX_ELEMENT-1)?(1):(0);}Cu trc stack c th ci t bng mng theo cc cch khc, hoc ci t bng con tr (chng ta s hc v phn ci t ny sau phn danh sch lin kt).Stack c th c ci t bng c mng v danh sch lin kt vy khi no chng ta s dng mng v khi no dng danh sch lin kt?Danh sch lin ktMng

C mi phn t ca stack cn c thm 2 byte (1 con tr). Nu kch thc ca mt phn t ln th khng ng k nhng nu l kiu int th kch thc s tng gp i.Xin cp pht mt vng nh c kch thc c nh v c th mt phn trong s khng bao gi c dng n v nu nh kch thc ca mt phn t ln th vng nh lng ph ny cng rt ln.

Khng c gii hn v s phn t ca stack.Kch thc ti a ca stack c xcnh ngay khi n c to ra.

- 48 -Bi ging mn hc: Cu trc D liu v Gii thut1.5. ng dng ca stackV d 1Stack c th dng kim tra cc cp k hiu cn bng trong mt chng trnh(chng hn {}, (), []).V d {()} v {()({})} l cc biu thc ng cn {((} v {(}) khng phi l cc biu thcng.

Chng ta thy rng nu nh mt biu thc l ng th trong qu trnh c cc k hiuca biu thc nu chng ta thy mt k hiu ng (chng hn ), } hay ]) th k hiu ny phi khp vi k hiu m c c thy gn nht (theo thi gian), v khi vic s dng stack cho cc bi ton nh th ny l hon ton hp l.Chng ta c th s dng thut ton sau y:while not end of InputS = next sumbolif(s is opening symbol)push(s)else // s l du ng ngoc if(stack.empty)Bo liV d:

elseIf(!stack.empty()) Bo li

R = stack.top() stack.pop() if(!match(s,r))Bo li1. Input: {()} s = {, push{, s = (, push (,s = ), r = pop = (, r,s match s = }, r = pop = {, r,s matchEnd of Input, stack rng => biu thc l ng. V d: Input = { ( ) ( { ) } } (sai)Input = { ( { } ) { } ( ) }- 49 -Bi ging mn hc: Cu trc D liu v Gii thutV d 2S dng Stack chuyn i cc dng biu thc i s. Trong v d ny chng ta s xem xt cc thut ton s dng stack chuyn i t biu i s dng trung t (dng thng thng, hay cn gi l infix notation) thnh cc biu thc dng tin t (prefix notation, hay cn gi l biu thc Balan Polish notation) v biu thc hu t (postfix notation, hay biu thc Balan ngc).Biu thc i s l mt s kt hp ng n gia cc ton hng (operand) v cc ton t (operator). Ton hng l cc s liu c th thc hin c cc thao tc tnh ton ton hc. Ton hng cng c th l cc bin s x, y, z hay cc hng s. Ton t l mt k hiu ch ra thao tc tnh ton ton hc hay logic gia cc ton hng, chng hn nh cc ton hng +, -, *, /, ^ (ton t m ha). Vic nh ngha cc biu thc i s mt cch cht ch v l thuyt l nh sau:Mt ton hng l mt biu thc hp lNu expression1 v expression2 l hai biu thc hp l v op l mt ton t th mt kt hp hp l gia biu thc expression1 vi biu thc expression2 s dng ton t op s cho ta mt biu thc i s hp lTheo nh ngha trn ta c x + y*z l mt biu thc i s hp l nhng *x y z+ khng phi l mt biu thc hp l. Trong cc biu thc i s ngi ta c th s dng cc du ng v m ngoc.Mt biu thc i s c th c biu din bng 3 dng khc nhau.Biu thc trung t (infix notation): y l dng biu din ph bin nht ca cc biu thc i s, trong cc biu thc trung t, ton t nm gia cc ton hng. V d nh 2 + 3 * (7 3)Biu thc tin t (prefix notation): dng biu din ny do nh ton hc ngi Balan Jan Lukasiewicz a ra vo nhng nm 1920. Trong dng biu din ny, ton t ng trc cc ton hng. V d nh + * 2 3 7Biu thc hu t (postfix notation): hay cn gi l biu thc Balan ngc, ton t ng sau cc ton hng. V d nh 2 3 7 *.Cu hi m chng ta c th t ra ngay lp tc y l: ti sao li cn s dng ti cc dng biu din tin t v hu t trong khi chng ta vn quen v vn s dng c cc biu thc dng trung t.L do l cc biu thc trung t khng n gin v d dng khi tnh gi tr ca chng nh chng ta vn tng. tnh gi tr ca mt biu thc trung t chng ta cn tnh ti u tin ca cc ton t ca biu thc v cc qui tc kt hp. u tin ca cc ton t v cc qui tc kt hp s quyt nh ti qu trnh tnh ton gi tr ca mt biu thc trung t.Chng ta c bng u tin ca cc ton t thng gp nh sau:

Ton t u tin

()

+ (mt ngi), - (mt ngi), !

- 50 -Bi ging mn hc: Cu trc D liu v Gii thut+ (cng), - (tr)

=

==, !=

&&

||

Khi bit u tin ton t chng ta c th tnh ton cc biu thc chng hn 2 +4 * 5 s bng 22 v trc ht cn ly 4 nhn vi 5, sau kt qu nhn c em cng vi2 v php nhn c u tin cao hn php cng. Nhng vi biu thc 2*7/3 th ta khng th tnh c v php nhn v php chia c u tin bng nhau, khi cn s dng ti cc qui tc kt hp cc ton t. Qui tc kt hp s cho chng ta bit th t thc hin cc ton tu c cng u tin. Chng hn chng ta c qui tc kt hp tri, ngha l cc ton t cng u tin s c thc hin t tri qua phi, hay qui tc kt hp phi. Nu theo qui tc kt hp tri th php ton trn s c kt qu l 4 (ly kt qu nguyn).V nhng vn lin quan ti u tin ton t v cc qui lut kt hp nn chng ta thng s dng cc dng biu din tin t v hu t trong vic tnh ton cc biu thc is.C biu thc hu t v tin t u c mt u im hn so vi cch biu din trung t: l khi tnh ton cc biu thc dng tin t v hu t chng ta khng cn phi ti u tin ton t v cc lut kt hp. Tuy nhin so vi biu thc trung t, cc biu thc tin t v hu t kh hiu hn v v th nn khi biu din chng ta vn s dng dng biu thc trung t, nhng khi tnh ton s s dng dng tin t hoc hu t, iu ny yu cu cn c cc thut ton chuyn i t dng trung t sang dng tin t hoc hu t.Vic chuyn i ca chng ta c th thc hin bng cch s dng cu trc stack ho cy biu thc (chng 5), phn ny chng ta s ch xem xt cc thut ton s dng stack v thut ton s dng cy biu thc kh phc tp.Thut ton chuyn i biu thc dng trung t thnh dng hu t s dng stack.V d 3Phn tch u tin ton tChng ta c th s dng cu trc stack phn tch v lng gi cc biu thc ton hc kiu nh:5 * (( (9+8) * (4 * 6) ) + 7)Trc ht chng ta chuyn chng thnh dng hu t (postfix):5 8 9 + 4 6 * * 7 + *Sau s dng mt stack thc hin vic tnh ton gi tr ca biu thc hu tnhn c.- 51 -Bi ging mn hc: Cu trc D liu v Gii thutNgoi ra cc stack cn c th dng ci t cc thut ton qui v kh qui cc ci t thut ton.2. Hng i - Queue2.1. Khi nimHng i l mt tp hp cc phn t cng kiu c t chc mt cch tun t (tuyn tnh) trong phn t c thm vo u tin s l phn t c loi b u tin khi hng i. Cc hng i thng c gi l cc cu trc FIFO (First In First Out).Cc v d thc t v hng i m chng ta c th thy trong cuc sng hng ngy l on ngi xp hng ch mua v tu, danh sch cc cuc hn ca mt gim c, danh sch cc cng vic cn lm ca mt ngi Cng c th nh ngha hng i l mt danh sch tuyn tnh cc phn t ging nhau vi mt s thao tc hn ch ti cc phn t trn danh sch .2.2. Cc thao tc c bn ca mt hng iTng t nh cu trc ngn xp, chng ta nh ngha cc thao tc trn hng i tun theo ci t chun ca hng i trong th vin STL v cc ti liu khc, gm c:1. push(d): thm phn t d vo v tr cui hng i.2. pop(): loi b phn t u hng i.3. front(): tr v gi tr phn t u hng i.4. back(): tr v gi tr phn t cui hng i.5. size(): tr v s phn t ang trong hng i.6. empty(): kim tra hng i c rng hay khng.7. full(): kim tra hng i y (ch cn khi ci t hng i bng mng).V d:Thao tcNi dungGi tr tr v

Khi to( )

push(7)( 7 )

push(8)( 7, 8 )

push(5)( 7, 8, 5 )

pop()( 8, 5 )7

pop()( 5 )8

2.3. Ci t hng i s dng mng ci t cu trc hng i chng ta c th s dng mng hoc s dng con tr(phn ny s hc sau phn danh sch lin kt):Ta lu cc phn t ca hng i trong mt mng data. u ca hng i l phn t u tin, v ui c ch ra bng cch s dng mt bin tail.push(d) c thc hin mt cch d dng: tng tail ln 1 v chn phn t vo vtr - 52 -Bi ging mn hc: Cu trc D liu v Gii thutpop() c thc hin khng hiu qu: tt c cc phn t u s b dn v u mng do phc tp l O(n).Lm th no chng ta c th ci thin tnh hnh ny?Thay v ch s dng mt bin ch s tail chng ta s dng hai bin tail v head, khi cn loi b (pop) mt phn t khi hng i chng ta s tng bin head ln 1:Tuy vy vn cn c vn , l sau n ln push() (n l kch thc mng) mng s y k c trong trng hp n gn nh rng v mt logic. gii quyt vn ny chng ta s s dng li cc phn t u mng. Khi push() mt phn t mi tail s c tng ln 1 nhng nu nh n cui mng th s t n bng 0.Vn mi ny sinh y l lm th no chng ta c th xc nh c khi no hng i rng hoc y?Cch gii quyt n gin l ta s dng mt bin lu s phn t thc s ca hng i gii quyt cho tt c cc thao tc kim tra hng i rng, y hoc ly s phn t ca hng i.#include #include const int MAX_ELEMENT = 100; // so phan tu toi da cua queue la 100// khai bao queue chua cac so nguyen typedef struct{int * data; // khai bao mang dong int head;int tail;int cap; // luu so phan tu cua hang doi} queue;// ham khoi tao queue rong void init(queue *q);void push(queue * s, int d);void pop(queue *q);int front(const queue *q); int back(const queue *q); int size(const queue *q);int empty(const queue *q);int full(const queue *q);// ham giai phong bo nho danh cho queue void clear(queue *q);- 53 -Bi ging mn hc: Cu trc D liu v Gii thutint main(){int a[] = {3, 5, 1, 8};int n = 4;int i; int d; queue q; init(&q);for(i=0;idata = (int*)malloc(MAX_ELEMENT * sizeof(int));q->head = q->tail = -1;q->cap = 0;}void clear(queue *q){if(q->data != NULL)free(q->data);q->head = q->tail = -1;q->cap = 0;}void push(queue *q, int d){- 54 -Bi ging mn hc: Cu trc D liu v Gii thutq->tail = (q->tail + 1) % MAX_ELEMENT;q->data[q->tail] = d;if(q->cap==0)// neu hang doi rong thi sau khi push// ca head va tail deu chi vao 1 phan tu q->head = q->tail;q->cap++;}void pop(queue *q){q->head = (q->head + 1)%MAX_ELEMENT;q->cap--;if(q->cap==0)q->head = q->tail = -1;}int front(const queue *q){return q->data[q->head];}int back(const queue *q){return q->data[q->tail];}int size(const queue *q){return q->cap;}int empty(const queue *q){return (q->cap==0)?(1):(0);}int full(const queue *q){return (q->cap==MAX_ELEMENT-1)?(1):(0);- 55 -Bi ging mn hc: Cu trc D liu v Gii thut}2.4. V d v hot ng ca hng i vi ci t bng mng vng trnTa gi s mng lu cc phn t ca hng i l E[0..3], cc bin head, tail lu v tr ca phn t u v cui hng i, ct R l ct kt qu thc hin cc thao tc trn hng i, cc du ? tng ng vi gi tr bt k.Thao tcheadtailE[0]E[1]E[2]E[3]R

Khi to-1-1????

push(55)0055???

push(-7)0155-7??

push(16)0255-716?

pop()1255-716?55

push(-8)1355-716-8

pop()2355-716-8-7

pop()3355-716-816

push(11)3411-716-8

2.5. ng dng ca hng iTrong cc h iu hnh:Hng i cc cng vic hoc cc tin trnh ang i c thc hinHng i cc tin trnh ch cc tn hiu t cc thit b IOCc file c gi ti my inM phng cc h thng hng i thi trong thc t.Cc khch hng trong cc ca hng tp ha, trong cc h thng ngn hngCc n t hng ca mt cng tyPhng cp cuCc cuc gi in thoi hoc cc t hng v my bay, cc t hng ca khch hng Cc ng dng khc:Th t topo: vi mt tp cc s kin, v cc cp (a, b) trong s kin a c u tin cao hn so vi s kin b (bi ton lp lch), duyt th theo chiu rng (Breadth First Search).Bi tp: Hy vit chng trnh chuyn i mt biu thc dng infix (dng thng thng) n gin (khng cha cc du ()) thnh mt biu thc dng tin t (prefix). V dny xem nh mt bi tp sinh vin t lm.- 56 -Bi ging mn hc: Cu trc D liu v Gii thut3. Hng i hai u Double Ended Queue (dequeu)4. Hng i u tin Priority Queue (pqueue)Hng i u tin l mt hng i trong vic thm v loi b cc phn t khng tun theo th t thng thng m da trn mt thuc tnh ca cc phn t gi l u tin (priority).5. Danh sch lin kt Linked list5.1. nh nghaDanh sch lin kt (linked list) l mt tp hp tuyn tnh cc phn t cng kiu gi l cc nt (node), mi nt c cc c im sau y:Mi nt c t nht hai trng (field) mt trng gi l trng d liu (data) v trng cn li l trng lin kt (link) tr ti (point to) (thng gi l next).Trng lin kt ca phn t th i ca danh sch s tr ti phn t th (i+1) ca danh schPhn t u tin ca danh sch lin kt c gi l head v phn t cui cng c gi l tail. Head khng cha d liu v trng next ca tail s ch vo NULL.Trng data l trng cha d liu m chng ta thc s lu trong danh sch lin ktGi tr NULL v vic thc hin tr ti (point to) ca mi lin kt thc s din ra nh th no ph thuc nhiu vo vic ci t c th danh sch lin kt.

C nhiu loi danh sch lin kt khc nhau ty thuc vo cu trc ca mi phn t trong danh sch (s trng lin kt vi cc phn t khc trong danh sch) nhng c bn nht l danh sch lin kt n (single linked list), mi phn t c mt trng lin kt nh trn hnh v minh ha, v khi chng ta ni n danh sch lin kt, nu khng c cc ch gii i km th ngm hiu l danh sch lin kt n.5.2. Cc thao tc trn danh sch lin kt.Tng t nh cc cu trc c bn stack v queue, chng ta nh ngha cc thao tc ca danh sch lin kt da trn ci t chun ca cu trc danh sch lin kt trong th vinSTL:1. push_front(d): thm mt phn t vo u danh sch.2. push_back(d): thm mt phn t vo cui danh sch.3. pop_front(): loi b phn t u danh sch.4. pop_back(): loi b phn t cui danh sch.5. erase(): xa b mt phn t khi danh sch.6. insert(): chn mt phn t mi vo mt v tr c th ca danh sch.7. size(): cho bit s phn t trong danh sch.- 57 -Bi ging mn hc: Cu trc D liu v Gii thut8. empty(): kim tra danh sch rng.9. begin(): tr v phn t u danh sch.10. end(): tr v phn t cui danh sch.11. sort(): sp xp danh sch theo trng kha (l mt trng con ca trng dliu).12. merge(): trn danh sch vi mt danh sch khc.13. clear(): xa b ton b cc phn t ca danh sch.14. find(): tm kim mt phn t trong danh sch theo kha tm kim.Cc thao tc khc cng c th c ci t vi mt danh sch lin kt lm cho cng vic ca cc lp trnh vin tr nn d dng hn:Di chuyn mt phn t trong danh schi hai phn t cho nhau5.3. Ci t danh sch lin kt s dng con trtypedef struct Node{no)

// truong du lieu int data;struct Node * next;} NodeType;Khi to danh sch: NodeType * head, * tail; head = new node; headnext = NULL;Cc thao tc trn s to ra mt danh sch lin kt rng (empty khng cha phn tTrong ci t ny chng ta cho tail ch vo NULL, thng c nh ngha l 0. Do trng next ca mt phn t s l 0, v khi chng ta bit l chng ta ang phn ttail ca danh sch. y tr ti (point to) c ngha l chng ta thc s s dng cc con tr. Chng ta s sm thy rng chng ta khng cn thit phi s dng cc con tr thc s ci t mt danh sch lin kt.Chn mt nt (node) vo danh sch lin ktD dng nhn thy rng cch n gin nht chn mt nt mi vo mt danh sch lin kt l t nt u (hoc cui) ca danh sch. Hoc cng c th chng ta mun chn cc phn t vo gia danh sch.Chn X vo gia I v S:struct node * A; A = new node;- 58 -Akey = X; Anext = Inext; Inext = A;

thc hin iu ny chng ta cn 2 tham chiu ti hai nt trong danh sch v khng cn quan tm ti di (s phn t) ca danh sch. Tuy nhin thc hin vic ny vi cc mng chc chn s khc nhiu.Xa mt nt (node) khi danh sch lin ktXa mt nt khi danh sch lin kt rt n gin chng ta ch cn thay i mt con tr, tuy nhin vn l chng ta cn bit nt no tr ti nt m chng ta nh xa. Gi s chng ta bit nt i tr ti nt x v chng ta mun xa b x:inext = xnext;

Ch c mt tham chiu b thay i khng ph thuc vo di ca danh sch (so snh vi ci t bng mng, tuy vy vn c vn vi ci t trn).Di chuyn (move) mt nt trong danh sch lin ktDi chuyn mt nt trong danh sch lin kt bao gm hai thao tc: xa b mt nt sau chn vo mt nt. V d chng ta mun di chuyn nt T t cui danh sch ln u danh sch:- 59 -

Mt ln na chng ta thy rng thao tc di chuyn ny ch i hi thay i 3 tham chiu v khng ph thuc vo di ca danh sch (so snh iu ny vi ci t bngmng).Ci t minh ha y ca danh sch lin kt n:#include #include #include // khai bao cau truc cho mot nut cua danh sach typedef struct Node{// truong du lieu int data;struct Node * next;} NodeType;// khai bao kieu danh sach typedef struct{}LList;

NodeType * head; NodeType * tail;// so phan tu cua danh sach int spt;// ham khoi tao danh sach void init(LList * list);

- 60 -Bi ging mn hc: Cu trc D liu v Gii thut// ham them 1 phan tu vao dau danh sach void push_front(LList *list, int d);// ham them mot phan tu vao cuoi danh sach void push_back(LList *list, int d);// ham xoa phan tu o cuoi danh sach int pop_back(LList * list);// ham xoa phan tu o dau danh sach int pop_front(LList * list);// ham tra ve phan tu dau tien int begin(const LList * list);// ham tra ve phan tu cuoi cung int end(const LList * list);void insertAfter(LList * list, NodeType * p); void insertBefore(LList * list, NodeType * p); void eraseAfter(LList * list, NodeType * p); void eraseBefore(LList * list, NodeType * p);// ham in danh sach void printList(LList list);// ham sap xep danh sach void sort(LList *list);// ham tim kiem trong danh sachNodeType * find(LList *, int d);// giai phong toan bo danh sach void clear(LList * list);// ham tron hai danh sach, ket qua luu trong danh sach thu nhat void merge(LList *list1, const LList *list2);// ham kiem tra danh sach lien ket co rong khong int empty(const LList *list);int main(){LList myList; LList list2; init(&myList);init(&list2);- 61 -Bi ging mn hc: Cu trc D liu v Gii thutpush_front(&myList, 10); push_front(&myList, 1); push_front(&myList, 12); push_back(&myList, 20); push_back(&myList, 23); push_back(&myList, 25); sort(&myList); printList(myList); push_front(&list2, 14); push_front(&list2, 9); merge(&myList, &list2); printList(myList); printList(list2); clear(&myList); printList(myList);return 0;}void init(LList * list){list->head = list->tail = NULL;list->spt = 0;}void printList(LList list){NodeType * tmp; tmp = list.head; while(tmp!=NULL){printf("%d ", tmp->data);tmp = tmp->next;}printf("\n");}void push_front(LList * list, int d)- 62 -Bi ging mn hc: Cu trc D liu v Gii thut{NodeType * tmp = (NodeType *)malloc(sizeof(NodeType));tmp->data = d;if(list->spt==0){}else{}

tmp->next = NULL;list->head = list->tail = tmp;tmp->next = list->head;list->head = tmp;list->spt = list->spt+1;}void push_back(LList * list, int d){NodeType * tmp = (NodeType *)malloc(sizeof(NodeType));tmp->data = d;tmp->next = NULL;if(list->spt==0)list->head = list->tail = tmp;else{}

list->tail->next = tmp;list->tail = tmp;list->spt = list->spt+1;}NodeType * find(LList * list, int d){NodeType * tmp = list->head;while(tmp!=NULL){- 63 -Bi ging mn hc: Cu trc D liu v Gii thutif (tmp->data==d)break;tmp = tmp->next;}return tmp;}int pop_back(LList * list){NodeType * p, * q;int ret = -1;if(list->spt>0){p = list->head;q = NULL;while(p->next!=NULL){q = p;p = p->next;}if(q!=NULL){}else

// danh sach chi co 1 phan tu q->next = NULL;list->tail = q;list->head = list->tail = NULL;ret = p->data;free(p);list->spt = list->spt-1;}return ret;}- 64 -Bi ging mn hc: Cu trc D liu v Gii thutint pop_front(LList * list){int ret=-1; NodeType * tmp; if(list->spt>0){tmp = list->head;if(list->spt==1){}else

// danh sach chi co 1 phan tu ret = list->head->data;list->head = list->tail = NULL;list->head = list->head->next;free(tmp);list->spt = list->spt - 1;}return ret;}// sap xep dung thuat toan doi cho truc tiep (interchange sort)void sort(LList * list){// s dng thut ton sp xp ni bt Bubble sortNodeType * p, * q;int tmp;p = list->head;while(p!=NULL){q = p->next;while(q!=NULL){if(q->data < p->data){- 65 -Bi ging mn hc: Cu trc D liu v Gii thuttmp = q->data;q->data = p->data;p->data = tmp;}q = q->next;}p = p->next;}}void clear(LList * list){NodeType * p, * q;if(list->spt>0){p = list->head;list->head = list->tail = NULL;list->spt = 0;while(p){q = p->next;free(p);p = q;}}}void merge(LList *list1, const LList *list2){NodeType * tmp; tmp = list2->head; while(tmp){push_back(list1, tmp->data);tmp = tmp->next;}- 66 -Bi ging mn hc: Cu trc D liu v Gii thut}int empty(const LList *list){return (list->spt==0)?(1):(0);}int begin(const LList * list){return list->head->data;}int end(const LList * list){return list->tail->data;}So snh gia danh sch lin kt v mngDanh sch lin kt c s phn t c th thay i v khng cn ch r kch thc tia ca danh trc. Ngc li mng l cc cu trc c kch thc c nhChng ta c th sp xp li, thm v xa cc phn t khi danh sch lin kt ch vi mt s c nh cc thao tc. Vi mng cc thao tc ny thng tng ng vi kch thcmng. tm n phn t th i trong mt danh sch lin kt chng ta cn phi d qua i-1 phn t ng trc n trong danh sch (i-1 thao tc) trong khi vi mng lm iu ny ch mt 1 thao tc.Tng t kch thc ca mt danh sch khng phi hin nhin m bit c trong khi chng ta lun bit r kch thc ca mt mng trong chng trnh (tuy nhin c mt cch n gin khc phc iu ny).5.4. Cc kiu danh sch lin kt khcDanh sch lin kt i (double linked list) ging nh mt danh sch lin kt n ngoi tr vic mi nt c thm mt trng previous tr vo nt ng trc n.Vi danh sch lin kt i cc thao tc nh tm kim, xa b mt nt khi danh sch thc hin d dng hn nhng ng thi cng mt nhiu b nh hn v s lng cc lnh thc hin mt thao tc trn danh sch lin kt i chc chn cng xp x gp i so vi danh sch lin kt i.Ngoi ra cn c mt loi danh sch lin kt khc c gi l danh sch lin kt vng(circular-linked list).- 67 -Nt cui cng tr ti nt u tinDanh sch lin kt vng c th l danh sch lin kt n hoc danh sch lin kt iN c th c ci t vi mt u (head) c nh hoc thay i

Vic ci t danh sch lin kt c th khng cn thit s dng ti cc con tr. Thay vo chng ta c th s dng cc mng ci t cc danh sch lin kt, y chng ta khng i su vo xem xt c th ci t mt danh sch lin kt bng mng nh th no nhng cng khng qu kh hnh dung cch thc hot ng ca cc danh sch kiu nh th.

Kt lun:Danh sch lin kt l cc cu trc d liu rt ging vi cc mngCc thao tc chnh thng c s dng i vi mt danh sch lin kt l thm, xa v tm kim trn danh schThao tc chn v xa c th thc hin vi thi gian hng sVic tm mt phn t trong danh sch lin kt thng mt thi gian tuyn tnh (xp x di danh sch) v trng hp xu nht l ng bng di ca danh sch. y cng chnh l mt trong nhng nhc im ln nht ca danh sch lin kt.5.5. Mt s v d s dng cu trc danh sch lin ktCc bi ton m danh sch lin kt thng c s dng l cc bi ton trong vic s dng mng s l khng thun li, chng hn mt bi ton yu cu cc thao tc thm, xa b xy ra thng xuyn th la chn thng minh s l s dng danh sch lin kt. Mt v d na l khi ta lm vic vi cc th tha (cc cnh t) ln (nhng s nh nhiu), thay v dng mt mng hai chiu, ta s dng mt mng cc danh sch lin kt, mi danh sch lin kt cha cc nh lin k ca mt nh ca th.5.6. Ci t stack v queue bng con trV bn cht, cc cu trc d liu stack v queue l cc cu trc danh sch lin kt hn ch, cc thao tc c gii hn so vi cu trc danh sch lin kt. V th c th coi mt stack hay queue l mt danh sch lin kt, v c th li dng ci t bng con tr ca danh- 68 -Bi ging mn hc: Cu trc D liu v Gii thutsch lin kt ci t cc cu trc stack v queue (s dng con tr). Phn ny c li xem nh mt bi tp ca sinh vin.5.7. Bi tpLm bi thc hnh s 3 tng ng ca mn hc.- 69 -Chng 5: Cy (Tree)1. nh ngha1.1. th (Graph)Trc khi xem xt khi nim th no l mt cy (tree) chng ta nhc li khi nim th (graph)

c hc trong hc phn Ton ri rc: th G bao gm hai thnh phnchnh: tp cc nh V (Vertices) v tp cc cung E(hay cnh Edges), thng vit dng G =. Trong tp cc nh V l tp cc i tng cng loi, c lp, chng hn nh cc im trn mt phng ta , hoc tp cc thnh ph, tp cc trng thi ca mt tr chi, mt i tng thc nh con ngi, tt c u c th l cc nh ca mt th no . Tp cc cung E l tp cc mi quan h hai ngi gia cc nh ca th, i vi nh l cc im th y c th l quan h v khong cch, tp nh l cc thnh ph th y c th l quan h v ng i (c tn ti ng i trc tip no gia cc thnh ph hay khng), hoc nu nh l cc trng thi ca mt tr chi th cnh c th l cch bin i (transform) i t trng thi ny sang mt trng thi khc, qu trnh chi chnh l bin i t trng thi ban u titrng thi ch (c ngha l i tm mt ng i).V d v th:

Hnh 5.1. th c 6 nh v 7 cnh, tham kho t wikipedia.C rt nhiu vn lin quan ti th, phn ny chng ta ch nhc li mt s khinim lin quan.Mt th c gi l n th (simple graph) nu nh khng c ng i gia hai nh bt k ca th b lp li, ngc li nu nh c ng i no b lp li hoc tn ti khuyn (self-loop), mt dng cung i t 1 nh n chnh nh , th th c gi l a th (multigraph).Gia hai nh u, v trong th c ng i trc tip th u, v c gi l lin k vinhau, cnh (u, v) c gi l lin thuc vi hai nh u, v. th c gi l th c hng (directed graph) nu nh cc ng i gia hai nh bt k trong th phn bit hng vi nhau, khi cc quan h gia cc nh c gi chnh xc l cc cung, ngc li nu khng phn bit hng gia cc nh trong cc cnh ni gia hai nh th th c gi l th v hng (undirected graph), khi ta nitp E l tp cc cnh ca th.- 70 -Cc cung hay cc cnh ca thj c th c gn cc gi tr gi l cc trng s (weight), mt th c th l th c trng s hoc khng c trng s. V d nh i vi th m cc nh l cc thnh ph ta c th gn trng s ca cc cung l di ng i ni gia cc thnh ph hoc chi ph i trn con ng Mt ng i (path) trong th l mt dy cc nh v1, v2, , vk, trong cc nh vi, vi+1 l lin k vi nhau. ng i c nh u trng vi nh cui c gi l chu trnh (cycle).Gia hai nh ca th c th c cc ng i trc tip nu chng lin k vi nhau, hoc nu c mt ng i gia chng (gin tip) th hai nh c gi l lin thng (connected) vi nhau. Mt th c gi l lin thng nu nh hai nh bt k ca n u lin thng vi nhau. Nu th khng lin thng th lun c th chia n thnh cc thnh phnlin thng nh hn.1.2. Cy (tree)C nhiu cch nh ngha cy khc nhau nhng y chng ta s nh ngha khi nim cy theo l thuyt th (graph theory).Cy l mt th v hng, khng c trng s, lin thng v khng c chu trnh. V d hnh v sau l mt cy:

Hnh 5.2. Cy, tham kho t wikipediaCu trc cy l mt cu trc c s dng rt rng ri trong cuc sng hng ngy v trn my tnh, chng hn cu trc t chc ca mt cng ty l mt cy phn cp, cu trc ca mt web site cng tng t:

Hnh 5.3. Cu trc web site wikipedia, tham kho t wikipedia.- 71 -Bi ging mn hc: Cu trc D liu v Gii thutCu trc t chc th mc ca h iu hnh l mt cy Trong cy lun c mt nt c bit gi l gc ca cy (root), cc nh trong cy c gi l cc nt (nodes). T gc ca cy i xung tt c cc nh lin k vi n, cc nh ny gi l con ca gc, n lt cc con ca gc li c cc nt con (child nodes) khc, nh vy quan h gia hai nt lin k nhau trong cy l quan h cha con, mt nt l cha (parent), mt nt l con (child), nt cha ca cha ca mt nt c gi l t tin (ancestor) ca nt .Cc nt trong cy c phn bit lm nhiu loi: cc nt c t nht 1 nt con c gi l cc nt trong (internal nodes hay inner nodes), cc nt khng c nt con c gi l cc nt l (leaf nodes). Cc nt l khng c cc nt con nhng thun tin trong qu trnh ci t ngi ta vn coi cc nt l c hai nt con gi, rng (NULL) ng vai tr lnh canh, gi l cc nt ngoi (external nodes).Cc nt trong cy c phn chia thnh cc tng (level), nt gc thuc tng 0 (level0), sau cc tng tip theo s c tng ln 1 n v so vi tng pha trn n cho n tng cui cng. cao (height) ca cy c tnh bng s tng ca cy, cao ca cy s quyt nh phc tp (s thao tc) khi thc hin cc thao tc trn cy.Mi nt trong ca cy tng qut c th c nhiu nt con, tuy nhin cc nghin cu ca ngnh khoa hc my tnh cho thy cu trc cy quan trng nht cn nghin cu chnh l cc cy nh phn (binary tree), l cc cy l mi nt ch c nhiu nht hai nt con. Mt cy tng qut lun c th phn chia thnh cc cy nh phn.Cc nt con ca mt nt trong cy nh phn c gi l nt con tri (left child) v nt con phi (right child).Trong chng ny chng ta s nghin cu mt s loi cy nh phn c bn v c ng dng rng ri nht, l cy tm kim nh phn BST (Binary Search Tree), cy biu thc (expression tree hay syntax tree) v cy cn bng (balanced tree) AVL.2. Cy tm kim nh phn2.1. nh nghaMi nt trong cy bt k u cha cc trng thng tin, trn mt cy tm kim nh phn mi nt l mt struct (bn ghi record) gm cc trng: trng d liu data, trng kha key so snh vi cc nt khc, cc lin kt ti cc nt con ca nt left v right. tp trung vo cc vn thut ton ta b qua trng d liu, ch xem nh mi nt trn cy tm kim nh phn gm c mt trng kha key v hai trng lin kt left v right.Vi cc gi thit trn ta nh ngha cy tm kim nh phn nh sau:Cy tm kim nh phn l mt cy nh phn (binary tree) m mi nt x trong cy tha mn bt ng thc kp sau:key(left _ child ( x)) key( x) key(right _ child ( x))- 72 -Trong left_child(x), right_child(x) l cc nt con tri v phi ca nt x, key() l hmtr v gi tr kha nt tng ng.V d:

Hnh 5.4. Cy tm kim nh phn BST, tham kho t wikipedia.u im chnh ca cy tm kim nh phn l: n cung cp thut ton sp xp v tm kim da trn kiu duyt th t gia (in-order) mt cch rt hiu qu, v l cu trc d liu c bn cho cc cu trc d liu cao cp hn (tru tng hn) nh tp hp (set), cc mng lin kt (associative array), cc nh x map, v cc cy cn bng ti u nh AVL, cy en. Chng ta s xem xt ti sao cy tm kim nh phn li hiu qu nh vy.2.2. Khi to cy rngThao tc u tin l khai bo cu trc cy v khi to mt cy rng bt u thc hin cc thao tc khc. y ta gi s cy tm kim nh phn ch cha cc kha l cc s nguyn dng.Khai bo cy tm kim nh phn trong ngn ng C nh sau:// khai bao cau truc cay tim kiem nhi phantypedef struct tree{int

key;struct tree *left,*right;}BSTree; khi to mt cy rng ta khai bo gc ca cy v gn cho gc bng NULL:// cayBSTree **root;*root = NULL;- 73 -Bi ging mn hc: Cu trc D liu v Gii thut2.3. Chn thm mt nt mi vo cy chn mt nt mi vo cy ta xut pht t gc ca cy, ta gi l nt ang xt. Nu nh nt ang xt c kha bng vi kha cn chn vo cy th xy ra hin tng trng kha, thut ton kt thc vi thng bo trng kha. Nu nh nt ang xt l mt nt ngoi (external nodes) th ta to mt nt mi v gn cc trng thng tin tng ng cho nt , gn cc con ca nt bng NULL.// them mot nut moi vao cay, gia tri khoa cua nut moi luu trong bien toan cuc newkey void insert(BSTree **root){if(*root==NULL){*root=calloc(1,sizeof(BSTree)); (*root)->key = newkey;(*root)->left=NULL; (*root)->right=NULL;}else{if((*root)->key>newkey)insert(&((*root)->left));elseif((*root)->keyright));elseprintf("\nError: Duplicate key");}}Thut ton trn s dng b nh (log n) trong trng hp trung bnh v (n) trong trng hp ti nht. phc tp thut ton bng vi cao ca cy, tc l O(log n) trong trng hp trung bnh i vi hu ht cc cy, nhng s l (n) trong trng hp xu nht.Cng nn ch l cc nt mi lun c chn vo cc nt ngoi ca cy tm kim nh phn, gc ca cy khng thay i trong qu trnh chn thm nt vo cy.2.4. Xa b khi cy mt ntKhi xa b mt nt X khi cy (da trn gi tr kha), chng ta chia ra mt s trng hp sau:- 74 -X l mt nt l: khi vic xa nt khng lm nh hng ti cc nt khc, ta chvic xa b nt khi cy.X ch c mt nt con (tri hoc phi): khi ta a nt con duy nht ca X ln thay cho nt X v xa b X.Cn nu X l mt nt trong v c hai con, ta s c hai la chn, mt l tm nt hu du nh nht bn nhnh phi ca X (gi l Y), thay kha ca Y ln X v xa b Y. Cch th hai l tm nt hu du ln nht bn nhnh tri ca X (gi l Z), thay kha ca Z ln X v xa b Z. Cc thao tc vi Y hoc Z c lp li tngt nh i vi X.Hnh minh ha:

Hnh 5.5. Xa nt trn cy BST, tham kho t wikipediaDo cc nt thc s b xa trong trng hp th ba s c th ri vo trng hp 1 hoc 2 (l cc nt l hoc cc nt ch c 1 con), ng thi nt b xa s c kha nh hn hai con ca X nn trong ci t ta nn trnh ch s dng mt phng php, v c th dn ti tnh hung mt tnh cn bng ca cy.Vic ci t thut ton xa mt nt trn cy tm kim nh phn khng n gin nh vic m t thut ton xa trn. Trc ht ta s xut pht t gc ca cy i tm nt cha kha cn xa trn cy. Trong qu trnh ny iu quan trng l ta xc nh r nt cn xa (bin p trong on m chng trnh bn di) l mt nt l, hay l mt nt ch c mt con, hay l nt c y c hai con. D trong trng hp no th chng ta cng cn xc nh nt cha ca nt p (nt q), v p l con tri hay con phi ca q. xc nh cc trng hp trn ta s dng mt bin c f, f bng 0 tng ng vi vic nt cn xa l gc ca cy, f bng 1tng ng vi p l con phi ca q, v f bng 2 tng ng vi p l con tri ca q.Ci t bng C ca thao tc xa mt nt khi cy BST:// xoa bo mot khoa khoi cayvoid del(BSTree ** root, int key){BSTree *p, *q, *r;int f=0;p = *root;- 75 -Bi ging mn hc: Cu trc D liu v Gii thutq = NULL;while(p!=NULL&&p->key!=key){q = p;if(p->keyright;}else{f = 2;p = p->left;}}if(p!=NULL){if(p->right==NULL){if(f==1){q->right=p->left;free(p);}else if(f==2){q->left=p->left;free(p);}else{*root = p->left;free(p);- 76 -Bi ging mn hc: Cu trc D liu v Gii thut}}else{q = p->right; r = NULL; while(q->left){r = q;q = q->left;}p->key = q->key;if(r==NULL)p->right = q->right;elser->left = q->right;free(q);}}}Mc d vic xa cy khng phi lun i hi phi duyt t gc xung thc hin mt nt l nhng tnh hung ny lun c th xy ra (duyt qua tng nt ti mt nt l), khi phc tp ca thut ton xa cy tng ng vi cao ca cy (tnh hung ti nht).2.5. Tm kim trn cyVic tm kim trn cy nh phn tm kim ging nh khi ta thm mt nt mi vo cy. Da trn kha tm kim key ta xut pht t gc, gi nt ang xt l X. Nu kha ca X bng vi key, th kt thc v tr v X. Nu X l mt nt l th kt qu tr v NULL (cng chnh l X). Nu kha ca X nh hn key th ta lp li thao tc tm kim vi nt con phi ca X, ngc li th tin hnh tm kim vi nt con tri ca X. phc tp ca thut ton ny bng vi phc tp ca thut ton chn mt nt mi vo cy.Ci t ca thut ton c li nh mt bi tp dnh cho cc bn c gi.2.6. Duyt cyDuyt cy (tree travel) l thao tc duyt qua (n thm) tt c cc nt trn cy.- 77 -C nhiu cch duyt mt cy, chng hn nh duyt theo chiu su (DFS), duyt theo chiu rng (BFS), nhng y ta phn chia cc cch duyt mt cy BST da trn tht n thm nt gc, nt con tri, v nt con phi ca gc.C th c ba cch duyt mt cy BST: duyt th t trc, th t gia, th t sau. minh ha kt qu ca cc cch duyt cy ta xt cy v d sau:

Hnh 5.6. Cy tm kim nh phn, tham kho t wikipediaDuyt th t trc (pre-order traversal):Thm gc (visit root).Duyt cy con tri theo th t trcDuyt cy con phi theo th t trc.C th thut ton c ci t nh sau:// duyet theo thu tu truocvoid pre_order(BSTree *node){if(node!=NULL){visit(node); // ham tham mot nut, don gian la in gia tri khoapre_order(node->left);pre_order(node->right);}}Kt qu duyt cy theo th t trc: 8, 3, 1, 6, 4, 7, 10, 14, 13.Trong cch duyt theo th t trc, gc ca cy lun c thm u tin.Duyt th t gia (in-order traversal):- 78 -Duyt cy con tri theo th t giaThm gcDuyt cy con phi theo th t gia.Kt qu duyt cy theo th t trc: 1, 3, 4, 6, 7, 8, 10, 13, 14.Mt iu d nhn thy l cc kha ca cy khi duyt theo th t gia xut hin theo th t tng dn.Duyt th t sau (post-order traversal):Duyt cy con tri theo th t sauDuyt cy con phi theo th t sauThm gcKt qu duyt cy theo th t sau: 1, 4, 7, 6, 3, 13, 14, 10, 8. Trong cch duyt ny, gc c thm sau cng.tp.

Ci t bng C ca hai cch duyt sau c dnh cho cc bn c gi nh mt bi2.7. Ci t cy BSTPhn ci t ca cy BST c li nh mt bi tp cho cc bn c gi.3. Cy biu thc (syntax tree)3.1. nh ngha3.2. Chuyn i biu thc dng trung t thnh cy biu thc3.3. Tnh ton gi tr ca biu thc trung t4. Cy cn bng AVL4.1. nh nghaCy AVL l mt cy tm kim nh phn t cn bng (self-balancing binary search tree), v l cu trc cy cn bng u tin c pht minh ra. Trong mt cy AVL, cao ca hai nt con ca mt nt bt k trong cy sai khc nhau nhiu nht l 1, v do thuc tnh ny ca cy c gi l thuc tnh cn bng cao (height balanced). Cc thao tc tm kim, chn mt phn t mi, v xa b mt phn t khi cy u c phc tp l O(log N) trong c trng hp trung bnh v trng hp ti nht. Cc thao tc lm nh hng ti tnh cht cn bng ca cy l thao tc chn v xa b khi cy mt nt, sau cc thao tc ny iu chnh li cc nt trong cy nhm gi cho cy vn c cn bng, chng ta cn thc hin cc thao tc quay (xoay rotation) cy.Thut ng cy AVL c t theo tn ca hai tc gi ngi Nga pht minh ra loi cu trc cy ny l G.M. Adelson Velsky v E.M. Landis, trong bi bo ca hai ngi cngb vo nm 1962: An algorithm for the organization of information.- 79 -Nhn t cn bng ca mt nt bt k trong cy chnh l cao cy con phi tr i cao cy con tri ca n. Mt nt c nhn t cn bng bng 1, 0 hoc -1 c coi l cn bng. Mt nt vi nhn t cn bng nhn cc gi tr khc s c xem l khng cn bng v cn phi cn bng li. Nhn t cn bng c th c lu ti cc nt trong cy hoc tnh da trn cao cc cy con ca n.

Hnh 5.1. Cy AVLCy AVL tng i ging vi mt loi cy cn bng khc, l cy en (Red Black Tree) v cc thao tc v s thao tc cn thc hin khi tm kim, thm, xa phn t khi cy. Mc d cy en c tnh cht cn bng khng cht ch bng cy AVL nhng v hiu nng th tng ng nhau, trong mt s ng dng i hi thc hin cc thao tc tmkim trn cc tp d liu rt ln th cy AVL t ra chim u th hn.4.2. Cc thao tc trn cy AVL4.3. Xoay trn cy AVL4.4. Ci t cy AVL- 80 -Bi ging mn hc: Cu trc D liu v Gii thutTi liu tham kho1. Wikipedia, T in bch khoa ton th trc tuyn ting Vit,http://vi.wikipedia.org/wiki/.2. Wikipedia, T in bch khoa ton th trc tuyn ting Anh,http://en.wikipedia.org/wiki/Main_Page.3. Cc ti liu v bi ging ti website:http://csce.unl.edu/~cusack/Teaching/?page=notes.4. Thomas H.Cormen, Charles E.Leiserson, Ronald L.Rivest and Clifford Stein, Introduction to Algorithms, Second Edition, The MIT Press, 2001, 1180 pages.5. Jeff Cogswell, Christopher Diggins, Ryan Stephens, Jonathan Turkanis, C++ Cookbook, OReilly, November 2005, 592 pages.6. 158488360X.Chapman & Hall.CRC.Computer Science Handbook, SecondEdition.pdf- 81 -Begin

End

A

A

B

ng

sai

Begin

c vo n

S=0

i=0

S=S+i

i=i+1

i>n

In S

End

sai

ng

N/2 2