You are on page 1of 98

I HC NNG TRNG CAO NG CNG NGH THNG TIN

BI GING

CU TRC D LIU V GII THT

NGUYN C HIN

A NNG 2007

Cu trc d liu v Gii thut

MC LC
MC LC................................................................................................................................................................. 4 TNG QUAN V THUT TON V CU TRC D LIU ............................................................................ 6 I. CC BC C BN KHI GII QUYT BI TON TIN HC .............................................................. 6 I.1. Xc nh bi ton ............................................................................................................................... 6 I.2. Xc inh cu trc d liu ................................................................................................................... 6 I.3. Tm thut ton .................................................................................................................................... 7 I.4. Lp trnh............................................................................................................................................. 8 I.5. Kim th ............................................................................................................................................. 9 I.6. Ti u ho chng trnh .................................................................................................................. 10 II. DIN T THUT TON.......................................................................................................................... 11 II.1. Dng lu ...................................................................................................................................... 11 II.2. Dng ngn ng lp trnh c th ....................................................................................................... 12 II.3. Dng ngn ng gi........................................................................................................................... 13 III. THUT TON QUI ....................................................................................................................... 16 III.1. Khi nim qui .............................................................................................................................. 16 III.2. Thut ton qui ............................................................................................................................. 16 III.3. Hiu lc ca qui .......................................................................................................................... 18 III.4. Thut ton quay lui .......................................................................................................................... 19 IV. NH GI THUT TON ................................................................................................................. 20 IV.1. Phn tch thut ton ......................................................................................................................... 20 IV.2. Xc inh phc tp tnh ton ca thut ton ................................................................................ 22 DANH SCH.......................................................................................................................................................... 26 I. KHI NIM DANH SCH....................................................................................................................... 26 II. BIU DIN DANH SCH TRN MY TNH ........................................................................................ 27 III. MNG V DANH SCH C........................................................................................................... 27 III.1. Ci t mng .................................................................................................................................... 27 III.2. Cc thao tc trn danh sch............................................................................................................. 27 IV. DANH SCH LIN KT ..................................................................................................................... 30 IV.1. Danh sch ni n ........................................................................................................................... 31 IV.2. Danh sch ni vng.......................................................................................................................... 34 IV.3. Danh sch ni kp ............................................................................................................................ 37 IV.4. a danh sch.................................................................................................................................... 39 V. NGN XP ............................................................................................................................................... 39 V.1. nh ngha ngn xp ........................................................................................................................ 39 V.2. Ci t ngn xp bng mng............................................................................................................ 40 V.3. Ci t ngn xp bng danh sch lin kt n ................................................................................ 42 V.4. ng dng ngn xp kh qui.................................................................................................... 43 VI. HNG I ........................................................................................................................................... 45 VI.1. nh ngha hng i ........................................................................................................................ 45 VI.2. Ci t hng i bng mng............................................................................................................ 46 VI.3. Ci t hng i bng danh sch lin kt n................................................................................. 48 CY ......................................................................................................................................................................... 50 I. MT S KHI NIM V CY................................................................................................................ 50 I.1. Khi nim ......................................................................................................................................... 50 I.2. Biu din cy .................................................................................................................................... 51 I.3. Duyt cy.......................................................................................................................................... 53 II. CY NH PHN ....................................................................................................................................... 54 II.1. nh ngha........................................................................................................................................ 54 II.2. Ci t cy nh phn ........................................................................................................................ 55 II.3. Cc php duyt cy nh phn ........................................................................................................... 57 III. CY BIU DIN BIU THC............................................................................................................ 58 http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

III.1. Biu din biu thc di dng cy................................................................................................... 58 III.2. Cc k php dng cho biu thc ...................................................................................................... 59 III.3. Mt s thut ton i vi biu thc.................................................................................................. 60 IV. CY TNG QUT .............................................................................................................................. 62 IV.1. Cy K phn.................................................................................................................................... 63 IV.2. Cy tng qut ................................................................................................................................... 63 THUT TON SP XP ..................................................................................................................................... 66 I. II. BI TON SP XP ................................................................................................................................ 66 MT S THUT TON SP XP N GIN...................................................................................... 68 II.1. Sp xp kiu chn............................................................................................................................. 68 II.2. Sp xp kiu ni bt ......................................................................................................................... 69 II.3. Sp xp kiu chn ............................................................................................................................. 69 III. SP XP KIU PHN ON (QUICK SORT) ...................................................................................... 70 IV. SP XP KIU VUN NG............................................................................................................... 72 V. MT S THUT TON KHC .............................................................................................................. 75 V.1. Phng php m ............................................................................................................................ 75 V.2. Phng php dng hng i............................................................................................................ 76 V.3. Phng php sp xp trn ............................................................................................................... 77 CC THUT TON TM KIM ........................................................................................................................... 80 I. BI TON TM KIM.............................................................................................................................. 80 II. TM KIM TUN T............................................................................................................................... 80 III. TM KIM NH PHN......................................................................................................................... 81 IV. PHP BM (HASH)............................................................................................................................. 81 V. CY TM KIM NH PHN .................................................................................................................... 82 V.1. nh ngha........................................................................................................................................ 82 V.2. Ci t cy tm kim nh phn.......................................................................................................... 82 VI. CY TM KIM C S (RADIX SEARCH TREE RST)................................................................. 86 BIU DIN TH............................................................................................................................................... 90 I. II. MT S KHI NIM............................................................................................................................... 90 CC CCH BIU DIN TH ............................................................................................................. 91 II.1. Biu din th bng ma trn k ..................................................................................................... 91 II.2. Biu din th bng danh sch cc nh k:.................................................................................. 93 III. CC PHP DUYT TH (TRAVERSALS OF GRAPH) .............................................................. 94 III.1. Duyt theo chiu su (depth-first search) ........................................................................................ 94 III.2. Duyt theo chiu rng (breadth-first search)................................................................................... 95 IV. MT S BI TON TRN TH ................................................................................................... 96 IV.1. Bi ton tm ung i ngn nht t mt nh ca th ................................................................. 97 IV.2. Tm ng i ngn nht gia tt c cc cp nh ........................................................................... 99 TI LIU THAM KHO ................................................................................................................................... 100

TRNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

CHNG 1

TNG QUAN V THUT TON V CU TRC D LIU


I. CC BC C BN KHI GII QUYT BI TON TIN HC I.1. Xc nh bi ton
Vic xc nh bi ton tc l phi xc nh xem ta phi gii quyt vn g?, vi gi thit no cho v li gii cn phi t nhng yu cu no. Input Process Output (D liu vo X l Kt qu ra) i vi nhng bi ton tin hc ng dng trong thc t, li gii cn tm ch cn tt ti mc no , thm ch l ti mc chp nhn c. Bi li gii tt nht i hi qu nhiu thi gian v chi ph. V d: Khi ci t cc hm s phc tp trn my tnh. Nu tnh bng cch khai trin chui v hn th chnh xc cao hn nhng thi gian chm hn hng t ln so vi phng php xp x. Trn thc t vic tnh ton lun lun cho php chp nhn mt sai s no nn cc hm s trong my tnh u c tnh bng phng php xp x ca gii tch s Xc nh ng yu cu bi ton l rt quan trng bi n nh hng ti cch thc gii quyt v cht lng ca li gii. Mt bi ton thc t thng cho bi nhng thng tin kh m h v hnh thc, ta phi pht biu li mt cch chnh xc v cht ch hiu ng bi ton. V d: Bi ton: Mt d n c n ngi tham gia tho lun, h mun chia thnh cc nhm v mi nhm tho lun ring v mt phn ca d n. Nhm c bao nhiu ngi th c trnh ln by nhiu kin. Nu ly mi nhm mt kin em ghp li th c mt b kin trin khai d n. Hy tm cch chia s b kin cui cng thu c l ln nht. Pht biu li: Cho mt s nguyn dng n, tm cc phn tch n thnh tng cc s nguyn dng sao cho tch ca cc s l ln nht. Trn thc t, ta nn xt mt vi trng hp c th thng qua hiu c bi ton r hn v thy c cc thao tc cn phi tin hnh. i vi nhng bi ton n gin, i khi ch cn qua v d l ta c th a v mt bi ton quen thuc gii.

I.2. Xc inh cu trc d liu


Kiu d liu (data type): kiu d liu ca mt bin l tp hp cc gi tr m bin c th nhn. V d mt bin kiu Boolean ch c th nhn TRUE hoc FALSE m khng nhn gi tr no khc. Cc kiu d liu c bn (nh Integer, Char, Real, Boolean) c cung cp khc nhau trong cc ngn ng lp trnh khc nhau.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

Mt kiu d liu tru tng (abstract data type): l mt m hnh ton hc cng vi mt tp hp cc php ton trn n. C th ni kiu d liu tru tng l mt kiu d liu do chng ta nh ngha mc khi nim (conceptual), n cha c ci t c th bng mt ngn ng lp trnh. Nh dn ra trn, chng ta dng kiu d liu tru tng thit k gii thut, nhng ci t gii thut vo mt ngn ng lp trnh chng ta phi tm cch biu din kiu d liu tru tng trn cc kiu d liu v ton t do ngn ng lp trnh cung cp. Cu trc d liu: Tp hp cc bin c th thuc mt hoc vi kiu d liu khc nhau c ni kt vi nhau to thnh nhng phn t. Cc phn t ny chnh l thnh phn c bn xy dng nn cu trc d liu. Cu trc d liu l nguyn tc kt ni cc phn t ny vi nhau trong b nh khi c biu din bng mt ngn ng lp trnh c th. Khi gii mt bi ton, ta cn phi nh ngha tp hp d liu biu din tnh trng c th. Vic la chn ny tu thuc vo vn cn gii quyt v nhng thao tc s tin hnh trn d liu vo. C nhng thut ton ch thch ng vi mt cch t chc d liu nht nh, i vi nhng cch t chc d liu khc th s km hiu qu hoc khng th thc hin c. Chnh v vy nn bc xy dng cu trc d liu khng th tch ri bc tm kim thut ton gii quyt vn . Cc tiu chun khi la chn cu trc d liu Cu trc d liu trc ht phi biu din c y cc thng tin nhp v xut ca bi ton Cu trc d liu phi ph hp vi cc thao tc ca thut ton m ta la chn gii quyt bi ton. Cu trc d liu phi ci t c trn my tnh vi ngn ng lp trnh ang s dng i vi mt s bi ton, trc khi t chc d liu ta phi vit mt on chng trnh nh kho st xem d liu cn lu tr ln ti mc no.

I.3. Tm thut ton


Thut ton v Cu trc d liu c mi quan h mt thit vi nhau. Do , khi xy dng mt cu trc d liu th i i vi vic xc lp cc thut ton x l trn cu trc d liu .

Data Structure + Algorithm =Program


Thut ton l mt h thng cht ch v r rng cc quy tc nhm xc nh mt dy thao tc trn cu trc d liu sao cho: Vi mt b d liu vo, sau mt s hu hn bc thc hin cc thao tc ch ra, ta t c mc tiu nh. Cc c trng ca thut ton 1. Tnh n nh mi bc ca thut ton, cc thao tc phi ht sc r rng, khng gy nn s nhp nhng, ln xn, tu tin, a ngha. Thc hin ng cc bc ca thut ton th vi mt d liu vo, ch cho duy nht mt kt qu ra. 2. Tnh dng Thut ton khng c ri vo qu trnh v hn, phi dng li v cho kt qu sau mt s hu hn bc. 3. Tnh ng

TRNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

Sau khi thc hin tt c cc bc ca thut ton theo ng qu trnh nh, ta phi c kt qu mong mun vi mi b d liu u vo. Kt qu c kim chng bng yu cu bi ton. 4. Tnh ph dng Thut ton phi d sa i thch ng c vi bt k bi ton no trong mt lp cc bi ton v c th lm vic trn cc d liu khc nhau. 5. Tnh kh thi a) Kch thc phi nh: V d: Mt thut ton s c tnh hiu qu bng 0 nu lng b nh m n yu cu vt qu kh nng lu tr ca h thng my tnh. b) Thut ton phi c my tnh thc hin trong thi gian cho php, iu ny khc vi li gii ton (Ch cn chng minh l kt thc sau hu hn bc). V d nh xp thi kho biu cho mt hc k th khng th cho my tnh chy ti hc k sau mi ra c. c) Phi d hiu v d ci t. V d: Input: 2 s nguyn t nhin a v b khng ng thi bng 0 Output: c s chung ln nht ca a v b Thut ton s tin hnh c m t nh sau: (Thut ton Euclide) Bc 1 (Input): Nhp a v b: S t nhin Bc 2: Nu b 0 th chuyn sang bc 3, nu khng th b qua bc 3, i lm bc 4 Bc 3: t r := a mod b; t a := b; t b := r; Quay tr li bc 2. Bc 4 (Output): Kt lun c s chung ln nht phi tm l gi tr ca a. Kt thc thut ton. Mt s vn cn lu Khi m t thut ton bng ngn ng t nhin, ta khng cn phi qu chi tit cc bc v tin trnh thc hin m ch cn m t mt cch hnh thc chuyn thnh ngn ng lp trnh. Vit s cc thut ton quy l mt v d. i vi nhng thut ton phc tp v nng v tnh ton, cc bc v cc cng thc nn m t mt cch tng minh v ch thch r rng khi lp trnh ta c th nhanh chng tra cu. i vi nhng thut ton kinh in th phi thuc. Khi gii mt bi ton ln trong mt thi gian gii hn, ta ch phi thit k tng th cn nhng ch thuc th c vic lp rp vo. Tnh ng n ca nhng m-un thuc ta khng cn phi quan tm na m tp trung gii quyt cc phn khc.

I.4. Lp trnh
Sau khi c thut ton, ta phi tin hnh lp trnh th hin thut ton . Mun lp trnh t hiu qu cao, cn phi c k thut lp trnh tt. K thut lp trnh tt th hin k nng vit chng trnh, kh nng g ri v thao tc nhanh. Lp trnh tt khng phi ch cn nm vng ngn ng lp trnh l , phi bit cch vit chng trnh uyn chuyn, khn kho v pht trin dn dn chuyn cc tng ra thnh chng trnh hon chnh. Kinh nghim cho thy mt thut ton hay nhng do ci t vng v nn khi chy li cho kt qu sai hoc tc chm.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

Thng thng, ta khng nn c th ho ngay ton b chng trnh m nn tin hnh theo phng php tinh ch tng bc (Stepwise refinement): Ban u, chng trnh c th hin bng ngn ng t nhin, th hin thut ton vi cc bc tng th, mi bc nu ln mt cng vic phi thc hin. Mt cng vic n gin hoc l mt on chng trnh c hc thuc th ta tin hnh vit m lnh ngay bng ngn ng lp trnh. Mt cng vic phc tp th ta li chia ra thnh nhng cng vic nh hn li tip tc vi nhng cng vic nh hn . Trong qu trnh tinh ch tng bc, ta phi a ra nhng biu din d liu. Nh vy cng vi s tinh ch cc cng vic, d liu cng c tinh ch dn, c cu trc hn, th hin r hn mi lin h gia cc d liu. Phng php tinh ch tng bc l mt th hin ca t duy gii quyt vn t trn xung, gip cho ngi lp trnh c c mt nh hng th hin trong phong cch vit chng trnh. Trnh vic m mm, xo i vit li nhiu ln, bin chng trnh thnh t giy nhp.

I.5. Kim th
1. Chy th v tm li Chng trnh l do con ngi vit ra, m l con ngi th ai cng c th nhm ln. Mt chng trnh vit xong cha chc chy c ngay trn my tnh cho ra kt qu mong mun. K nng tm li, sa li, iu chnh li chng trnh cng l mt k nng quan trng ca ngi lp trnh. K nng ny ch c c bng kinh nghim tm v sa cha li ca chnh mnh. C ba loi li: Li c php: Li ny hay gp nht nhng li d sa nht, ch cn nm vng ngn ng lp trnh l . Mt ngi c coi l khng bit lp trnh nu khng bit sa li c php. Li ci t: Vic ci t th hin khng ng thut ton nh, i vi li ny th phi xem li tng th chng trnh, kt hp vi cc chc nng g ri sa li cho ng. Li thut ton: Li ny t gp nht nhng nguy him nht, nu nh th phi iu chnh li thut ton, nu nng th c khi phi loi b hon ton thut ton sai v lm li t u. 2. Xy dng cc b test C nhiu chng trnh rt kh kim tra tnh ng n. Nht l khi ta khng bit kt qu ng l th no?. V vy nu nh chng trnh vn chy ra kt qu (khng bit ng sai th no) th vic tm li rt kh khn. Khi ta nn lm cc b test th chng trnh ca mnh. Cc b test nn t trong cc file vn bn, bi vic to mt file vn bn rt nhanh v mi ln chy th ch cn thay tn file d liu vo l xong, khng cn g li b test t bn phm. Kinh nghim lm cc b test l: Bt u vi mt b test nh, n gin, lm bng tay cng c c p s so snh vi kt qu chng trnh chy ra. Tip theo vn l cc b test nh, nhng cha cc gi tr c bit hoc tm thng. Kinh nghim cho thy y l nhng test d sai nht. Cc b test phi a dng, trnh s lp i lp li cc b test tng t. C mt vi test ln ch kim tra tnh chu ng ca chng trnh m thi. Kt qu c ng hay khng th trong a s trng hp, ta khng th kim chng c vi test ny.
TRNG CAO NG CNG NGH THNG TIN

10

Cu trc d liu v Gii thut

Lu rng chng trnh chy qua c ht cc test khng c ngha l chng trnh ng. Bi c th ta cha xy dng c b test lm cho chng trnh chy sai. V vy nu c th, ta nn tm cch chng minh tnh ng n ca thut ton v chng trnh, iu ny thng rt kh.

I.6. Ti u ho chng trnh


Mt chng trnh chy ng khng c ngha l vic lp trnh xong, ta phi sa i li mt vi chi tit chng trnh c th chy nhanh hn, hiu qu hn. Thng thng, trc khi kim th th ta nn t mc tiu vit chng trnh sao cho n gin, min sao chy ra kt qu ng l c, sau khi ti u chng trnh, ta xem li nhng ch no vit cha tt th ti u li m lnh chng trnh ngn hn, chy nhanh hn. Khng nn vit ti u ti u m n , bi chng trnh c m lnh ti u thng phc tp v kh kim sot. Ta nn ti u chng trnh theo cc tiu chun sau: 1. Tnh tin cy Chng trnh phi chy ng nh d nh, m t ng mt gii thut ng. Thng thng khi vit chng trnh, ta lun c thi quen kim tra tnh ng n ca cc bc mi khi c th. 2. Tnh uyn chuyn Chng trnh phi d sa i. Bi t c chng trnh no vit ra hon ho ngay c m vn cn phi sa i li. Chng trnh vit d sa i s lm gim bt cng sc ca lp trnh vin khi pht trin chng trnh. 3. Tnh trong sng Chng trnh vit ra phi d c d hiu, sau mt thi gian di, khi c li cn hiu mnh lm ci g?. nu c iu kin th cn c th sa sai (nu pht hin li mi), ci tin hay bin i c chng trnh gii quyt bi ton khc. Tnh trong sng ca chng trnh ph thuc rt nhiu vo cng c lp trnh v phong cch lp trnh. 4. Tnh hu hiu Chng trnh phi chy nhanh v t tn b nh, tc l tit kim c c v khng gian v thi gian. c mt chng trnh hu hiu, cn phi c gii thut tt v nhng tiu xo khi lp trnh. Tuy nhin, vic p dng qu nhiu tiu xo c th khin chng trnh tr nn ri rm, kh hiu khi sa i. Tiu chun hu hiu nn dng li mc chp nhn c, khng quan trng bng ba tiu chun trn. Bi phn cng pht trin rt nhanh, yu cu hu hiu khng cn phi t ra qu nng. T nhng phn tch trn, chng ta nhn thy rng vic lm ra mt chng trnh i hi rt nhiu cng on v tiu tn kh nhiu cng sc. Ch mt cng on khng hp l s lm tng chi ph vit chng trnh. Ngh ra cch gii quyt vn kh, bin tng thnh hin thc cng khng d cht no. Nhng cu trc d liu v gii thut cp ti trong chuyn ny l nhng kin thc rt ph thng, mt ngi hc lp trnh khng sm th mun cng phi bit ti. Ch hy vng rng khi hc xong chuyn ny, qua nhng cu trc d liu v gii thut ht sc mu mc, chng ta rt ra c bi hc kinh nghim: ng bao gi vit chng trnh khi m cha suy xt k v gii thut v nhng d liu cn thao tc, bi nh vy ta d mc phi hai sai lm trm trng: hoc l sai v gii thut, hoc l gii thut khng th trin khai ni trn mt cu trc d liu
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

11

khng ph hp. Ch cn mc mt trong hai li thi th nguy c sp ton b chng trnh l hon ton c th, cng c cha cng b ri, kh nng hu nh chc chn l phi lm li t u(*).

II. DIN T THUT TON II.1.Dng lu


Lu thut ton l cc hnh v theo nhng qui nh no , c kt hp li nhm m t li qu trnh thc hin ca thut ton mt cch trc quan nht. Ngi ta dng cc hnh khi ghp ni thnh lu c th hin thut ton. V d: Nhp 2 s a,b nu a>b th in kt qu bi s chung nh nht ca a v b, ngc li nhp li a,b. V lu m phng tin trnh lm vic ca thut ton. Lu thut ton Begin

a,b

a>b

Temp= UCLN(a,b)

BC = a*b/Temp

BC

End. i vi nhng bi ton nh th vic dng biu thut ton khng my kh khn, nhng i vi nhng bi ton ln th vic dng lu thut ton biu din gii thut th s gp mt s tr ngi nht nh v khng gian biu din. Chnh v hn ch ny nn ngi ta t dng lu thut ton biu din nhng bi ton ln phc tp.

TRNG CAO NG CNG NGH THNG TIN

12

Cu trc d liu v Gii thut

II.2. Dng ngn ng lp trnh c th


Vic dng lu biu din thut ton bc l nhng nhc im nht nh nh nu trn, nn ngi lp trnh cn thng dng cc ngn ng lp trnh bc cao nh PASCAL, C, C++, JAVA, biu din thut ton. Xt v mt k thut, nu dng ngn ng lp trnh c th biu din thut ton, th thng qua m lnh ca chng trnh, ngi c nu bit ngn ng lp trnh ang ci t s kim tra c kt qu, v c th d ra hng i ca thut ton m khng phi thng qua cc bc ci t. Cng vi v d trn, nu ta dng ngn ng lp trnh PASCAL biu din gii thut th n c th hin nh sau: program TIM_BOI_CHUNG_NHO_NHAT; function UCLN(a,b:word):word; var r,q:word; begin while(a<>b)do begin if(a>b)then a:= a - b else b:=b - a; end; UCLN:=a; end; var a,b,BC:word; begin write('a=');readln(a);write('b=');readln(b); if(a>b)then begin BC:=(a*b div UCLN(a,b)); write('BCNN[',a,',',b,']=',BC); end else write('reInput'); readln; end. V nu dng ngn ng lp trnh C biu din kt qu s nh sau: #include <conio.h> #include <stdio.h> //program TIM_BOI_CHUNG_NHO_NHAT; int UCLN(int a, int b) { while(a != b) { if(a > b) a = a - b; else b = b - a; } return a; } int main() { int a, b, BC; printf("a=");scanf("%d",&a); printf("b=");scanf("%d",&b); if(a>b) { BC = ((int)a*b/UCLN(a,b)); printf("BCNN[%d,%d]=%d",a,b,BC); } else printf(" nhap lai:");
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

13

getch(); return 0; } Dng ngn ng lp trnh c th biu din gii thut phi tha nhn l d kim tra kt qu, nhng mt khc n yu cu ngi c phi hiu v ngn ng c th hin, m iu ny khng phi lc no cng sn c.

II.3. Dng ngn ng gi


Cch biu din bng lu thut ton nh trn xem ra cng c nhng hn ch nht nh v khng gian biu din c bit i vi nhng bi ton ln v nhiu chc nng x l phc tp, cn nu dng thun ty mt ngn ng cp cao no nh PASCAL, C, C++, JAVA, biu din, th ta s gp mt s hn ch sau: Phi tun th cc qui tc cht ch v c php ca ngn ng , khin cho vic trnh by gii thut v cu trc d liu tr nn nng n, g b v cng nhc. Phi ph thuc vo cu trc d liu tin nh ca ngn ng nn c lc khng th hin c y cc v cu trc m ta mun biu t. Ngn ng no c chn cng cha hn c mi ngi u thch v mun s dng. V vy, ngi ta dng ngn ng th hn mm do hn, gn gi vi ngn ng t nhin hn v d s dng l ngn ng gi m, ngn ng gi m l ngn ng t nhin kt hp vi cc t kha ngn ng lp trnh, vi mt mc linh hot nht nh, khng qu g b, khng cu n v c php ca ngn ng lp trnh, nn ngi ta thng hay s dng. Tuy nhin, thng nht nhau trong cch biu din ngi ta cng a ra mt s qui cch c php v c xem nh qui nh chung. Cc kiu d liu c s: integer, char, boolean, float. Cu trc ca mt chng trnh Program S1 S2 Sn Return. Lu : Phn ghi ch v thuyt minh: c t sau du // hoc trong cp du /* ..*/ Nu chng trnh gm nhiu bc c th nh s th t mi bc km theo li gii thch V d: tnh n! Program TinhGiaiThua 1.Read(n) //nhp n 2.//tnh p=n! p := 1 For i :=1 To n P:= p*i 3. Write(p) //in kt qu Return Cc k t:
TRNG CAO NG CNG NGH THNG TIN

14

Cu trc d liu v Gii thut

Cc php ton s hc: +, -, *, /, (lu tha), Div (chia nguyn), Mod (chia ly phn d) Cc k t quan h: >, <, >=, <=, =, <>

Cc php ton lgic: And, Or, Not Cc lnh v c php Php gn: bin := biu thc Lnh ghp: lnh ghp l lnh c s lnh >1 bc bi cp du {} L lnh khi c iu kin no xy ra (thuc vo lnh if hoc vng lp) Lnh nhp: Read(bin) Lnh xut: Write(biu thc hoc ni dung) or Write(biu thc hoc ni dung) Lnh r nhnh C php 1: C php 2: Else Lnh 2 C php 3 (lnh c nhiu la chn) Case <biu thc nguyn> Of <gi tr nguyn 1>: Lnh 1 <gi tr nguyn 2>: Lnh 2 <gi tr nguyn n>: Lnh n [Else Lnh n+1] EndCase Lnh vng lp Vng lp FOR For <bin := gi tr u> To <gi tr cui> [Step <bc nhy>] Lnh Ch : nu [step <bc nhy>] khng c th hiu bin := bin + 1 n v Vng lp WHILE While <biu thc> Do Lnh Vng Lp DOWHILE Do{ Lnh }While <biu thc> Ngoi ra dng vng lp, c th s dng t kho break trong vng lp mun dng Chng trnh con Dng hm Func <tn_hm> [(Danh sch tham s hnh thc)] S1 S2
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

If <biu thc logic> Then Lnh If <biu thc logic> Then Lnh 1

Cu trc d liu v Gii thut

15

Sn tn_hm := <gi tr tr v> Return V d 1.2: Tnh tng a1 + a2 + +an Func Tong(a,n) S := 0 For I := 1 To n S := S+ai Tong := S Return Dng chng trnh con Proc <tn chng trnh con> [(danh sch tham s hnh thc)] S1 S2 Sn Return V d 1.3: Xy dng chng trnh con hon v 2 gi tr Proc HoanVi(a,b) tam := a a := b b := tam Return Ch : Trng hp l dng hm th phi c lnh: tn_hm := <gi tr tr v> Khi gi hm th tn hm nm bn phi php gn Khi gi chng trnh con: Call <tn chng trnh con> Bn trong chng trnh con c th s dng lnh Exit, Halt Kiu d liu bn ghi Mi ngn ng u h tr cho vic xy dng cu trc bn ghi bng vic xy dng kiu d liu mi t nhng kiu d liu c nh ngha kiu bn ghi Typedef Kiu_Bn_Ghi=Record kiu__c_1 Trng_1 kiu__c_2 Trng_2 kiu__c_n Trng_n End Record Truy cp vo tng trng th i ca kiu bn ghi bin_kiu_bn_ghi (trng_i) V d: Xy dng kiu d liu im_Oxy lu tr mt im trong mt phng Oxy typedef im_Oxy=Record integer ox,oy End Record To im M(1,2) trong mt phng Oxy: im_Oxy M M(ox) := 1, M(oy) := 2

TRNG CAO NG CNG NGH THNG TIN

16

Cu trc d liu v Gii thut

III. THUT TON QUI III.1.Khi nim qui


Ta ni mt i tng l quy nu n c nh ngha qua chnh n hoc mt i tng khc cng dng vi chnh n bng quy np. V d: t hai chic gng cu i din nhau. Trong chic gng th nht cha hnh chic gng th hai. Chic gng th hai li cha hnh chic gng th nht nn tt nhin n cha li hnh nh ca chnh n trong chic gng th nht... mt gc nhn hp l, ta c th thy mt dy nh v hn ca c hai chic gng. Mt v d khc l nu ngi ta pht hnh trc tip pht thanh vin ngi bn my v tuyn truyn hnh, trn mn hnh ca my ny li c chnh hnh nh ca pht thanh vin ngi bn my v tuyn truyn hnh v c nh th... Trong ton hc, ta cng hay gp cc nh ngha quy: Giai tha ca n (n!): Nu n = 0 th n! = 1; nu n > 0 th n! = n.(n-1)! S phn t ca mt tp hp hu hn S (S): Nu S = th S= 0; Nu S th tt c mt phn t x S, khi S = S\{x} + 1. y l phng php nh ngha tp cc s t nhin. Mt nh ngha qui bao gi cng c mt im dng hoc mt trng hp c bit no xc nh gi tr n gin nht ca nh ngha qui. Trng hp ny c gi l trng hp suy bin.

III.2. Thut ton qui


Nu li gii ca mt bi ton P c thc hin bng li gii ca bi ton P' c dng ging nh P th l mt li gii quy. Gii thut tng ng vi li gii nh vy gi l gii thut quy. Mi nghe th c v hi l nhng im mu cht cn lu l: P' tuy c dng ging nh P, nhng theo mt ngha no , n phi "nh" hn P, d gii hn P v vic gii n khng cn dng n P. nh ngha mt hm quy hay th tc quy gm hai phn: Phn neo (anchor) hay cn gi l Suy bin: Phn ny c thc hin khi m cng vic qu n gin, c th gii trc tip ch khng cn phi nh n mt bi ton con no c. Phn quy: Trong trng hp bi ton cha th gii c bng phn neo, ta xc nh nhng bi ton con v gi quy gii nhng bi ton con . Khi c li gii (p s) ca nhng bi ton con ri th phi hp chng li gii bi ton ang quan tm. Phn quy th hin tnh "quy np" ca li gii. Phn neo cng rt quan trng bi n quyt nh ti tnh dng ca li gii. V d: cho chng trnh con qui sau: Proc R(x,y) If y>0 Then { x := x+1 Y := y-1 write(x, ,y) Call R(x,y) write(x, ,y) } Return
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

17

Khi gi chng trnh con, b dch cp pht mt vng nh c c ch hot ng nh Stack. Khi mt chng trnh con c gi th a ch ca lnh ngay sau hm v ni dung hin ti ca cc bin s c a vo vng nh v c nh th cho n khi gp trng hp suy bin th s ly a ch u tin trong vng nh v gi tr cc bin ra thc hin v qu trnh li tip tc cho n khi vng nh rng. Vi lnh Call R(5,3) th b nh hot ng nh sau ( cho tin ta dng b nh lu tr ngay lnh sau hm c gi) R(5,3) R(6,2) R(7,1) R(8,0) dng Mn hnh 62 71 80 80 71 62

R(5,3)

R(6,2) write(6,2)

R(7,1) write(7,1) write(6,2)

R(8,0) write(8,0) write(7,1) write(6,2)

write(8,0) write(7,1) write(6,2)

ci t qui tin hnh qua cc bc sau: Xc nh u vo v u ra t xc nh tn chng trnh con v tham s hnh thc ca n Xc nh trng hp suy bin, trng hp c bit ca bi ton Phn tch bi ton xc nh trng hp chung ca bi ton (a bi ton v dng cng loi nhng nh hn) V d: nh ngha qui n! nh sau: 0!=1 n!=(n-1)! * n Nh vy, tnh n! = (n-1)!*n=(n-2)!*(n-1)*n=0!*1*2*.*n=1*1*2**n Func GiaiThua(n) If (n=0) Then GiaiThua := 1 Else GiaiThua := n*GiaiThua(n-1) Return V d: Xut o ngc mt s nguyn dng ra mn hnh DS(1234)
Mod 10 4 Mn hnh Div 10

DS(123)
Mod 10 3 2 1 Div 10

DS(12)
Mod 10 Div 10

DS(1)
Mod 10 Div 10

DS(0) suy bin,dng

Thut ton qui ci t nh sau:


TRNG CAO NG CNG NGH THNG TIN

18

Cu trc d liu v Gii thut

Proc XuatDaoSo(n) If n >0 Then { write( n Mod 10) Call XuatDaoSo ( n Div 10) } Return V d: Bi ton thp H Ni c pht biu nh sau: C ba cc A,B,C. Khi u cc A c mt s a xp theo th t nh dn ln trn nh. Bi ton t ra l phi chuyn ton b chng a t A sang C. Mi ln thc hin chuyn mt a t mt cc sang mt cc khc v khng c t a ln nm trn a nh.

Chuyn thng t A sang C. y l trng hp suy bin Chuyn 1 a t A sang B Chuyn 1 a t A sang C Chuyn 1 a t B sang C Trng hp chung n>1 a. Ta coi n-1 a trn nh l 1 a v ta p dng trong trng hp 2 a Chuyn n-1 a t A sang B, dng cc C lm trung gian Chuyn 1 a t A sang C Chuyn n-1 a t B sang C, dng cc A lm trung gian Thut ton c lp nh sau: Proc HaNoi(n,A,B,C) // Chuyn n a t cc A sang cc B If n=1 Then chuyn (A, ,C) Else { Call HaNoi(n-1, A, C, B) Call HaNoi(1, A, B, C) Call HaNoi(n-1, B, A, C) } Return

Phn tch bi ton: Trng hp 1 a: Trng hp 2 a:

III.3. Hiu lc ca qui


Qua cc v d trn, ta c th thy quy l mt cng c mnh gii cc bi ton. C nhng bi ton m bn cnh gii thut quy vn c nhng gii thut lp kh n gin v hu hiu. Chng hn bi ton tnh giai tha hay xut o ngc s nguyn. Tuy vy, quy vn c vai tr xng ng ca n, c nhiu bi ton m vic thit k gii thut quy n gin hn nhiu so vi li gii lp v trong mt s trng hp chng trnh quy hot ng nhanh hn chng trnh vit khng c quy.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

19

C mt mi quan h khng kht gia quy v quy np ton hc. Cch gii quy cho mt bi ton da trn vic nh r li gii cho trng hp suy bin (neo) ri thit k lm sao li gii ca bi ton c suy ra t li gii ca bi ton nh hn cng loi nh t. Tng t nh vy, quy np ton hc chng minh mt tnh cht no ng vi s t nhin cng bng cch chng minh tnh cht ng vi mt s trng hp c s (thng ngi ta chng minh n ng vi 0 hay ng vi 1) v sau chng minh tnh cht s ng vi n bt k nu n ng vi mi s t nhin nh hn n. Do ta khng ly lm ngc nhin khi thy quy np ton hc c dng chng minh cc tnh cht c lin quan ti gii thut quy. Chng hn: Chng minh s php chuyn a gii bi ton Thp H Ni vi n a l 2n-1: R rng l tnh cht ny ng vi n = 1, bi ta cn 21 - 1 = 1 ln chuyn a thc hin yu cu Vi n > 1; Gi s rng chuyn n - 1 a gia hai v tr ta cn 2n-1 - 1 php chuyn a, khi chuyn n a t v tr x sang v tr y, nhn vo gii thut quy ta c th thy rng trong trng hp ny n cn (2n-1 - 1) + 1 + (2n-1 - 1) = 2n - 1 php chuyn a. Tnh cht c chng minh ng vi n Vy th cng thc ny s ng vi mi n. Tht ng tic nu nh chng ta phi lp trnh vi mt cng c khng cho php quy, nhng nh vy khng c ngha l ta b tay trc mt bi ton mang tnh quy. Mi gii thut quy u c cch thay th bng mt gii thut khng quy (kh quy), c th ni c nh vy bi tt c cc chng trnh con quy s u c trnh dch chuyn thnh nhng m lnh khng quy trc khi giao cho my tnh thc hin. Vic tm hiu cch kh quy mt cch "my mc" nh cc chng trnh dch th ch cn hiu r c ch xp chng ca cc th tc trong mt dy chuyn gi quy l c th lm c. Nhng mun kh quy mt cch tinh t th phi tu thuc vo tng bi ton m kh quy cho kho. Khng phi tm u xa, nhng k thut gii cng thc truy hi bng quy hoch ng l v d cho thy tnh ngh thut trong nhng cch tip cn bi ton mang bn cht quy tm ra mt gii thut khng quy y hiu qu.

III.4.Thut ton quay lui


Gii thut quay lui c dng : Duyt qua tt c cc trng hp xc nh cc b x1, x2,,xn tho mn iu kin B no . Phng php: gi s xc nh c i-1 thnh phn (x1, x2, ,xi-1), cn xc nh thnh phn xi. Ta duyt tt c cc kh nng j c th c c cho xi. c 2 trng hp xy ra: Nu tn ti 1 kh nng j th ta xc nh xi theo j. Nu i l trng thi cui th c 1 kt qu, cn nu i khng phi trng thi cui th i xc nh thnh phn xi+1 Nu khng tn ti kh nng j no th ta quay li xc nh thnh phn xi-1 khc Gii thut c dng nh sau: Proc Try(i) For <mi kh nng j c th c cho xi> [If < chp nhn j theo iu kin B> Then] {<xc nhn xi theo j> [nh du s dng j] If <i l trng thi cui> Then <Xc nh c 1 kt qu > Else Call Try(i+1)
TRNG CAO NG CNG NGH THNG TIN

20

Cu trc d liu v Gii thut

[Hu nh du s dng j] } Return V d 1.9: Lit k tt c cc dy nh phn c di n Dy nh phn kt qu c lu tr trong vecto x c n phn t, mi phn t trong vecto ch nhn gi tr 0 hoc 1. Proc Try (i) For j:= 0 To 1 { xi := j If i=n Then Xut (vecto x) //c 1 kt qu Else Call Try(i+1) } Return V d 1.10: Lit k cc hon v ca n s t nhin u tin Dy cc gi tr hon v c lu tr trong vcto x c n phn t, dng vecto y c n phn t xc nh gi tr j c s dng cha vi yj= true l j cha c s dng, yj=false l j c s dng vi j=1,n Proc Try(i) For j:=1 To n If yj=True Then {xi := j yj := False //nh du j c s dng If i=n Then Xut (vect x) //c 1 kt qu Else Call Try(i+1) yj := True //hu nh du j s dng cho xi+1 } Return

IV. NH GI THUT TON IV.1. Phn tch thut ton


Phn tch thut ton nhm d tr chi ph thc hin thut ton; l cc ti nguyn m thut ton yu cu. Ti nguyn mun ni y l: b nh, bng thng, cc cng logic v thi gian tnh ton. Tuy nhin, trn phng din phn tch l thuyt, ta ch c th xt ti vn thi gian bi vic xc nh cc chi ph khc nhiu khi rt m h v phc tp. Thi gian tnh ton ca thut ton thng ph thuc vo kch thc u vo (size of input). Nu gi n l kch thc d liu a vo th thi gian thc hin ca mt gii thut c th biu din mt cch tng i nh mt hm ca n: T(n). Phn cng my tnh, ngn ng vit chng trnh v chng trnh dch ngn ng y u nh hng ti thi gian thc hin. Nhng yu t ny khng ging nhau trn cc loi my, v vy khng th da vo chng khi xc nh T(n). Tc l T(n) khng th biu din bng n v thi gian gi, pht, giy c. Tuy nhin, khng phi v th m khng th so snh c cc gii
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

21

thut v mt tc . Nu nh thi gian thc hin mt gii thut l T1(n) = n2 v thi gian thc hin ca mt gii thut khc l T2(n) = 100n th khi n ln, thi gian thc hin ca gii thut T2 r rng nhanh hn gii thut T1. Khi , nu ni rng thi gian thc hin gii thut t l thun vi n hay t l thun vi n2 cng cho ta mt cch nh gi tng i v tc thc hin ca gii thut khi n kh ln. V d: Hy sp xp mt dy cc con s theo th t khng gim bng phng php sp xp chn (insertion sort) M t bi ton: Input : dy n s (a1, a2,, an) Output : mt hon v (sp xp li) (a1, a2,, an ) ca input sao cho: a1 a2 an Thut ton: Proc Insertion_sort(A,n) costs For j:=2 To n c1 { key := A[j] c2 i := j-1 c3 While i>0 And A[i]>key Do c4 { A[i+1] := A[i] c5 i := i-1 c6 } A[i+1] := key c7 } Return Tng thi gian T(n) thc hin thut ton Insertion_sort l:
j 1 n T (n) = c1 c 2 + c3 + c 4 (c5 + c6 ) + c7 j =2 i =1

(1)

Ta xt ba trng hp:

a) Trng hp tt nht: Dy A c sp xp sn, ngha l A[i] key. Do c5=c6=0.

Vy

T (n ) = c1 (c 2 + c3 + c7 ) = c1 (c 2 + c3 + c7 )(n 1)
j =2

Do vy thi gian thc hin ca thut ton ny c th biu din di dng an+b (vi a, b = const v ph thuc vo cc hao ph ci), v y l hm tuyn tnh bc mt theo n. b) Trong trng hp xu nht: Dy A c sp xp theo th t o ngc. Khai trin (1), ta c:
T (n ) = c1 (c 2 + c3 + c7 ) + c1c 4 (c5 + c6 ) ( j 1)
j =2 j =2 n n

= c1 (c 2 + c3 + c7 )(n 1) + c1c 4 (c5 + c6 )(n 1)n / 2 Do vy thi gian thc hin ca thut ton ny c th biu din di dng an2 + bn + c (vi a, b, c = const v ph thuc vo cc hao ph ci), v y l hm tuyn tnh bc hai theo n. c) Trong trng hp trung bnh: Dy A c mt na c sp (ngha l mt na A[i]key), v mt na th c sp theo th t ngc li (ngha l mt na A[i]>key).
TRNG CAO NG CNG NGH THNG TIN

22

Cu trc d liu v Gii thut

Do vy thi gian hao ph thc hin cc lnh trong vng lp while s l (c5 + c6)/2; v ta cng tnh c T(n) cng c dng l mt hm tuyn tnh bc hai theo n.

IV.2. Xc inh phc tp tnh ton ca thut ton


IV.2.1.nh ngha phc tp
Nu thi gian thc hin mt thut ton l T(n) = cn2 (vi c l mt hng s), th phc tp tnh ton ca thut ton c cp n2. Hay c th k hiu bng k php O nh sau; T(n) = O(n2) nh ngha: Cho f(n) v g(n) l hai hm xc nh dng vi mi n. Hm f(n) c xc nh l O(g(n)) nu tn ti mt hng s c > 0 v mt gi tr n0 sao cho: f(n) c.g(n) vi mi n n0. Ngha l nu xt nhng gi tr n n0 th hm f(n) s b chn trn bi mt hng s nhn vi g(n). Khi , nu f(n) l thi gian thc hin ca mt gii thut th ta ni gii thut c cp l g(n). V d 1.12: Dng nh ngha h k hiu O, hy chng minh 3n +5 = O(n) chng minh 3n+5=O(n), ta cn phi xc nh cc hng dng c, n0 sao cho: 5n + 3 cn 5n + 3 6n ;n3. Vy phi chn c=6; n0=3. V d 1.13: Dng k hiu O chng minh an+b=O(n) ; n>1 Ta s chng minh c an+bcn ;nn0 nu chn c=a+|b| v n0=1. V d 1.14: Dng k hiu O chng minh 2n=O(n!), n>1 Ta c 2n=2*2*...*22*1*2*3**n=2*n! Vy 2n2*n!. chn c=2, n0=1 th theo nh ngha 2n=O(n!) Mt s phc tp thng s dng Stt 1 2 3 4 5 6 7 8 9 10 K hiu O(1) O(lgn) O(lglgn) O(n) O(nlgn) O(n ) O(n3) O(nk) O(2 ) O(k )
n n 2

Ghi ch phc tp hng Thut ton tm kim nh phn, cy BST Tm c chung ln nht bng EUCLID phc tp tuyn tnh, duyt dy Sp xp dy tng dn bng QuickSort,HeapSort, dng cy BST Cc phng php c in dng sp xp dy hoc duyt ma trn Nhn 2 ma trn phc tp a thc Bi ton thp H Ni, thp Si Gn

11 O(n!) Ch : lgn hiu l log2n

http://www.ebook.edu.vn

TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

23

IV.2.2.Mt s qui tc xc nh phc tp


Vic xc nh phc tp tnh ton ca mt gii thut bt k c th rt phc tp. Tuy nhin, trong thc t, i vi mt s gii thut ta c th phn tch bng mt s quy tc n gin. Qui tc tng Gi s mt thut ton gm hai phn T1 v T2 c lp nhau, T1 c thi gian thc hin O(f(n)), T2 c thi gian thc hin O(g(n)). Lc thi gian thc hin tim cn T ca ton thut ton l: T = T1 + T2 = O(max(f(n), g(n))) Qui tc nhn Gi s mt thut ton gm hai phn T1 v T2 lng vo nhau, T1 c thi gian thc hin O(f(n)), T2 c thi gian thc hin O(g(n)). Lc thi gian thc hin T ca ton thut ton l: T = T1 * T2 = O(f(n) * g(n)) Mt s nguyn tc chung Cc lnh c, ghi, so snh: thi gian thc hin theo tim cn l O(1). Lnh if - If (iuKin_T1) Then <cngvic_T2> Thi gian thc hin theo tim cn ca on lnh ny l: T = T1+T2 = O(max(T1, T2)) - If(iuKin_T0) Then <cngvic_T1> Else <cngvic_T2> Thi gian thc hin tim cn ca on lnh ny l: T = T0+max(T1, T2) = O(max(T0, T1, T2)) Cc lnh tun t: p dng nh l 1. Cc lnh vng lp: nu vng lp thc hin n ln, ti l thi gian thc hin lnh ln lp th i. Khi , thi gian thc hin (T) theo tim cn ca vng lp s l: Cc vng lp lng nhau: p dng nh l 2. c2=c3=c5=c6=c7=O(1) c4=
j 1 j 1

V d 1.15: Tnh phc tp ca thut ton sp xp bng phng php chn v d trc. Ta c

max(c5 , c6 ) = 1
i =1 i =1

c1=

max(c , c , c , c ) = 1 = (n j) = ( j 1) = j 1 =
j =2 2 3 4 7 j = 2 i =1 j =2 j =2 j =2 j =2

j 1

n(n + 1) n2 n 1 (n 1) = 2 2

Theo nh ngha k php O th phc tp ca thut ton l O(n2) Mt s tnh cht Theo nh ngha v phc tp tnh ton ta c mt s tnh cht: a) Vi P(n) l mt a thc bc k th O(P(n)) = O(nk). V th, mt thut ton c phc tp cp a thc, ngi ta thng k hiu l O(nk)

TRNG CAO NG CNG NGH THNG TIN

24

Cu trc d liu v Gii thut

b) Vi a v b l hai c s tu v f(n) l mt hm dng th logaf(n) = logab.logbf(n). Tc l: O(logaf(n)) = O(logbf(n)). Vy vi mt thut ton c phc tp cp logarit ca f(n), ngi ta k hiu l O(logf(n)) m khng cn ghi c s ca logarit. c) Nu mt thut ton c phc tp l hng s, tc l thi gian thc hin khng ph thuc vo kch thc d liu vo th ta k hiu phc tp tnh ton ca thut ton l O(1). d) Mt gii thut c cp l cc hm nh 2n, n!, nn c gi l mt gii thut c phc tp hm m. Nhng gii thut nh vy trn thc t thng c tc rt chm. Cc gii thut c cp l cc hm a thc hoc nh hn hm a thc th thng chp nhn c. e) Khng phi lc no mt gii thut cp O(n2) cng tt hn gii thut cp O(n3). Bi nu nh gii thut cp O(n2) c thi gian thc hin l 1000n2, cn gii thut cp O(n3) li ch cn thi gian thc hin l n3, th vi n < 1000, r rng gii thut O(n3) tt hn gii thut O(n2). Trn y l xt trn phng din tnh ton l thuyt nh ngha gii thut ny "tt" hn gii thut kia, khi chn mt thut ton gii mt bi ton thc t phi c mt s mm do nht nh.

IV.2.3.Trng hp thut ton qui


Khi mt thut ton cha lnh gi qui ln chnh n, ta c th s dng php truy ton m t thi gian thc hin ca n. Php truy ton thng l mt phng trnh hoc mt bt ng thc m t hm theo dng gi tr ca n da trn cc s liu c nhp c kch thc nh hn. T v d thut ton qui tnh n! trn ta c biu thc truy ton nh sau: Gi T(n) l thi gian thc hin ca thut ton trn. Ta c T(0) = 1 ; khi n=0 T(n) = T(n-1) +1 ; khi n>0 T v d 1.7 (thut ton thp H Ni) trn ta c biu thc truy ton nh sau: Gi T(n) l thi gian thc hin ca thut ton trn. Ta c T(1) = 1 T(n) = 2T(n-1) +1 ; khi n=1 ; khi n>1

gii h thc truy ton thng thng s dng phng php thay th V d 1.16: Tm phc tp ca thut ton c biu din bng h thc truy ton sau: T(0) = 1 T(n) = T(n-1) +1 ; khi n=0 ; khi n>0

Ta c T(n)=T(n-1)+1=T(n-2)+1+1=T(n-3)+3==T(n-n)+n=T(0)+n=n+1=O(n) V d 1.17: Tm phc tp ca thut ton c biu din bng h thc truy ton sau: T(1) = (1) T(n) = 2T(n-1) +1 Ta c T(n)=2T(n-1)+1
TRUNG CAO NG CNG NGH THNG TIN

; khi n=1 ; khi n>1

http://www.ebook.edu.vn

Cu trc d liu v Gii thut

25

T(n-1)=2T(n-2)+1 => T(n)=2(2T(n-2)+1)+1=22T(n-2) + 21 + 20 T(n-2)=2T(n-3)+1 =>T(n)=23T(n-3) + 22 + 21 + 20 T(n)=2n-1T(1) + 2n-2 + + 21= 2n-1 + 2n-2 + + 21=2n-1=O(2n) V d 1.18: Tm phc tp ca thut ton c biu din bng h thc truy ton sau: T(1) = 0 T(n) = 2T(n/2) +n ; khi n=1 ; khi n>1

Ta c T(n)=2T(n/2)+n T(n/2)=2T(n/4) + n/2 =>T(n)=22T(n/22) + 2n => T(n)=2kT(n/2k) + kn t n=2k ta c T(n)=2kT(1) + kn . ta c n=2k =>k=lgn Vy T(n)=nlgn=O(nlgn)

TRNG CAO NG CNG NGH THNG TIN

26

Cu trc d liu v Gii thut

CHNG 2

DANH SCH
I. KHI NIM DANH SCH
Danh sch l mt tp hp hu hn cc phn t (Element) c cng mt kiu. Ta biu din danh sch nh l mt chui cc phn t ca n: a1, a2, ... , an vi n 0. Nu n=0 ta ni danh sch rng (empty list). Nu n > 0 ta gi a1 l phn t u tin v an l phn t cui cng ca danh sch. S phn t ca danh sch ta gi l di ca danh sch. Mt tnh cht quan trng ca danh sch l cc phn t ca danh sch c th t tuyn tnh theo v tr (position) xut hin ca cc phn t. Ta ni ai ng trc ai+1, vi i=1, n-1; Tng t ta ni ai l phn t ng sau ai-1,vi i =2,n. Ta cng ni ai l phn t ti v tr th i, hay phn t th i ca danh sch. Gi s danh sch c tn l L, v tr sau phn t cui cng trong danh sch L l ENDLIST(L). Cc thao tc thng thng trn danh sch l: INSERT_LIST(x,p,L) xen phn t x vo danh sch L ti v tr p. vi 1p ENDLIST(L) LOCATE(x,L) thc hin vic nh v phn t x trong danh sch L. Locate tr kt qu l v tr ca phn t x trong danh sch. VALUE(p,L) cho kt qu l gi tr ca phn t v tr p trong danh sch L DELETE_LIST(p,L) chng trnh con thc hin vic xo phn t th p ca danh sch. Nu pENDLIST(L) th php ton khng c nh ngha v danh sch L s khng thay i NEXT(p,L) cho kt qu l v tr ca phn t i sau phn t th p; nu p l phn t cui cng trong danh sch L th NEXT(p,L) cho kt qu l ENDLIST(L). Next khng xc nh nu p khng phi l v tr ca mt phn t trong danh sch. PREVIOUS(p,L) cho kt qu l v tr ca phn t ng trc phn t p trong danh sch. Nu p l phn t u tin trong danh sch th Previous(p,L) khng xc nh. Previous cng khng xc nh trong trng hp p khng phi l v tr ca phn t no trong danh sch. PRINT_LIST(L) lit k cc phn t ca L theo th t xut hin ca chng trong danh sch. EMPTY_LIST(L) cho kt qu TRUE nu danh sch c rng, ngc li n cho gi tr FALSE. MAKENULL_LIST(L) khi to mt danh sch L rng. FIRST(L) Tr v v tr u tin trong danh sch. Nu danh sch rng th FIRST(L) khng xc nh END(L) Tr v v tr cui cng trong danh sch
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

27

II. BIU DIN DANH SCH TRN MY TNH


Vic ci t mt danh sch trong my tnh tc l tm mt cu trc d liu c th m my tnh hiu c lu cc phn t ca danh sch ng thi vit cc on chng trnh con m t cc thao tc cn thit i vi danh sch.

III. MNG V DANH SCH C III.1.Ci t mng


Ta c th ci t danh sch bng mng nh sau: dng mt mng lu gi lin tip cc phn t ca danh sch t v tr u tin ca mng. Vi cch ci t ny, d nhin, ta phi c lng s phn t ca danh sch khai bo s phn t ca mng cho thch hp. D thy rng s phn t ca mng phi c khai bo khng t hn s phn t ca danh sch. Ni chung l mng cn tha mt s ch trng. Mt khc ta phi lu gi di hin ti ca danh sch, di ny cho bit danh sch c bao nhiu phn t v cho bit phn no ca mng cn trng nh trong hnh v. Ta nh ngha v tr ca mt phn t trong danh sch l ch s ca mng ti v tr lu tr phn t . 1 Phn t th 1 2 Phn t th 2 . . . . ENDLIST Phn t th cui cng . . Maxlength

ch s
Cc khai bo cn thit

mng

Danh sch c ci t bng mng gm c 2 thnh phn l mng A v s phn t ca danh sch trong mng l Last. C php c th khai bo nh sau: Typedef LIST=Record Kiu_Mng A Integer Last End Record

III.2. Cc thao tc trn danh sch


Khi to danh sch rng MAKENULL_LIST(L)

TRNG CAO NG CNG NGH THNG TIN

28

Cu trc d liu v Gii thut

Danh sch rng c di bng 0. Theo ci t trn, bin Last ch v tr ca phn t cui cng trong danh sch v cng di hin ti ca danh sch, v vy khi to danh sch rng ta ch vic gn Last = 0. proc MAKENULL_LIST(L) L(Last) :=0 Return

Kim tra danh sch rng empty_LIST(L)


Danh sch rng nu di ca danh sch bng 0. func empty_LIST(L) EMPTY_LIST :=L(Last)=0 Return

Xen mt phn t vo danh sch insert_list(x,p,L)


Khi xen phn t x vo v tr p ca danh sch ta c my kh nng sau: Trng hp 1: Mng y khng thc hin c Trng hp 2: p<1 hoc p>Last +1 cng khng thc hin c Trng hp 3: 1pLast +1 th Di cc phn t t v tr p n cui danh sch xung 1 v tr. di danh sch tng 1. a phn t mi vo v tr p Proc insert_list(x,p,L) {If L(last)>=Maxlength Then write('Li: danh sch y') Else If (p>L(last)+1) or (p<1) Then write('Li: v tr khng hp l') Else { //di cc phn t t v tr p n cui danh sch xung 1 v tr For q := L(Last) To p step -1 L(A[q+1]) := L(A[q]) L(Last) := L(Last)+1 // di danh sch tng ln 1 L(A[p]) := x //t x vo v tr p } Return

Xo mt phn t ca danh sch delete_list(p,L)


Khi xo mt phn t, ta c nhng kh nng sau : Trng hp 1 : p<1 hoc p>Last th khng hp l, khng xo Trng hp 2 : 1pLast th vic xo mt phn t ca danh sch ta lm cng vic ngc li vi xen ngha l phi di cc phn t t v tr p+1 n cui danh sch ln mt v tr v di danh sch gim i 1 phn t. Proc delete_list(p,L) If (p>L(Last)) or (p<1) Then write('Li: v tr ca phn t xo khng hp l') ELSE { //di cc phn t t v tr p+1 n cui danh sch ln 1 v tr}
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

29

For q := p+1 To L(Last) L(A[q-1]) := L(A[q]) L(Last) := L(Last)-1 // gim kch thc mng i 1 phn t } Return

nh v mt phn t trong danh sch locate(x, L)


nh v mt phn t x trong danh sch, ta tin hnh duyt tm t u danh sch. Nu tm thy x th v tr ca phn t tm thy c tr v, nu khng tm thy th hm tr v gi tr 0. Trong trng hp c nhiu phn t cng gi tr x trong danh sch th v tr ca phn t c tm thy u tin c tr v. func locate(x,L) p:= 1 while p<=L(Last) And L(A[p]<>x) do p:= p+1 If p<=L(Last) Then LOCATE:= p Else LOCATE:=0 Return

Ly gi tr ti v tr p trong danh sch VALUE(p,L)


Trng hp p<1 hoc P>Last khng thc hin c Func VALUE(p,L) If p<1 Or P>L(Last) Then Write( Li, khng c v tr ny) Else VALUE := L(A[p]) Return

Xc nh v tr tip theo ca phn t v tr p NEXT(p,L)


Trng hp p<1 hoc P>Last th khng c kt qu Func NEXT(p,L) If p<1 Or P>L(Last) Then Write( Li, khng c v tr ny) Else NEXT := p+1 Return

Xc nh v tr trc phn t v tr p PREVIOUS(p,L)


Trng hp p1 hoc P>Last th khng c kt qu Func PREVIOUS(p,L) If p<=1 Or P>L(Last) Then Write( Li, khng c v tr ny) Else NEXT := p-1 Return

Lit k cc phn t ca L PRINT_LIST(L) Proc PRINT_LIST(L) For p := 1 To L(Last)


TRNG CAO NG CNG NGH THNG TIN

30

Cu trc d liu v Gii thut

Write(VALUE(p,L)) Return

Xc nh v tr u tin trong danh sch FIRST(L)


Trng hp danh sch rng khng xc nh Func FIRST(L) If L(Last)<1 Then Write( Li, danh sch rng) Else FIRST := 1 Return

Xc nh v tr cui cng trong danh sch END(L)


Trng hp danh sch rng khng xc nh Func END(L) If L(Last)<1 Then Write( Li, danh sch rng) Else END := L(Last) Return

IV. DANH SCH LIN KT


Cch khc ci t danh sch l dng con tr lin kt cc cha cc phn t trong danh sch, cc ny c th nm lin tc hoc ri nhau trong b nh. Trong danh sch ny, mi gm c 2 thnh phn: Thnh phn th nht 1 c dng lu tr thng tin cn x l (nh ai trong mng), thnh phn cn li l cc con tr dng lu tr a ch cc ca khc m n tr n Gi s 1 lp c 4 bn: ng, Ty, Nam, Bc c a ch ln lt l d,t,n,b. Gi s: ng c a ch ca Nam, Ty khng c a ch ca bn no, Bc gi a ch ca ng, Nam c a ch ca Ty (xem hnh).

Nh vy, nu ta xt th t cc phn t bng c ch ch dn ny th ta c mt danh sch: Bc, ng, Nam, Ty. Hn na c danh sch ny th ta cn v ch cn gi a ch ca Bc. Nh vy 1 danh sch lin kt c n phn t a1, a2, ,an c th m phng qua hnh v sau:
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

31

a1 L

a2

an

Null (ENDLIST)

Danh sch lin kt Nt u tin trong danh sch c gi l cht ca danh sch ni n (Head). duyt danh sch ni n, ta bt u t cht, da vo trng lin kt i sang nt k tip, n khi gp gi tr c bit (duyt qua nt cui) th dng li.

IV.1.Danh sch ni n
Danh sch ni n gm cc nt c ni vi nhau theo mt chiu. Mi nt l mt bn ghi (record) gm hai trng: Trng th nht cha gi tr lu trong nt Trng th hai cha lin kt (con tr) ti nt k tip, tc l cha mt thng tin bit nt k tip nt trong danh sch l nt no, trong trng hp l nt cui cng (khng c nt k tip), trng lin kt ny c gn mt gi tr c bit. Nt u tin trong danh sch c gi l cht ca danh sch ni n (Head). duyt danh sch ni n, ta bt u t cht, da vo trng lin kt i sang nt k tip, n khi gp gi tr c bit (duyt qua nt cui) th dng li.

Cc khai bo cn thit l Typedef Node= record Kiu_lu_tr Info //Trng Info dng cha thng tin cn Con_Tr_Kiu_Node Link //Trng Link l con tr tr n phn t k tip trong danh sch End Record Con_tr_Kiu_Node L //Khai bo con tr L tr vo u danh sch Ch : qun l danh sch khai bo mt bin tr L (hoc Head), dng gi a ch cha phn t u tin ca danh sch. Bin ny gi l ch im u danh sch. Con tr c bit Null Danh sch rng L = Null Danh sch lun c ga tr Null bo kt thc danh sch Trng Next ca mi Node ch cha a ch Node sau n Cp pht 1 Node cho con tr p : New(p) Hu mt Node c tr bi p: Delete(p) Chn 1 gi tr x vo v tr Node c tr bi p INSERT_LIST(x,p,L)
Trng hp p tr u danh sch

x
5

3 p

Null

L
Trng hp p tr vo Node khng phi u danh sch 2
TRNG CAO NG CNG NGH THNG TIN q

p Null 3

4 x

r 1

32

Cu trc d liu v Gii thut

Proc INSERT_LIST(x,p,L) //1. Xin cp pht 1 Node c tr bi r v gn gi tr x cho trng Info New(r) Info(r) := x Link(r) := p // mi tn s 3 If L=p Then // trng hp p tr vo Node du tin trong danh sch L := p // mi tn s 5 Else { q := PREVIOUS(p,L) //2. Cho con tr q tr vo Node trc p Link(q) := r // 4. chn Node c gi tr x vo danh sch L } Return

Xc nh a ch ca Node c gi tr x LOCATE(x,L)
Nu c gi tr x trong danh sch th kt qu l a ch Node , nu khng c x trong danh sch th kt qu l Null Func LOCATE(x,L) p := L While Info(p)<> x And p<> Null Do p := Link(p) LOCATE := p Return

Xc nh gi tr ca Node c tr bi p VALUE(p,L)
Trng hp p=Null khng xc nh c gi tr Func VALUE(p,L) If p=Null Then Write( Li, Khng xc nh) Else VALUE := Info(p) Return

Xo Node c tr bi p DELETE_LIST(p,L)
Trng hp p=Null th khng xo c Trng hp p tr u danh sch p
4

Null

Trng hp p tr vo Node khng phi u danh sch 3 2


http://www.ebook.edu.vn

Null p 4 TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

33

Proc DELETE_LIST(p,L) If p=Null Then Write( Li, Khng xo ) Else {If p=L Then L := Link(p) // L tr vo Node th 2 Else {q := PREVIOUS(p,L) //Cho con tr q tr vo Node trc P Link(q) := Link(p) //Ni vi Node sau p trong danh sch L } Delete (p) // Gii phng Node c tr bi p } Return

Xc nh a ch Node sau Node c tr bi p NEXT(p,L)


Trng hp p=Null khng xc nh Func NEXT(p,L) If p=Null Then Write( Li, Khng xc n) Else NEXT := Link(p) Return

Xc nh a ch Node trc Node c tr bi p PREVIOUS(p,L)


Trng hp p tr u danh sch th khng xc nh c Func PREVIOUS(P,L) If p=L Then Write(Li, Khng xc inh) Else {q := L While Link(q)<>p Do q := Link(q) PREVIOUS := q } Return

Lit k cc phn t trong danh sch PRINT_LIST(L) Proc PRINT_LIST(L) p := L While p<>Null Do {write(Info(p)) p := Link(p) } Return Kim tra danh sch c rng khng EMPTY_LIST(L) Func EMPTY_LIST(L) EMPTY_LIST := L=Null Return Khi to mt danh sch rng MAKENULL_LIST(L)
TRNG CAO NG CNG NGH THNG TIN

34

Cu trc d liu v Gii thut

Proc MAKENULL_LIST(L) L := Null Return

Xc nh a ch ca Node u danh sch FIRST(L)


Tr v v tr u tin trong danh sch. Nu danh sch rng th FIRST(L) khng xc nh Func FIRST(L) If L=Null Then Write(Li, Khng xc nh) Else FIRST := L Return

Xc nh a ch ca Node cui danh sch END(L)


Tr v v tr cui cng trong danh sch. Nu danh sch rng th END(L) khng xc nh Func END(L) If L=Null Then Write(Li, Khng xc nh) Else { p := L While Link(p)<>Null Do p := Link(p) END := p } Return

IV.2.Danh sch ni vng


Danh sch lin kt n ni vng l danh sch lin kt m trng Link ca Node cui cha a ch Node u tin.

a1 L

a2

an

Ch : Danh sch rng: L=Null Danh sch 1 Node: Link(L)=L


Cc thao tc trn danh sch lin kt n ni vng cng nh trn danh sch lin kt n. d hnh dung ta thm k t C trc tn mi thao tc Tuy nhin vic xy dng cc thao tc c hi khc mt t do tnh cht c bit ca danh sch vng.

Chn 1 gi tr x vo Node c a ch l p C_INSERT_LIST(x,p,L)


Trng hp p=l=Null th tr thnh danh sch 1 Node q 1 2 x L 3
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

q 1 x
5

p a1 a2 an

6.r

Cu trc d liu v Gii thut

35

Trng hp p=l Null l chn u danh sch Ni vng

Trng hp cn li th ging trong trng hp danh sch lin kt n Proc C_INSERT_LIST(x,p,L) New(q) // cp pht 1 Node Info(q) := x If p=Null And L=Null Then { L := q //Danh sch 1 Node Link(L) := L } Else { // Cho r tr vo Node trc p trong danh sch r := C_PREVIOUS(p,L) Link(r) := q Link(q) := p If L=p Then L := q } Return

Xc nh a ch Node c gi tr x C_LOCATE(x,L) Func C_LOCATE(x,L) q :=Null r := L Do{ If Info(r)=x Then { q=r Break //dng vng lp } r := Link(r) }while (r<>L) C_LOCATE := q Return Xc nh gi tr ca Node c tr bi p C_VALUE(p,L): ging danh sch lin kt n Xo Node c tr bi p C_DELETE_LIST(p,L)
Trng hp p=Null th khng xo c Trng hp p=L c 1 Node th thnh danh sch rng Trng hp p tr u danh sch p L
1 4

TRNG CAO NG CNG NGH THNG TIN

36

Cu trc d liu v Gii thut

Trng hp p tr vo Node khng phi u danh sch

p 4

Proc C_DELETE_LIST(p,L) If p=Null Then Write( Li, Khng xo ) Else {If p=L Then If Link(L)=L Then L:= Null Else {q := C_PREVIOUS(p,L) //q tr vo Node cui L := Link(p) //L tr vo Node th 2 Link(q) := L //To danh sch vng } Else {q := C_PREVIOUS(p,L) //Cho con tr q tr vo Node trc P Link(q) := Link(p) //Ni vi Node sau p trong danh sch L } Delete (p) // Gii phng Node c tr bi p } Return

Xc nh a ch Node sau Node c tr bi p C_NEXT(p,L): ging danh sch lin kt n Xc nh a ch Node trc Node c tr bi p C_PREVIOUS(p,L)
Trng hp p =Null th khng xc nh c Func C_PREVIOUS(P,L) If p=Null Then Write(Li, Khng xc inh) Else { q := L While Link(q)<>p Do C_PREVIOUS := q } Return

q := Link(q)

Lit k cc phn t trong danh sch vng C_PRINT_LIST(L) Proc C_PRINT_LIST(L) p := L


http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

37

Do{ Return

write(Info(p)) p := Link(p) }while(p<>L)

Kim tra danh sch vng c rng khng C_EMPTY_LIST(L): ging danh sch lin kt n Xc nh a ch ca Node u danh sch vng C_FIRST(L): ging danh sch lin kt n Xc nh a ch ca Node cui danh sch vng C_END(L)
Tr v v tr cui cng trong danh sch. Nu danh sch rng th END(L) khng xc nh Func END(L) If L=Null Then Write(Li, Khng xc nh) Else { p := L While Link(p)<>L Do p := Link(p) C_END := p } Return

IV.3. Danh sch ni kp


Mt s ng dng i hi chng ta phi duyt danh sch theo c hai chiu mt cch hiu qu. Chng hn cho phn t X cn bit ngay phn t trc X v sau X mt cch mau chng. Trong trng hp ny ta phi dng hai con tr, mt con tr ch n phn t ng sau (next ), mt con tr ch n phn t ng trc (previous). Vi cch t chc ny ta c mt danh sch lin kt kp. Dng ca mt danh sch lin kp nh sau:

Hnh: danh sch lin kt kp Cu trc d liu cho danh sch lin kt kp nh sau: Typedef D_Node= record Kiu_lu_tr Info //Trng Info dng cha thng tin cn Con_Tr_Kiu_D_Node Next, Previous //Next tr pt sau, Previous tr pt trc End Record Gi s DL (Double List) l con tr qun l danh sch lin kt kp.

Khi to danh sch rng:

DL:= Null

Kim tra danh sch lin kt kp rng: kim tra DL c bng Null khng ? Xo mt phn t trong danh sch lin kt kp
xo mt phn t ti v tr con tr p trong danh sch lin kt kp c tr bi DL, ta phi ch n my trng hp sau: Danh sch rng, tc l DL=Null khng thc hin
TRNG CAO NG CNG NGH THNG TIN

38

Cu trc d liu v Gii thut

Trng hp danh sch khc rng, tc l DL<>Null, ta phi phn bit hai trng hp b xo khng phi l c tr bi DL q r

q := p(Previous) , r := p(Next) q(Next) := r If r<> Null Then r(Previous) := q Delete(p) Xo ang c tr bi DL, tc l p=DL: ngoi vic cp nht li cc con tr ni kt cc trc v sau p ta cn phi cp nht li DL. p

Null DL Trng hp 1 Node: DL := Null, Delete (p) Trng hp cn li: DL := DL(Next), DL(Previous) := Null, Delete(p) Thm mt phn t vo danh sch ln kt kp
thm mt phn t x vo v tr p trong danh sch lin kt kp c tr bi DL, ta cng cn phn bit my trng hp sau: Danh sch rng, tc l DL=p = Null tr thnh danh sch kp 1 Node New (DL) DL(Info) := x DL(Previous) := Null DL(Next) := Null Nu Dl<>nil, sau khi thm phn t x vo v tr p

New(s), s(Info) := x, q := p(Previous), q(Next) := s, s(Next) := q r := p(Next), s(Next) := r


http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

39

If r<>Null Then r(Previous) := s Delete(p)

IV.4. a danh sch


Cu trc a danh sch l hnh thc kt hp cc kiu danh sch vi nhau trong cu trc danh sch. Chng hn kt hp mt danh sch c vi mt danh sch lin kt n, hoc c th kt hp 2 danh sch lin kt n vi nhau to thnh danh sch a chiu. V d m t hnh nh kt hp mt danh sch c vi mt danh sh lin kt n nh hnh v

V. NGN XP V.1. nh ngha ngn xp


Ngn xp (Stack) l mt danh sch m ta gii hn vic thm vo hoc loi b mt phn t ch thc hin ti mt u ca danh sch, u ny gi l nh (TOP) ca ngn xp. Mt chng a t trn bn cho ta hnh nh trc quan ca ngn xp, mun thm vo chng 1 a ta a mi trn nh chng, mun ly cc a ra khi chng ta cng phi ly a trn trc. Nh vy ngn xp l mt cu trc c tnh cht "vo sau - ra trc" hay LIFO (last in first out ).

TRNG CAO NG CNG NGH THNG TIN

40

Cu trc d liu v Gii thut

Phn t 1 Phn t 2 Phn t 3 Phn t 4

nh Stack

y Stack

Cc thao tc c bn trn ngn xp: CREAT_STACK(S): to mt ngn xp S rng TOP(S): tr v gi tr ca phn t ti nh ngn xp. Nu ngn xp rng th hm khng xc nh. POP(S): Ly mt phn t ti nh ngn xp. PUSH(x,S): thm mt phn t x vo u ngn xp. EMPTY_STACK(S): kim tra ngn xp rng, Hm cho kt qu TRUE nu ngn xp rng v FALSE trong trng hp ngc li. V d thut ton i mt s t h 10 sang h 2 s dng ngn xp
Vi n=1910 =100112, ta s i nh sau: n n Mod 2 19 1 9 1 4 0 2 0 1 1 0

Proc DoiHe(n) CREAT_STACK(S) While n>0 Do { PUSH(n Mod 2, S) n := n Div 2 } While Not EMPTY_STACK(S) { write(TOP(S)) POP(S) } Return

V.2. Ci t ngn xp bng mng


Dng mt mng lu tr lin tip cc phn t ca ngn xp. Cc phn t a vo ngn xp bt u t v tr c ch s thp nht ca mng. Ta dng mt bin s nguyn (top_pointer) gi ch s ca phn t ti nh ngn xp. Gi s vng nh ti a c dng cho Stack l c MaxLength phn t.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

41

Top_pointer 5 4 3 2 1 Khai bo ci t

Phn t th 1 Phn t th 2

Phn t cui cng

Ci t bng mng CONST maxlength=...; { di ca mng} Typedef STACK = record Kiu_Mng A //Mng A dng lu d liu Integer top_idx //gi nh ngn xp end;

To ngn xp rng CREAT_STACK(S)


Ngn xp rng th top_pointer=0 Proc CREAT_STACK(S) S(top_pointer) := 0 Return

Kim tra ngn xp rng EMPTY_STACK(S) Func EMPTY_STACK(S) If S(top_pointer)=0 Then EMPTY_STACK := True Else EMPTY_STACK := False Return Tr v phn t u ngn xp TOP(S)
Trng hp Stack rng khng c kt qu Func TOP( S) If EMPTY_STACK(S) write('li: ngn xp rng'); Else TOP := S(A[S(top_pointer)] Return

Chng trnh con xo mt phn t POP(S)


Trng hp Stack rng khng thc hin Proc POP(S) If EMPTY_STACK(S) Then write('Li: ngn xp rng')
TRNG CAO NG CNG NGH THNG TIN

42

Cu trc d liu v Gii thut

Else S(top_pointer) := S(top_pointer)-1 Return

Thm mt phn t vo ngn xp PUSH(x,S)


trng hp Stack y khng thc hin Proc PUSH(x,S) If S(top_pointer)=MaxLength Then Write(Li, Stack y) Else { S(top_pointer) := S(top_pointer)+1 S(A[S.top_pointer]) := x } Return

V.3. Ci t ngn xp bng danh sch lin kt n


Ta m phng mt Stack bng danh sch lin kt nh sau:

Top point
Null Typedef Node= record Kiu_lu_tr Info //Trng Info dng cha thng tin cn Con_Tr_Kiu_Node Link //Trng Link l con tr tr n phn t k tip trong danh sch End Record Typedef Stack=Record Con_tr_Kiu_Node top_pointer End Record

To ngn xp rng CREAT_STACK(S)


Ngn xp rng th top_pointer=0 Proc CREAT_STACK(S) S(top_pointer) := Null Return

Kim tra ngn xp rng EMPTY_STACK(S) Func EMPTY_STACK(S) If S(top_pointer)=Null Then EMPTY_STACK := True Else EMPTY_STACK := False Return Tr v phn t u ngn xp TOP(S)
Trng hp Stack khng c kt qu Func TOP( S) If EMPTY_STACK(S)
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

43

write('li: ngn xp rng'); Else TOP := Info(S(top_pointer)) Return

Chng trnh con xo mt phn t POP(S)


Trng hp Stack rng khng thc hin Proc POP(S) If EMPTY_STACK(S) Then write('Li: ngn xp rng') Else {p := S(top_pointer) S(top_pointer) := Link(S(top_pointer)) Delete(p) } Return

Thm mt phn t vo ngn xp PUSH(x,S) Proc PUSH(x,S) New(p) Info(p) := x Link(S(top_pointer)) := p S(top_pointer) := p Return

V.4. ng dng ngn xp kh qui


Nu mt chng trnh con qui P(x) c gi t chng trnh chnh ta ni chng trnh con c thc hin mc 1. Chng trnh con ny gi chnh n, ta ni n i su vo mc 2... cho n mt mc k. R rng mc k phi thc hin xong th mc k-1 mi c thc hin tip tc, hay ta cn ni l chng trnh con quay v mc k-1. Trong khi mt chng trnh con t mc i i vo mc i+1 th cc bin cc b ca mc i v a ch ca m lnh cn dang d phi c lu tr, a ch ny gi l a ch tr v. Khi t mc i+1 quay v mc i cc gi tr c s dng. Nh vy nhng bin cc b v a ch lu sau c dng trc. Tnh cht ny gi cho ta dng mt ngn xp lu gi cc gi tr cn thit ca mi ln gi ti chng trnh con. Mi khi li v mt mc th cc gi tr ny c ly ra tip tc thc hin mc ny. Tm tt qu trnh: Bc 1: Lu cc bin cc b v a ch tr v. Bc 2: Nu tho iu kin ngng qui th chuyn sang bc 3. Nu khng th tnh ton tng phn v quay li bc 1 ( qui tip). Bc 3: Khi phc li cc bin cc b v a ch tr v. V d sau y minh ho vic dng ngn xp loi b chng trnh qui ca bi ton thp H Ni nh xy dng chng 1 (phn qui). Qu trnh thc hin chng trnh con c minh ho vi ba a (n=3) nh sau:

Move(2,A,C,B)
TRNG CAO NG CNG NGH THNG TIN

Move(1,A,B,C) Move(1,A,C,B)

A->B A->C

44

Cu trc d liu v Gii thut

Move(1,B,C,A) Move(3,A,B,C) Move(1,A,B,C) Move(2,C,B,A) Move(1,C,A,B) Move(1,C,B,A) Move(1,A,B,C) mc 3

B->C A->B C->A C->B A->B

Mc 1

mc 2

kh qui ta phi nm nguyn tc sau y: Mi khi chng trnh con qui c gi, ng vi vic i t mc i vo mc i+1, ta phi lu tr cc bin cc b ca chng trnh con bc i vo ngn xp. Ta cng phi lu a ch m lnh cha c thi hnh ca chng trnh con mc i. Tuy nhin khi lp trnh bng ngn ng cp cao th y khng phi l a ch nh cha m lnh ca my m ta s t chc sao cho khi mc i+1 hon thnh th lnh tip theo s c thc hin l lnh u tin cha c thi hnh trong mc i. Tp hp cc bin cc b ca mi ln gi chng trnh con xem nh l mt mu tin (activation record). Mi ln thc hin chng trnh con ti mc i th phi xo mu tin lu cc bin cc b mc ny trong ngn xp. Nh vy nu ta t chc ngn xp hp l th cc gi tr trong ngn xp chng nhng lu tr c cc bin cc b cho mi ln gi qui, m cn iu khin c th t tr v ca cc chng trnh con. tng ny th hin trong ci t kh qui cho bi ton thp H Ni l: mu tin lu tr cc bin cc b ca chng trnh con thc hin sau th c a vo ngn xp trc n c ly ra dng sau. C th m phng qu trnh thc hin bi ton bng cch dng Stack vi n=3 nh sau: (3,A,B,C) a (2,A,C,B) Qu trnh chuyn

2 1 2

A A B

C B A

B C C

1 1 1 1 2

A A C A B

B C A B A

C B B C C

A->C A->B C->B A->C

(1)

(2) (2,B,A,C)

(3)

A
(4)

1 1 1

B B A

C A B
(5)

A C C

B->A B->C A->C

Xy dng kiu d liu lu tr 1 mu tin (1 phn t trong Stack) Typedef Phn_T=record


http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

45

Integer s_a Char ngun, trung_gian, ch End Record Thut ton Thp H NI kh qui dng ngn xp: Proc HANOI(n,A,B,C); CREAT_STACK(S); PUSH([n,A,B,C],S); While Not EMPTY_STACK(S) Do { x := TOP(S) //x kiu Phn_T POP(S) If x(s_a)=1 Then chuyn (x(ngun) , , x(ich)) Else { PUSH([x(s_a)-1, x(trung_gian),x(ngun),x(ich)],S) PUSH([1,x(ngun),x(trung_gian),x(ich)],S) PUSH([x(s_a)-1, x(ngun),x(ich),x(trung_gian)],S) } } Return

VI. HNG I VI.1. nh ngha hng i


Hng i, hay ngn gn l hng (queue) cng l mt danh sch c bit m php thm v bt c thc hin 2 u khc nhau. Thm cui danh sch (REAR), cn bt th pha u ca danh sch (FRONT). Xp hng mua v xe la l hnh nh ca hng i, ngi n trc mua v trc, ngi n sau th s mua v sau. V vy hng i cn c gi l cu trc FIFO (first in - first out) hay "vo trc - ra trc". Gi s thm ln lt cc phn t A, B, C, D vo queue c di l 4 phn t, sau loi b phn t A ra khi queue, ta c hnh dng queue nh sau: 4 3 2 1 0 4 3 2 rear 1 A fron 0 4 3 2 B 1 A 0 4 3 C rear 2 B 1 A fron 0 4 rear 3 2 1 fron 0 D C B A rear 4 D 3 C 2 B 1 fron rear fron

rear fron

Cc thao tc c bn trn hng i: CREAT_QUEUE(Q) khi to mt hng i rng FRONT(Q) hm tr v gi tr ca phn t u tin ca hng Q. ADD(x,Q) xen phn t x vo hng Q REMOVE(Q) xo phn t ti u ca hng Q EMPTY_QUEUE(Q) hm kim tra hng rng. FULL_QUEUE(Q) kim tra hng y.
TRNG CAO NG CNG NGH THNG TIN

46

Cu trc d liu v Gii thut

VI.2. Ci t hng i bng mng


Ta dng mt mng cha cc phn t ca hng, khi u phn t u tin ca hng c a vo v tr th 1 ca mng, phn t th 2 vo v tr th 2 ca mng... Gi s hng c n phn t, ta c front=1 v rear=n. Khi xo mt phn t front tng ln 1, khi thm mt phn t rear tng ln 1. Nh vy hng c khuynh hng i xung, n mt lc no ta khng th thm vo hng c na d mng cn nhiu ch trng (cc v tr trc front) trng hp ny ta gi l hng b trn. Thc s hng ch b trn khi ton b mng cha cc phn t ca hng ta gi l hng b y. Pt1 Front Pt2 Pt3 Pt4 Pt5 Pt6 rear

Cch khc phc hng b trn l dng mng xoay vng: Di ton b hng ln front v tr, Cch ny gi l di chuyn tnh tin. Trong trng hp ny ta lun c front<rear. Xem mng nh l mt vng trn ngha l khi hng b trn nhng cha y ta thm phn t mi vo v tr 1 ca mng, thm mt phn t mi na th thm vo v tr 2 (nu c th)...R rng cch lm ny front c th ln hn rear. [2] [3] [1] [4] front=0 [5] rear=0 [1] [2]

J2 J1

[3]

[4] front=0 [5] rear=3

[0]

[0]

Khai bo ci t
qun l mt hng ta ch cn qun l u hng (front) v cui hng (rear). Gi s cn mt khong ti a MAXZISE phn t cho mng. Typedef QUEUE=record Kiu_Mng A Integer front,rear End Record

To hng rng CREAT_QUEUE(Q)


Lc ny front v rear khng tr n v tr hp l no trong mng vy ta c th cho front v rear u bng 0 Proc CREAT_QUEUE(Q) Q(front) := 0
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

47

Q(rear) := 0 Return

Kim tra hng rng EMPTY_QUEUE


Trong qu trnh lm vic ta c th thm v xo cc phn t trong hng. R rng, nu ta c a vo hng mt phn t no th front>0. Khi xo mt phn t ta tng front ln 1, nu hng rng ( front=rear) cng t front=0. Hn na khi mi khi to hng, tc l front = 0, th hng cng rng. V vy hng rng khi v ch khi front =0. Func EMPTY_QUEUE(Q) If Q(front)=0 Then EMPTY_QUEUE := True Else EMPTY_QUEUE := False Return

Kim tra hng y FULL_QUEUE(Q)


Hng y nu s phn t hin c trong hng bng di ca mng. func FULL_QUEUE(Q) If (Q(rear)=Q(front))And (Q(rear)<>0) Then FULL_QUEUE := True Else FULL_QUEUE := False Return

Chng trnh con thm mt phn t vo hng ADD(x,Q)


Trng hp Queue y khng thm c Proc ADD(x,Q) If Not FULL_QUEUE(Q) Then { Q(rear) := (Q(rear) +1 )Mod MAXSIZE Q(A[Q(rear)]) := x } Else write('Li: hng y'); Return

Xo mt phn t ca hng REMOVE(Q)


Xo phn t u hng ta ch cn cho front tng ln 1. Nu front = rear th hng thc cht rng, nn ta khi to li hng rng (tc l t li gi tr front = rear =0) Proc REMOVE(Q) If Not EMPTY_QUEUE(Q) Then { Q(front) := (Q(front)+1) Mod MAXSIZE If Q(front)=Q(rear) Then Q(front) := Q(rear) := 0 } Else Write('Li: hng rng'); Return

Xc nh gi tr ca phn t u tin ca hng FRONT(Q)


Trng hp hng rng khng xc nh
TRNG CAO NG CNG NGH THNG TIN

48

Cu trc d liu v Gii thut

Func FRONT(Q) If EMPTY_QUEUE(Q) Then Write(Li, Khng xc nh) Else FRONT := Q(A[Q(front)+1]) Return

VI.3. Ci t hng i bng danh sch lin kt n


Cch t nhin nht l dng hai con tr front v rear tr ti phn t u hng (front) v cui hng (rear). Null rear

front

Khai bo cu trc d liu Typedef Node= record Kiu_lu_tr Info //Trng Info dng cha thng tin cn lu tr Con_Tr_Kiu_Node Link //Link l con tr tr n phn t k tip trong danh sch End Record Typedef QUEUE=Record Con_tr_Kiu_Node front, rear End Record Khi to hng rng CREAT_QUEUE(Q) Proc CREAT_QUEUE(Q) Q(front) := Null Q(rear) := Null Return Kim tra hng rng EMPTY_QUEUE(Q)
Hng rng nu front hoc rear bng Null Func EMPTY_QUEUE(Q) If Q(front)=Null Then EMPTY_QUEUE := True Else EMPTY_QUEUE := False Return

Thm mt phn t vo hng ADD(x,Q)


Thm mt phn t vo hng thc cht l chn 1 gi tr x vo cui danh sch lin kt Proc ADD(x,Q) new(p) //cp pht 1 Node mi p(Info) := x p(Link) := Null If Q(front)=Null Then
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

49

Q(front) := p Else (Q(rear))(Link) := p Q(rear) := p Return

//trng hp Q rng th thnh Q c 1 phn t

Xa mt phn t trong hng REMOVE(Q)


Thc cht l xo phn t nm u danh sch. Trng hp danh sch rng khng xo c Proc REMOVE(Q) If Not EMPTY_QUEUE(Q) Then { P := Q(front) Q(front) := p(Link) Delete(p) } Else write('Li: hng rng'); Return

Xc nh gi tr ca phn t u tin ca hng FRONT(Q)


Trng hp hng rng khng xc nh Func FRONT(Q) If EMPTY_QUEUE(Q) Then Write(Li, Khng xc nh) Else FRONT := (Q(front))(Info) Return

TRNG CAO NG CNG NGH THNG TIN

50

Cu trc d liu v Gii thut

CHNG 3

CY
I. MT S KHI NIM V CY I.1. Khi nim
Cy l mt tp hp cc phn t gi l nt (nodes) trong c mt nt c phn bit gi l nt gc (root). Trn tp hp cc nt ny c mt quan h, gi l mi quan h cha - con (parenthood), xc nh h thng cu trc trn cc nt. Mi nt, tr nt gc, c duy nht mt nt cha. Mt nt c th c nhiu nt con hoc khng c nt con no. Mi nt biu din mt phn t trong tp hp ang xt v n c th c mt kiu no bt k, thng ta biu din nt bng mt k t, mt chui hoc mt s ghi trong vng trn. Mi quan h cha con c biu din theo qui c nt cha dng trn nt con dng di v c ni bi mt on thng. C th nh ngha cy mt cch qui nh sau: Mt nt n c l mt cy. Nt ny cng chnh l nt gc ca cy. Gi s ta c n l mt nt n c v k cy T1,.., Tk vi cc nt gc tng ng l n1,.., nk th c th xy dng mt cy mi bng cch cho nt n l cha ca cc nt n1,.., nk. Cy mi ny c nt gc l nt n v cc cy T1,.., Tk c gi l cc cy con. Tp rng cng c coi l mt cy v gi l cy rng k hiu ^.

V d: xt mc lc ca mt quyn sch. Mc lc ny c th xem l mt cy

Nt gc l sch, n c ba cy con c gc l C1, C2, C3. Cy con th 3 c gc C3 l mt nt n c trong khi hai cy con kia (gc C1 v C2) c cc nt con. S cc con ca mt nt gi l cp (degree) ca nt . V d cp ca nt c1 l 2 v ca nt c2 l 3. Nt c cp bng khng gi l nt L (leaf) hay nt n c, nt tn cng. V d cc nt 1.1, 2.1.1, 2.1.2, 2.2, 2.3, c3 l cc nt l. Cp ca cy l cp cao nht ca cc nt trn cy. V d cy Sch trn l cp 3.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

51

Gc ca cy ngi ta gn cho s mc (level) l 1, nu nt cha c mc l i th nt con s c mc l i + 1. V d nt Sch c mc l 1, nt c2 c mc l 2 v nt 2.1.1 c mc l 3. Chiu cao (height) hay chiu su (depth) ca mt cy l s mc ln nht ca nt c trn cy . Cy trn c chiu cao l 4. Nu n1,.., nk l mt chui cc nt trn cy sao cho ni l nt cha ca nt ni+1, vi i=1..k-1, th chui ny gi l mt ng i trn cy (hay ngn gn l ng i ) t n1 n nk. di ng i ny c nh ngha bng s nt trn ng i tr 1 hay chnh l s cung trn ng i. Nh vy di ng i t mt nt n chnh n bng khng. V d ng i t nt Sch n nt 2.1 l Sch, c2, 2.1 v di ng i l 2. Nu th t cc cy con (hay cc nt con) ca mt nt c coi trng, th cy ang xt l cy c th t (ordered tree), ngc li l cy khng c th t (unorderred tree). Thng l th t c qui c t tri sang phi. Nh vy, nu k th t th hai cy sau l khc nhau:

I.2. Biu din cy


I.2.1. Ci t bng mng
Cho cy T, ta c th gn tn cho cc nt ln lt l 1,2,..,n. Sau ta dng mt mng A mt chiu lu tr cy bng cch cho A[i]j vi j l nt cha ca nt i. nu i l nt gc ta cho a[i]=0 V d:

Cy trn c biu din trong mng A nh sau: Ch s mng Tn nt (cha ch s nt cha) nhn 1 0 2 1 3 1 4 2 5 2 6 5 7 5 8 5 9 3 10 3

10

TRNG CAO NG CNG NGH THNG TIN

52

Cu trc d liu v Gii thut

I.2.2. Ci bng danh sch k


Mt cch biu din khc cng thng c dng l biu din cy di dng mi nt c mt danh sch cc nt con. V s nt con ca mt nt l khng bit trc nn dng danh sch lin kt s thch hp hn. Vi cy trn th c th lu tr nh sau (du * biu din gi tr Null)

I.2.3. Ci bng con tr


Mi Node trong cy gm c n+ 1 trng, trong n l bc ca cy l s trng lin kt ca cy v 1 trng Info cha d liu. Ta c th m phng cy trn nh sau:(* biu din Null)

10 *

http://www.ebook.edu.vn

TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

53

I.3. Duyt cy
Duyt cy l mt qui tc cho php i qua ln lt tt c cc nt ca cy mi nt ng mt ln, danh sch lit k cc nt (tn nt hoc gi tr cha bn trong nt) theo th t i qua gi l danh sch duyt cy. C 3 cch duyt cy quan trng: Duyt tin t (preorder), duyt trung t (inorder), duyt hu t (posorder). C th nh ngha cc php duyt cy tng qut (xem hnh bn di) mt cch qui nh sau:

Cy rng th danh sch duyt cy l rng v n c coi l biu thc duyt tin t, trung t, hu t ca cy. Cy ch c mt nt th danh sch duyt cy gm ch mt nt v n c coi l biu thc duyt tin t, trung t, hu t ca cy. Ngc li: gi s cy T c nt gc l n v c cc cy con l T1,..,Tn th: Kt qu duyt tin t ca cy T l lit k nt n, k tip l kt qu duyt tin t ca cc cy T1, T2, .., Tn theo th t . Kt qu duyt trung t ca cy T l kt qu duyt trung t ca cy T1, k tip l nt n, ri n kt qu duyt trung t ca cc cy T2,.., Tn theo th t . Kt qu duyt hu t ca cy T l kt qu duyt hu t ca cc cy T1, T2,.., Tn theo th t , ri n nt n. V d cho cy nh trong hnh sau:

Biu thcduyt

tin t: A B C D E F H K L trung t: C B E D F A K H L hu t: C E F D B K L H A

C th vit cc gii thut duyt cy qui nh sau: Proc PREORDER(n) X l gc n For (mi nt con c ca nt n theo th t t tri sang phi) Call PREORDER(c) Return Proc INORDER(n) If (n l nt l) Then X l gc n Else { Call INORDER( con tri nht ca nt n); X l gc n
TRNG CAO NG CNG NGH THNG TIN

54

Cu trc d liu v Gii thut

For (mi nt con c ca nt n, tr nt con tri nht, theo th t t tri sang phi) Call INORDER(c); } Return Proc POSORDER(n) If (n l nt l) Then X l gc n Else {for (mi nt con c ca nt n theo th t t tri sang phi) do Call POSORDER(c) X l gc n } Return

II. CY NH PHN II.1. nh ngha


Cy nh phn (binary tree) l cy m mi nt ch c ti a hai nt con hoc rng. Hn na cc nt con ca cy c phn bit th t r rng, mt nt con gi l nt con tri v mt nt con gi l nt con phi. Ta qui c v nt con tri bn tri nt cha v nt con phi bn phi nt cha, mi nt con c ni vi nt cha ca n bi mt on thng. 1 2 3 5 Cn ch ti mt s dng c bit ca cy nh phn 4 3 5 1 2 4

(a)

(b)

(c)

(d)

Cc cy nh phn (a),(b),(c),(d) c gi l cy nh phn suy bin (degenerater binary tree), cc nt khng phi l l ch c 1 con. Cy (a) gi l cy lch tri, cy (b) gi l cy lch phi, cy (c) v (d) gi l cy zc-zc.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

55

Nu cy nh phn c tt c cc mc u t s nt ti a th gi l cy nh phn y (full binary tree). Nu mc cui cng khng t ti a v cc nt thiu tp trung bn phi th gi l cy nh phn hon chnh (complete binary tree). Cy nh phn y l trng hp ring ca cy nh phn hon chnh.

Ta c th thy ngay nhng tnh cht sau bng php chng minh quy np: Trong cc cy nh phn c cng s lng nt nh nhau th cy nh phn suy bin c chiu caoln nht, cn cy nh phn hon chnh th c chiu cao nh nht. S lng ti a cc nt trn mc i ca cy nh phn l 2i-1, ti thiu l 1 (i 1). S lng ti a cc nt trn mt cy nh phn c chiu cao h l 2h-1, ti thiu l h (h 1). Cy nh phn hon chnh, khng y , c n nt th chiu cao ca n l h=[log2(n+1)]+1. Cy nh phn y c n nt th chiu cao ca n l h = log2(n + 1)

II.2. Ci t cy nh phn
V d: cho cy nh phn nh sau: a d h o x i y k z g l

II.2.1.Ci t bng mng


Cch 1: dng 3 mng 1 chiu c n phn t (n s phn t trong cy) Mng Value cha ni dung ca cc nt trong cy Mng Left cha nhn ca nt gc ca cy con tri c gc mng Value Mng Right cha nhn ca nt gc ca cy con phi c gc mng Value Vi cc nt l (khng con) th Left v Right tng ng trng
Vi cy trn th ni dung 3 mng nh sau: 1 2 3 4 5 Ch s a d g h i Value 2 4 6 8 9 Left 3 5 7 10 Right
6 7 8 9 10 11

k 11

Vi cch ci t ny th cc gi tr trong cy phi khc nhau tng i mt.


TRNG CAO NG CNG NGH THNG TIN

56

Cu trc d liu v Gii thut

Cng c th dng 1 mng 1 chiu kiu bn ghi gm (Value, Left, Right) lu tr.

Cch 2: Dng 1 mng 1 chiu lu tr cy nh phn.


Trn cy nh phn hon chnh ta nh s th t t trn xung v t tri sang phi. Ch s nh c trn cy chnh l ch s ca mng 1 chiu. Vi cy trn ta c mng nh sau: Ch s Value
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Vi cch lu ny, ta thy: Nu ch s i l nt cha th nt con tri c ch s 2i v con phi c ch s 2i+1 Nu i l ch s ca nt con th ch s nt cha l i/2 Hai cch lu bng mng trn ta nhn thy rt ph hp i vi cy nh phn hon chnh hoc y . Nu cy nh phn thiu nhiu nt nhiu mc khc nhau th c khc nhiu ch trng.

II.2.2.Ci t bng con tr


Mi nt ca cy gm c 2 phn. Phn Info dng cha gi tr ca nt. Phn lin kt gm 2 con tr Left v Right c dng cha a ch cc nt cy con tri v cy con phi Cu trc ca mt nt nh sau Typedef TreeNode=Record Kiu_lu_tr Info Con_tr_kiu_TreeNode Left, Right End Record
T a

Left

Info

Right

Vi cy nh phn trn ta c th m phng nh sau (du * thay cho con tr Null)

h *

* k

* o

* x

* y

Hm to Node c gi tr X, con tr Left l L, con tr Right l R, tr v a ch ca Node Func Tao(X,L,R) New(p) Info(p) := X Left(p) := L
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

57

Right(p) := R Tao := p Return S dng hm to cy trn nh sau: T := Tao(a,Tao(d,Tao(h,Tao(o,*,*),*),Tao(i,Tao(x,*,*),Tao(y,*,*))), Tao(g,Tao(k,*,Tao(z,*,*)),Tao(l,*,*)))

II.3. Cc php duyt cy nh phn


Php x l cc nt trn cy m ta gi chung l php thm (Visit) cc nt mt cch h thng sao cho mi nt ch c thm mt ln gi l php duyt cy. Gi s rng nu nh mt nt khng c nt con tri (hoc nt con phi) th lin kt Left (Right) ca nt c lin kt thng ti mt nt c bit m ta gi l NIL (hay NULL), nu cy rng th nt gc ca cy cng c gn bng NIL. Khi c ba cch duyt cy hay c s dng:

Duyt theo th t trc (preorder traversal)


Trong php duyt theo th t trc th gi tr trong mi nt bt k s c lit k trc gi tr lu trong hai nt con ca n, c th m t bng th tc quy sau: proc Visit(N) //Duyt nhnh cy nhn N l nt gc ca nhnh if N nil then { <Output trng Info ca nt N> Visit(Nt con tri ca N); Visit(Nt con phi ca N); } Return Qu trnh duyt theo th t trc bt u bng li gi Visit(nt gc). Nh cy trn, nu ta duyt theo th t trc th cc gi tr s c lit k theo th t: ABDHIECFJG

Duyt theo th t gia (inorder traversal)


Trong php duyt theo th t gia th gi tr trong mi nt bt k s c lit k sau gi tr lu nt con tri v c lit k trc gi tr lu nt con phi ca nt , c th m t bng th tc quy sau: proc Visit(N) {Duyt nhnh cy nhn N l nt gc ca nhnh } if N nil then { Visit(Nt con tri ca N); <Output trng Info ca nt N> Visit(Nt con phi ca N); } Return Qu trnh duyt theo th t gia cng bt u bng li gi Visit(nt gc). Nh cy trn, nu ta duyt theo th t gia th cc gi tr s c lit k theo th t: HDIBEAFJCG
TRNG CAO NG CNG NGH THNG TIN

58

Cu trc d liu v Gii thut

Duyt theo th t sau (postorder traversal)


Trong php duyt theo th t sau th gi tr trong mi nt bt k s c lit k sau gi tr lu hai nt con ca nt , c th m t bng th tc quy sau: proc Visit(N) {Duyt nhnh cy nhn N l nt gc ca nhnh } if N nil then { Visit(Nt con tri ca N); Visit(Nt con phi ca N); <Output trng Info ca nt N> } Return Qu trnh duyt theo th t sau cng bt u bng li gi Visit(nt gc). Cng vi cy trn, nu ta duyt theo th t sau th cc gi tr s c lit k theo th t: HIDEBJFGCA

III. CY BIU DIN BIU THC III.1. Biu din biu thc di dng cy
Chng ta c th biu din cc biu thc s hc gm cc php ton cng, tr, nhn, chia bng mt cy nh phn, trong cc nt l biu th cc hng hay cc bin (cc ton hng), cc nt khng phi l l biu th cc ton t (php ton s hc chng hn). Mi php ton trong mt nt s tc ng ln hai biu thc con nm cy con bn tri v cy con bn phi ca nt . V d: Cy biu din biu thc (a+b)*(a-c) * + a b c d

Qui tc biu din mt biu thc ton hc trn cy nh sau: Mi nt c ti a 2 con (con tri & con phi) Mi nt l c nhn biu din cho mt ton hng. Mi nt trung gian (khng phi l) biu din mt ton t.

Vi mt php ton c th t nh v / th r rng cy ny l cy c th t u tin ton t trong biu thc trung t () ^


http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

59

*/ +Qui tc v cy biu thc Trn biu thc trung t, xc nh th t thc hin cc ton t ca biu thc Chn php ton X thc hin cui cng t n vo gc cy Bn tri ca X l cy con tri ca X, bn phi ca X l cy con phi Vi mi cy con, ta li thc hin nh trn cho n khi cc ton hng nt l V d : V cy biu din biu thc a + (b c) * e (f + g) a + 5 ( b 1 c ) * 4 e 3 ( f + 2 g )

Cy biu din nh sau: + a b c e f * + g

III.2. Cc k php dng cho biu thc


Vi cy nh phn biu din biu thc a + (b c) * e (f + g) nh trn, cc php duyt cy theo th t trc, gia v sau, s cho ta kt qu nh sau: Nu ta duyt theo th t trc, ta s c biu thc: + a * - b c e + f g y l dng tin t (prefix) ca biu thc. Trong k php ny, ton t c vit trc hai ton hng tng ng, ngi ta cn gi k php ny l k php Ba lan. Nu ta duyt theo th t gia, ta s cbiu thc: a + b - c * e - f + g K php ny hi mp m v thiu du ngoc. Nu ta thm vo th tc duyt inorder vic b sung cc cp du ngoc vo mi biu thc con th ta s c biu thc: (a + ((b c) * (e (f + g)))) K php ny gi l dng trung t (infix) ca mt biu thc (Thc ra ch cn thm cc du ngoc trnh s mp m m thi, khng nht thit phi thm vo y cc cp du ngoc). Nu ta duyt theo th t sau, ta s c biu thc: a b c e f g + * + y l dng hu t (postfix) ca biu thc. Trong k php ny ton t c vit sau hai ton hng, ngi ta cn gi k php ny l k php nghch o Balan (Reverse Polish Notation - RPN) . Ch c dng trung t mi cn c du ngoc, dng tin t v hu t khng cn c du ngoc.

TRNG CAO NG CNG NGH THNG TIN

60

Cu trc d liu v Gii thut

III.3. Mt s thut ton i vi biu thc


III.3.1.Xy dng cy nh phn biu din biu thc
Ngay trong phn u tin, chng ta bit rng cc dng biu thc trung t, tin t v hu t u c th c hnh thnh bng cch duyt cy nh phn biu din biu thc theo cc trt t khc nhau. Vy ti sao khng xy dng ngay cy nh phn biu din biu thc ri thc hin cc cng vic tnh ton ngay trn cy?. Kh khn gp phi chnh l thut ton xy dng cy nh phn trc tip t dng trung t c th km hiu qu, trong khi t dng hu t li c th khi phc li cy nh phn biu din biu thc mt cch rt n gin, gn ging nh qu trnh tnh ton biu thc hu t: Bc 1: Khi to mt Stack rng dng cha cc nt trn cy Bc 2: c ln lt cc phn t ca biu thc RPN t tri qua phi (phn t ny c th l hng, bin hay ton t) vi mi phn t : To ra mt nt mi N cha phn t mi c c Nu phn t ny l mt ton t, ly t Stack ra hai nt (theo th t l y v x), sau em lin kt tri ca N tr n x, em lin kt phi ca N tr n y. y nt N vo Stack Bc 3: Sau khi kt thc bc 2 th ton b biu thc c c xong, trong Stack ch cn duy nht mt phn t, phn t chnh l gc ca cy nh phn biu din biu thc.

III.3.2.Chuyn i biu thc t dng trung t sang hu t


Thut ton s dng mt Stack cha cc ton t v du ngoc m. Th tc CREAT_STACK(S) to mt Stack rng, PUSH(x,S) y mt phn t vo Stack, hm POP(S) ly ra mt phn t t Stack, hm TOP(S) c gi tr phn t nm nh Stack m khng ly phn t ra, EMPTY_STACK(S) xc inh Stack rng hay khng.

Thut ton POLISH chuyn biu thc trung t sang hu t u vo: Chui Sin cha biu thc trung t u ra:Chui Sout cha biu thc hu t S dng hm u_Tin(x,y) xc nh xem ton t x c u tin ln hn hoc bng y. POLISH(Sin) B1: CREAT_STACK(Sout) B2: CREAT_STACK(S) B3:Lp tun t ly tng phn t X ca Sin + Nu X l ( Th PUSH(X, S) + Nu X l ) Th - While TOP(S) <>( Do { PUSH(TOP(S),Sout) POP(S) } - POP(S) + Nu X l ton hng th PUSH(X, Sout) + Nu X l ton t - Nu u_Tin(TOP(S),X) Th
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

61

While u_Tin(TOP(S),X) Do {PUSH(TOP(S),Sout) POP(S) } - PUSH(X,S) B4: While Not EMPTY(S) Do {PUSH(TOP(S),Sout) POP(S) } Return V d:A*B+(C-D) I Sin[i] Stack S Sout 1 2 3 4 5 6 7 8 9 Sout = AB*CD-+ A * B + ( C D ) * * + +( +( +(+(+ AB AB* AB* AB*C AB*C AB*CD AB*CD- A

III.3.3.nh gi biu thc hu t


C mt vn cn lu l khi my tnh gi tr mt biu thc s hc gm cc ton t hai ngi (ton t gm hai ton hng nh +, -, *, /) th my ch thc hin c php ton vi hai ton hng, nu biu thc phc tp th my phi chia nh v tnh ring tng biu thc trung gian, sau mi ly gi tr tm c tnh tip. V d nh biu thc 1 + 2 + 4 my s phi tnh 1 + 2 trc c kt qu l 3 sau mi em 3 cng vi 4 ch khng th thc hin php cng mt lc ba s c. Khi lu tr biu thc di dng cy nh phn th ta c th coi mi nhnh con ca cy m t mt biu thc trung gian m my cn tnh khi x l biu thc ln. Vy tnh mt biu thc lu tr trong mt nhnh cy nh phn gc nt n, my s tnh gn ging nh hm quy sau: func Calculate(n) //Tnh biu thc con trong nhnh cy gc n if <Nt n cha khng phi l mt ton t> then Calculate := <Gi tr cha trong nt n> else //Nt n cha mt ton t R {
TRNG CAO NG CNG NGH THNG TIN

62

Cu trc d liu v Gii thut

x := Calculate(nt con tri ca n); y := Calculate(nt con phi ca n); Calculate := x R y; } Return (Trong trng hp lp trnh trn cc h thng song song, vic tnh gi tr biu thc cy con tri v con phi c th tin hnh ng thi lm gim ng k thi gian tnh ton biu thc). rng khi tnh ton biu thc, my s phi quan tm ti vic tnh biu thc hai nhnh con trc, ri mi xt n ton t nt gc. iu lm ta ngh ti php duyt hu th t v k php hu t. Trong nhng nm u 1950, nh l-gic hc ngi Balan Jan Lukasiewicz chng minh rng biu thc hu t khng cn phi c du ngoc vn c th tnh c mt cch ng n bng cch c ln lt biu thc t tri qua phi v dng mt Stack lu cc kt qu trung gian.

Thut ton tnh gi tr biu thc hu t u vo: Biu thc hu t S u ra: Gi tr ca biu thc trung t tng ng INHGIA(S) B1: CREAT_STACK(S) B2: Lp ly tng phn t X ca S + Nu X l ton hng th PUSH(X,S) + Nu X l ton t - A := TOP(S), POP(S) - B := TOP(S), POP(S) - C := B X A - PUSH(C,S) B3: Kt qu := TOP(S) Return
A=4 B=2 * 4*2=8 2 4 5 8 3 5 8 C=5 D=3 5-3=2 2 8 + 8+2=16

16

IV. CY TNG QUT


Trong thc t, c mt s ng dng i hi mt cu trc d liu dng cy nhng khng c rng buc g v s con ca mt nt trn cy, v d nh cu trc th mc trn a hay h thng mc ca mt cun sch. Khi , ta phi tm cch m t mt cch khoa hc cu trc d liu dng cy tng qut. Cng nh trng hp cy nh phn, ngi ta thng biu din cy tng qut bng hai cch: Lu tr k tip bng mng v lu tr bng cu trc lin kt.

http://www.ebook.edu.vn

TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

63

IV.1. Cy K phn
Cy K-phn l mt dng cu trc cy m mi nt trn cy c ti a K nt con (c tnh n th t ca cc nt con).

Biu din cy K-phn bng mng


A B F J

C D E

G H

I K L

Cng tng t nh vic biu din cy nh phn, ngi ta c th thm vo cy K_phn mt s nt gi cho mi nt nhnh ca cy K_phn u c ng K nt con, cc nt con c xp th t t nt con th nht ti nt con th K, sau nh s cc nt trn cy K_phn bt u t 0 tr i, bt u t mc 1, ht mc ny n mc khc v t "tri qua phi" mi mc: Theo cch nh s ny, nt con th j ca nt i l: i * K + j. Nt cha ca nt x l nt (x - 1) div K. Ta c th dng mt mng T nh s t 0 lu cc gi tr trn cc nt: Gi tr ti nt th i c lu tr phn t T[i]. A
0

B
1

F
2

J
3

C
4

D
5

E
6

G
7

H
8

I
9

K
10

M
12

Biu din cy K_phn bng cu trc lin kt


Khi biu din cy K_phn bng cu trc lin kt, mi nt ca cy l mt bn ghi (record) gm hai trng: Trng Info: Cha gi tr lu trong nt . Trng Links: L mt mng gm K phn t, phn t th i cha lin kt (con tr) ti nt con th i, trong trng hp khng c nt con th i th Links[i] c gn mt gi tr c bit. i vi cy K_ phn, ta cng ch cn gi li nt gc, bi t nt gc, i theo cc hng lin kt c th i ti mi nt khc.

IV.2. Cy tng qut


L mt dng cu trc cy m s con ti a ca mi nt trn cy l khng xc nh.

A 9
TRNG CAO NG CNG NGH THNG TIN

64

Cu trc d liu v Gii thut

B 1

F 2

J 4

C 3 D 5 E6

G 7 H 8 10 K L 11

M 12

Biu din cy tng qut bng mng


lu tr cy tng qut bng mng, trc ht, ta nh s cc nt trn cy bt u t 1 theo mt th t tu . Gi s cy c n nt th ta s dng: Mt mng Info[1..n], trong Info[i] l gi tr lu trong nt th i. Mt mng Children c chia lm n on, on th i gm mt dy lin tip cc phn t l ch s cc nt con ca nt i. Nh vy mng Children s cha tt c ch s ca mi nt con trn cy (ngoi tr nt gc) nn n s gm n - 1 phn t, lu rng khi chia mng Children lm n on th s c nhng on rng (tng ng vi danh sch cc nt con ca mt nt l) Mt mng Head[1..n + 1], nh du v tr ct on trong mng Children: Head[i] l v tr u on th i, hay ni chnh xc hn: Cc phn t trong mng Children t v tr Head[i] n Head[i+1] - 1 l ch s cc nt con ca nt th i. Khi Head[i] = Head[i+1] c ngha l on th i rng. Quy c: Head[n+1] = n. Gi li ch s ca nt gc. Mng Info: Info[i]
i

B 1 3 1

F 2 5 2

C 3 6 3

J 4 7 4

D 5 8 5

E 6

G 7 10 6

H 8 111 2 7 8 on 4

A 9 1 9

K 10

L 11 2 10 on 9

M 12 4 11

Mng Children: Children[i]


i

on 1 Mng Head: Head[i] i 1 1 4 2 6 3 6 4

on 2

(Cc on 3, 5, 6, 7, 8, 10, 11, 12 l rng) 9 5 9 6 9 7 9 8 9 9 12 10 12 11 12 12 12 13

Lu tr cy tng qut bng cu trc lin kt


Khi lu tr cy tng qut bng cu trc lin kt, mi nt l mt bn ghi (record) gm ba trng: Trng Info: Cha gi tr lu trong nt . Trng FirstChild: Cha lin kt (con tr) ti nt con u tin ca nt (con c), trong trng hp l nt l (khng c nt con), trng ny c gn mt gi tr c bit.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

65

Trng Sibling: Cha lin kt (con tr) ti nt em k cn bn phi (nt cng cha vi nt ang xt, khi sp th t cc con th nt ng lin sau nt ang xt) Trong trng hp khng c nt em k cn bn phi, trng ny c gn mt gi tr c bit. D thy c tnh ng n ca phng php biu din, bi t mt nt N bt k, ta c th i theo lin kt FirstChild n nt con c, nt ny chnh l cht ca mt danh sch ni n cc nt con ca nt N: t nt con c, i theo lin kt Sibling, ta c th duyt tt c cc nt con ca nt N.

TRNG CAO NG CNG NGH THNG TIN

66

Cu trc d liu v Gii thut

CHNG 4

THUT TON SP XP
I. BI TON SP XP
Sp xp l qu trnh b tr li cc phn t ca mt tp i tng no theo mt th t nht nh. Chng hn nh th t tng dn (hay gim dn) i vi mt dy s, th t t in i vi cc t v.v... Yu cu v sp xp thng xuyn xut hin trong cc ng dng Tin hc vi cc mc ch khc nhau: sp xp d liu trong my tnh tm kim cho thun li, sp xp cc kt qu x l in ra trn bng biu v.v... Ni chung, d liu c th xut hin di nhiu dng khc nhau, nhng y ta quy c: Mt tp cc i tng cn sp xp l tp cc bn ghi (records), mi bn ghi bao gm mt s trng (fields) khc nhau. Nhng khng phi ton b cc trng d liu trong bn ghi u c xem xt n trong qu trnh sp xp m ch l mt trng no (hay mt vi trng no ) c ch ti thi. Trng nh vy ta gi l kho (key). Sp xp s c tin hnh da vo gi tr ca kho ny. V d: H s tuyn sinh ca mt trng i hc l mt danh sch th sinh, mi th sinh c tn, s bo danh, im thi. Khi mun lit k danh sch nhng th sinh trng tuyn tc l phi sp xp cc th sinh theo th t t im cao nht ti im thp nht. y kho sp xp chnh l im thi.

Stt 1
2 3 4 5

H v tn Trn Vn Nam
Nguyn Th B L Tn Hng ng Khi Nguyn Minh Tr

Ngy sinh Gii tnh 12/12/1998 Nam


22/10/1998 N 01/01/1998 Nam 10/03/1997 Nam 15/05/1998 Nam

im TB 7.5
9 8.5 6.5 8

Khi sp xp, cc bn ghi trong bng s c t li vo cc v tr sao cho gi tr kho tng ng vi chng c ng th t n nh. Ta thy rng kch thc ca kho thng kh nh so vi kch thc ca ton bn ghi, nn nu vic sp xp thc hin trc tip trn cc bn ghi s i hi s chuyn i v tr ca cc bn ghi, ko theo vic thng xuyn phi di chuyn, copy nhng vng nh ln, gy ra nhng tn ph thi gian kh nhiu. Thng ngi ta khc phc tnh trng ny bng cch xy dng mt bng kho: Mi bn ghi trong bng ban u s tng ng vi mt bn ghi trong bng kho. Bng kho cng gm cc bn ghi nhng mi bn ghi ch gm c hai trng: Trng th nht cha kho Trng th hai cha lin kt ti mt bn ghi trong bng ban u, tc l cha mt thng tin bit bn ghi tng ng vi n trong bng ban u l bn ghi no.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

67

Sau , vic sp xp c thc hin trc tip trn bng kho . Nh vy, trong qu trnh sp xp, bng chnh khng h b nh hng g, cn vic truy cp vo mt bn ghi no ca bng chnh, khi cn thit vn c th thc hin c bng cch da vo trng lin kt ca bn ghi tng ng thuc bng kho ny. Nh v d trn, ta c th xy dng bng kho gm 2 trng, trng kho cha im v trng lin kt cha s th t ca ngi c im tng ng trong bng ban u: Stt 1 2 3 4 5 im TB 7.5 9 8.5 6.5 8

Sau khi sp xp ta c bng kho sau: Stt 2 3 5 1 4 im TB 9 8.5 8 7.5 6.5

Da vo bng kho, ta c th bit c rng ngi c im cao nht l ngi mang s th t 2, tip theo l ngi mang s th t 4, tip na l ngi mang s th t 1, v cui cng l ngi mang s th t 3, cn mun lit k danh sch y th ta ch vic i chiu vi bng ban u v lit k theo th t 2, 4, 1, 3. C th cn ci tin tt hn da vo nhn xt sau: Trong bng kho, ni dung ca trng kho hon ton c th suy ra c t trng lin kt bng cch: Da vo trng lin kt, tm ti bn ghi tng ng trong bng chnh ri truy xut trng kho trong bng chnh. Nh v d trn th ngi mang s th t 1 chc chn s phi c im thi l 20, cn ngi mang s th t 3 th chc chn phi c im thi l 18. Vy th bng kho c th loi b i trng kho m ch gi li trng lin kt. Trong trng hp cc phn t trong bng ban u c nh s t 1 ti n v trng lin kt chnh l s th t ca bn ghi trong bng ban u nh v d trn, ngi ta gi k thut ny l k thut sp xp bng ch s: Bng ban u khng h b nh hng g c, vic sp xp ch n thun l nh li ch s cho cc bn ghi theo th t sp xp. C th hn: Nu r[1], r[2], ..., r[n] l cc bn ghi cn sp xp theo mt th t nht nh th vic sp xp bng ch s tc l xy dng mt dy Index[1], Index[2], ..., Index[n] m y: Index[j] := Ch s ca bn ghi s ng th j khi sp th t (Bn ghi r[index[j]] s phi ng sau j - 1 bn ghi khc khi sp xp) Do kho c vai tr c bit nh vy nn sau ny, khi trnh by cc gii thut, ta s coi kho nh i din cho cc bn ghi v cho n gin, ta ch ni ti gi tr ca kho m thi. Cc thao tc trong k thut sp xp l ra l tc ng ln ton bn ghi gi y ch lm trn kho. Cn vic ci t cc phng php sp xp trn danh sch cc bn ghi v k thut sp xp bng ch s, ta coi nh bi tp.
TRNG CAO NG CNG NGH THNG TIN

68

Cu trc d liu v Gii thut

Bi ton sp xp gi y c th pht biu nh sau:


Xt quan h th t ton phn "nh hn hoc bng" k hiu "" trn mt tp hp S, l quan h hai ngi tho mn bn tnh cht: Vi a, b, c S Tnh ph bin: Hoc l a b, hoc b a; Tnh phn x: a a Tnh phn i xng: Nu a b v b a th bt buc a = b. Tnh bc cu: Nu c a b v b c th a c. Trong trng hp a b v a b, ta dng k hiu "<" cho gn Cho mt dy gm n kho. Gia hai kho bt k c quan h th t ton phn "". Xp li dy cc kho c dy kho tho mn a1 a2 ... an. Gi s cu trc d liu cho dy kho c m t nh sau: const n = ...; //S kho trong dy kho type TKey = ...; //Kiu d liu mt kho TArray = array[0..n + 1] of TKey; var a: TArray; //Dy kho c thm 2 phn t k0 v kn+1 dng cho mt s thut ton Th nhng thut ton sp xp di y c vit di dng th tc sp xp dy kho k, kiu ch s nh cho tng kho trong dy c th coi l s nguyn Integer.

II. MT S THUT TON SP XP N GIN II.1. Sp xp kiu chn


tng: lt th nht: chn trong dy kho a1, a2, ..., an tm ra kho nh nht; sau i gi tr ca kho vi a1 lt th hai: chn trong dy kho a2, a3, ..., an tm ra kho nh nht; sau i gi tr ca kho vi a2 .... lt th i: chn trong dy kho ai, ai+1, ..., an tm ra kho nh nht; sau i gi tr ca kho vi ai .... lt th n-1:chn kho nh nht trong 2 kho an-1, an, sau i gi tr vi an-1 Thut ton Proc SelectSort(A, n) For i :=1 To n-1 { imin := i For j := i+1 To n If aimin < aj Then imin := j
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

69

If imin <> i Then ai aimin } Return

//i 2 gi tr aimin v ai cho nhau

phc tp ca thut ton


T(n)=

1 = (n i) = n i = n(n 1)
i =1 j =1 i =1 i =1 i =1

n 1

n 1

n 1

n 1

n(n 1) n(n 1) = = O(n 2 ) 2 2

II.2. Sp xp kiu ni bt
tng:
lt th nht: ta duyt dy kho t cui dy v u dy (t an n a1), nu gp 2 kho k nhau m khng tho mn iu kin sp xp th i ch 2 kho vi nhau. Nh vy sau lt ny kho a1 c gi tr nh nht Tng t nh trn cho cc phn t t a2 cho n an-1

Thut ton: Proc BubbleSort(A,n) For i :=2 To n { For j := n To i Step -1 If aj < aj-1 Then aj aj-1 } Return phc tp ca thut ton
T(n)=
n n n n n

1 = (n i) = n i = n(n 1)
i = 2 j =i i =2 i=2 i =2

n(n 1) n(n 1) +1 = + 1 = O(n 2 ) 2 2

II.3. Sp xp kiu chn


tng: Gi s kho a1 c coi l ng v tr ca n. lt th nht: ta so snh a1 vi kho a2; sau xen kho a2 vo ng v tr ca n. Nh vy ta c dy con c 2 kho c sp xp lt th hai: ta c dy con c 2 kho a1 v a2 c sp xp; ta xen a3 vo 2 kho trn vo ng v tr ca n ta c dy con c 3 kho c sp xp ... lt th i: ta c dy con c i kho a1...ai c sp xp; ta xen ai+1 vo dy con trn trn vo ng v tr ca n ta c dy con c i+1 kho c sp xp ... V tip tc cho n ht lt th n-1 th ta c dy kho c sp xp Thut ton Proc InsertionSort(A,n) For i := 2 To n { tam := ai //gi li gi tr ai chn vo ng v tr j := i-1 While j>0 And tam<aj Do //vng lp xc nh v tr chn
TRNG CAO NG CNG NGH THNG TIN

70

Cu trc d liu v Gii thut

aj+1 := aj j := j-1

//di aj>tam ra sau mt v tr // a gi tr cn chn vo ng v tr ca n

} aj+1 := tam } Return


phc tp ca thut ton

i vi thut ton ny th phc tp thut ton ph thuc vo tnh trng ca dy ban u. Nu coi tam<aj l php ton thc hin nhiu nht th Trong trng hp tt nht: ng vi dy kho c sp xp th mi lt ch c 1 ln so snh. Th tng s php so snh l n-1 ln. Trong trng hp xu nht (dy c sp xp gim) th ging thut ton SelectSort Trong trng hp trung bnh: cc gi tr kho c coi l xut hin mt cch ngu nhin, c th coi xc sut xut hin mi kho l ng kh nng, th lt th i thut ton cn trung bnh n i n(n + 1) 1 2 = 4 2 i/2 ln so snh. Nh vy s php so snh l i = 2 V T(n) = O(n2)

III. SP XP KIU PHN ON (quick sort)


Quick Sort l mt phng php sp xp tt nht, ngha l d dy kho thuc kiu d liu c th t no, Quick Sort cng c th sp xp c v khng c mt thut ton sp xp no nhanh hn Quick Sort v mt tc trung bnh (theo ti bit). Ngi sng lp ra n l C.A.R. Hoare mnh dn t tn cho n l sp xp "NHANH".
tng: Chn mt kho mt kho ak trong dy, da vo kho ak phn hoch dy thnh 3 phn nh sau: Phn 1 cha cc kho c gi tr ak. Cc kho ny nm bn tri ca ak trong dy Phn 2 l ak Phn 3 cha cc kho c gi tr >ak. Cc kho ny nm bn phi ca ak trong dy

a1 a2 ... Cc kho ak

ak-1

ak

ak+1 Cc kho > ak

an

Nh vy sau khi phn hoch kho ak s nm ng v tr ca n khi sp xp xong. Vi mi bn cn li cha cc kho cha sp xp s c di ngn hn di ban u v ta i sp xp n bng phng php tng t nh trn.
Xy dng 2 thut ton nh sau: Thut ton phn hoch phn hoch a1, a2, , an thnh 3 phn nh trn

Proc Place(A, l, r, k) // l l cn tri v r l cn phi ca dy kho t al, al+1,,ar //k l v tr ca ak sau khi phn hoch If l<r Then // trng hp c s kho >1
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

71

key := al //chn al lm gi tr phn hoch i := l+1 j := r While i<j Do { While ai< key Do i := i+1 While aj key Do j := j -1 If i<j Then {ai aj i := i+1 j := j-1 } } aj al k := j

} Return
Thut ton sp xp theo phng php QuickSort.

Proc QuickSort (A,l,r) If l<r Then { Call Place(A,l,r,k) Call QuickSort(A,l,k-1) Call QuickSort(A,k+1,r) } Return
Tnh phc tp

//Phn hoch dy thnh 3 phn //Gi sp xp cho na bn tri //Gi sp xp cho na bn phi

Gi s kho ak sau khi phn hoch nm ti v tr gia ca dy kho sau khi sp xp. gi Tn l phc tp ca thut ton QuickSort(A,l,r) (n=r-l+1). t thut ton ta c h thc truy on sau: Tn = 2Tn/2 + O(Place) T1=0

l+r Trong thut ton Place(A,l,r,k) ch s i v j chy t 2 u n trung im ca dy ( 2 ). Nh vy phc tp ca thut ton ny ti a l O(n). Th vo h thc trn v gii ra ta c phc tp ca thut ton l O(nlgn).
Ci tin thut ton Quick sort

Vic chn cht cho php phn on quyt nh hiu qu ca Quick Sort, nu chn cht khng tt, rt c th vic phn on b suy bin thnh trng hp xu khin Quick Sort hot ng chm v trn ngn xp chng trnh con khi gp phi dy chuyn qui qu di. Mt ci tin sau c th khc phc c hin tng trn ngn xp nhng cng ht sc chm trong trng hp xu, k thut ny khi phn c [L, H] c hai on con [L, j] v [i, H] th ch gi quy tip tc i vi on ngn, v lp li qu trnh phn on i vi on di. proc QuickSort; proc Partition(L, H: Integer); //Sp xp on t kL, kL+1, ..., kH} do {
TRNG CAO NG CNG NGH THNG TIN

72

Cu trc d liu v Gii thut

if L H then Exit; <Phn on [L, H] c hai on con [L, j] v [i, R]> if <on [L, j] ngn hn on [i, R]> then { Partition(L, j); L := i; } else { Partition(i, R); R := j; } } while True; Return Partition(1, n); Return Ci tin th hai i vi Quick Sort l qu trnh phn on nn ch lm n mt mc no , n khi on ang xt c di M (M l mt s nguyn t chn nm trong khong t 9 ti 25) th khng phn on tip m nn p dng thut ton sp xp kiu chn. Ci tin th ba ca Quick Sort l: Nn ly trung v ca mt dy con trong on lm cht, (trung v ca mt dy n phn t l phn t ng th n / 2 khi sp th t). Cch chn c nh gi cao nht l chn trung v ca ba phn t u, gia v cui on.
Nhn xt:

Quick Sort l mt cng c sp xp mnh, ch c iu kh chu gp phi l trng hp suy bin ca Quick Sort (qu trnh phn on chia thnh mt dy rt ngn v mt dy rt di). V iu ny trn phng din l thuyt l khng th khc phc c: V d vi n = 10000. Nu nh chn cht l kho u on (Thay dng chn kho cht bng Key := kL) hay chn cht l kho cui on (Thay bng Key := kH) th vi dy sau, chng trnh hot ng rt chm: (1, 2, 3, 4, 5, ..., 9999, 10000) Nu nh chn cht l kho gia on (Thay dng chn kho cht bng Key := k(L+H) div 2) th vi dy sau, chng trnh cng rt chm: (1, 2, ..., 4999, 5000, 5000, 4999, ..., 2, 1) Trong trng hp chn cht l trung v dy con hay chn cht ngu nhin, tht kh c th tm ra mt b d liu khin cho Quick Sort hot ng chm. Nhng ta cng cn hiu rng vi mi chin lc chn cht, trong 10000! dy hon v ca dy (1, 2, ... 10000) th no cng c mt dy lm Quick Sort b suy bin, tuy nhin trong trng hp chn cht ngu nhin, xc sut xy ra dy ny qu nh ti mc ta khng cn phi tnh n, nh vy khi chn cht ngu nhin th ta khng cn phi quan tm ti ngn xp quy, khng cn quan tm ti k thut kh quy v vn suy bin ca Quick Sort.

IV. SP XP KIU VUN NG


Khi nim

ng l cy nh phn hon chnh c bit m gi tr lu ti mi nt (tr l) u ln hn hoc bng gi tr ca 2 nt con ca n.

http://www.ebook.edu.vn

TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

73

Trong chng cy, vi mt dy kho a1, a2,,an c th biu din bng mt cy nh phn hon chnh nh sau:
a1 a2 a4 a5 a6 a3 a7

a8

a9

a10 ... ...

Ta xy dng mt s khi nim sau: L l ng Mt nt khng phi l l ng nu n ln hn hoc bng c 2 nt con Nh vy mt cy nh phn l ng th mi nt trong cy l ng. Khi mt cy l ng th ta c nt gc c gi tr ln nht.
Xy dng thut ton

Gi s dy c 9 kho sau: (3,2,9,1,8,5,7,6,4), th ta c cy nh phn hon chnh tng ng:


3 2 1 8 5 9 7

6 4 Bc 1: To ng cho cy nh phn

V cy nh phn ch gm c mt nt hin nhin l ng, nn vun mt nhnh cy gc r thnh ng, ta c th coi hai nhnh con ca n (nhnh gc 2r v 2r + 1) l ng ri. V thut ton vun ng s c tin hnh t di ln (bottom-up) i vi cy: Gi h l chiu cao ca cy, nt mc h (nt l) l gc mt ng, ta vun ln nhng nt mc h - 1 cng l gc ca ng, ... c nh vy cho ti nt mc 1 (nt gc) cng l gc ca ng.
Thut ton vun thnh ng i vi cy gc r, hai nhnh con ca r l ng ri

Gi s nt r cha gi tr V. T r, ta c i ti nt con cha gi tr ln nht trong 2 nt con, cho ti khi gp phi mt nt c m mi nt con ca c u cha gi tr V (nt l cng l trng hp ring ca iu kin ny). Dc trn ng i t r ti c, ta y gi tr cha nt con ln nt cha v t gi tr V vo nt c. Sau khi to ng cho cy ta c cy nh phn nh sau:
9 8
TRNG CAO NG CNG NGH THNG TIN

7 2 5 3

74

Cu trc d liu v Gii thut

Bc 2: thc hin qu trnh sp xp

Sau khi to ng cho cy, ta c nt gc l ln nht ta hon v nt gc vi nt cui ca cy, sau to ng li cho cy (thc cht l nt gc) cho cy m khng c nt cui ca cy (bt i nt c gi tr ln nht va hon v). Qu trnh ny c thc hin tip tc cho n khi cy ch cn mt nt. Qu trnh trn c m phng bng hnh nh sau:
9 8 6 2 5 7 3

4 8 7 2 5 3

Nh vy, mu cht y l thut ton to ng kho nt th i trong cy c n nt, d nhin cc nt khng phi l mc ln hn mc ca nt i l ng. Thut ton Heap Sort c hai th tc chnh: Th tc Adjust(root, endnode) vun cy gc root thnh ng trong iu kin hai cy gc 2.root v 2.root +1 l ng ri. Cc nt t endnode + 1 ti n nm v tr ng v khng c tnh ti na. Th tc Heap Sort m t li qu trnh vun ng v chn phn t theo tng trn: Proc Adjust(i,A,n) //To ng cho nt i trong dy a1, a2, ,an. x := ai c := 2*i //c l ch s nt con tri While c n Do
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

75

{ If c<n And ac< ac+1 Then c := c+1 //c l ch s nt ln nht trong 2 nt con If x<ac Then //vi phm tnh cht ng { ai := ac // Chuyn kho ac ln mc cao hn i := c //xc nh v tr mi cho x c := 2*i //c l con tri ca x } Else c := n+1 //iu kin dng vng lp } ai := x //t x vo ng v tr ca n trn cy Return Thut ton HeapSort nh sau: Proc HeapSort (A,n) n For i 2 To 1 Step -1 Call Adjust(i,A,n) For i n To 2 Step -1 { a1 ai Call Adjust(1, A, i-1) } Return
phc tp ca thut ton

//Vng lp to ng cho cy // i =n/2..1 l nhng nt c quyn lm cha //Hon v nt u vi nt cui trn cy //To ng li cho cy m khng c nt cui

Trong thut ton to ng cho kho nt i, ta nhn thy trong trng hp vng lp thc hin nhiu nht l to ng cho gc vi gi tr c coi l nh nht v vng lp thc hin t gc n ht chiu cao ca cy hon chnh. Nn phc tp ca thut ton l O(lgn) Vy phc tp ca thut ton HeapSort l O(nlgn). C th nhn xt thm rng Quick Sort quy cn thm khng gian nh cho Stack, cn Heap Sort ngoi mt nt nh ph thc hin vic i ch, n khng cn dng thm g khc. Heap Sort tt hn Quick Sort v phng din l thuyt bi khng c trng hp ti t no Heap Sort c th mc phi. Cng nh c Heap Sort m gi y khi gii mi bi ton c cha m-un sp xp, ta c th ni rng cp phc tp ca th tc sp xp khng qu O(nlgn).

V. MT S THUT TON KHC V.1. Phng php m


iu kin: cc kho sp xp phi l kiu nguyn v cc gi tr ca cc kho nm trong mt khong xc nh [x..y] bit trc tng:Do cc kho c kiu nguyn v c gi tr nm trong khong [x..y] xc nh trc nn ta c th coi kho chnh l ch s ca mng c kch thc y-x+1 phn t. T tng trn ta s dng mng Count c kch thc y-x+1 vi ch s mng l t a n b. Thut ton thc hin qua cc bc sau: Bc 1: Khi to mng Count vi cc phn t trong mng bng 0 Bc 2: m xem mi kho ca dy ai xut hin my ln trong dy nh vo mng Count Bc 3: Da vo gi tr Counti bit c i hin din trong dy cc kho a1,..,an khng? v nu c th n xut hin bao nhiu ln?
TRNG CAO NG CNG NGH THNG TIN

76

Cu trc d liu v Gii thut

Thut ton Proc CountSort(A,n) // gi s [x..y] l khong cha cc kho ai //Khi to mng Count For i x To y Counti 0 For i 1 To n Count ai Count ai + 1 //nh du kho ai l ch s mng Count n 0 For ix To y If Counti >0 Then //xc nh ch s i l mt kho trong dy a1,,an For j 1 To Counti //xc inh c bao nhiu kho i trong dy //xc nh li v tr ca kho i { n n+1 an i } Return

phc tp ca thut ton l O(n). Tuy nhin thut ton ny cn s dng b nh ln cho d kch thc dy a1, a2, ,an c th nh

V.2. Phng php dng hng i


C th dng 10 Queue sp xp. Cc Queue c nh s t 0..9. Bc 1: a cc kho vo queue c ch s l hng n v ca kho. Sau uyt qua 10 queue ly cc gi tr a li vo dy kho a1,,an Bc 2: a cc kho vo queue c ch s l hng chc ca kho. Sau uyt qua 10 queue ly cc gi tr a li vo dy kho a1,,an Bc k: a cc kho vo queue c ch s l hng th k (tnh t hng n v l 1)ca kho. Sau uyt qua 10 queue ly cc gi tr a li vo dy kho a1,,an
Thut ton Proc RadixSort(A,n) For i0 To 9 CREATQ(Qi) k Len(Max(a1,a2,,an)) //k l s cc con s ca kho ln nht trong dy For l 1 To k { For i 1 To n {j (ai Div 10i-1) Mod 10i //xc nh ch s j ca queue s dng ADD(ai, Qj ) //a kho ai vo queue j } n 0 //duyt qua 10 queue For i 0 To 9 If Not EMPTYQ(Qi) Then //trng hp Qi c gi tr While Not EMPTYQ(Qi) Do //Ly cc kho trong queue { n n+1 an FRONT(Qi) //a vo dy a1,,an REMOVE(Qi) }
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

77

} Return phc tp ca thut ton ny l O(n).

V.3. Phng php sp xp trn


Php trn hai ng trc tip

Php trn 2 ng l php hp nht hai dy kho sp xp ghp li thnh mt dy kho c kch thc bng tng kch thc ca hai dy kho ban u v dy kho to thnh cng c th t sp xp. Nguyn tc thc hin ca n kh n gin: so snh hai kho ng u hai dy, chn ra kho nh nht v a n vo min sp xp (mt dy kho ph c kch thc bng tng kch thc hai dy kho ban u) v tr thch hp. Sau , kho ny b loi ra khi dy kho cha n. Qu trnh tip tc cho ti khi mt trong hai dy kho cn, khi ch cn chuyn ton b dy kho cn li ra min sp xp l xong. V d: Vi hai dy kho: (1, 3, 10, 11) v (2, 4, 9)
Dy 1 (1, 3, 10, 11) (3, 10, 11) (3, 10, 11) (10, 11) (10, 11) (10, 11) Dy 2 (2, 4, 9) (2, 4, 9) (4, 9) (4, 9) (9) Kho nh nht trong 2 dy 1 2 3 4 9 Min sp xp (1) (1, 2) (1, 2, 3) (1, 2, 3, 4) (1, 2, 3, 4, 9) (1, 2, 3, 4, 9, 10, 11)

Dy 2 l , a nt dy 1 vo min sp xp

Thut ton sp xp bng trn 2 ng trc tip

Ta c th coi mi kho trong dy kho k1, k2, ..., kn l mt mch vi di 1, cc mch trong dy c sp xp ri:
3 6 4 5 8 9 1 0 2 7

Trn hai mch lin tip li thnh mt mch c di 2, ta li c dy gm cc mch c sp:


3 6 4 5 8 9 0 1 2 7

C trn hai mch lin tip, ta c mt mch di ln hn, s mch trong dy s gim dn xung
3 0 0 4 1 1 5 3 2 6 4 3 0 5 4 1 6 5 8 8 6 9 9 7 2 2 8 7 7 9

tin hnh thut ton sp xp trn hai ng trc tip, ta vit cc th tc: Th tc Merge(var x, y: TArray; a, b, c: Integer); th tc ny trn mch xa, xa+1, ..., xb vi mch xb+1, xb+2 ..., xc c mch ya, ya+1, ..., yc.
TRNG CAO NG CNG NGH THNG TIN

78

Cu trc d liu v Gii thut

Th tc MergeByLength(var x, y: TArray; len: Integer); th tc ny trn ln lt cc cp mch theo th t: Trn mch x1...xlen v xlen+1...x2len thnh mch y1...y2len. Trn mch x2len+1...x3len v x3len+1 ...x4len thnh mch y2len+1...y4len. Lu rng n cui cng ta c th gp hai trng hp: Hoc cn li hai mch m mch th hai c di < len. Hoc ch cn li mt mch. Trng hp th nht ta phi qun l chnh xc cc ch s thc hin php trn, cn trng hp th hai th khng c qun thao tc a thng mch duy nht cn li sang dy y. Cui cng l th tc MergeSort, th tc ny cn mt dy kho ph t1, t2, ..., tn. Trc ht ta gi MergeByLength(k, t, 1) trn hai phn t lin tip ca k thnh mt mch trong t, sau li gi MergeByLength(t, k, 2) trn hai mch lin tip trong t thnh mt mch trong k, ri li gi MergeByLength(k, t, 4) trn hai mch lin tip trong k thnh mt mch trong t ...Nh vy k v t c s dng vi vai tr lun phin: mt dy cha cc mch v mt dy dng trn cc cp mch lin tip c mch ln hn. proc Merge(var X, Y: TArray; a, b, c: Integer);{Trn Xa...Xb v Xb+1...Xc} //Ch s p chy trong min sp xp, i chy theo mch th nht, j chy theo mch th hai p := a; i := a; j := b + 1; while (i b) and (j c) then /Chng no c hai mch u cha xt ht { if Xi Xj then //So snh hai phn t nh nht trong hai mch m cha b a vo min sp xp {Yp := Xi; i := i + 1; //a x vo min sp xp v cho i chy } else {Yp := Xj; j := j + 1; a x vo min sp xp v cho j chy } p := p + 1; } if i b then //Mch 2 ht trc (Yp, Yp+1, ..., Yc) := (Xi, Xi+1, ..., Xb)//a phn cui ca mch 1 vo min sp xp else //Mch 1 ht trc (Yp, Yp+1, ..., Yc) := (Xj, Xj+1, ..., Xc); //a phn cui ca mch 2 vo min sp xp Return proc MergeByLength(var X, Y: TArray; len: Integer) a := 1; b := len; c := 2 * len; while c n do //Trn hai mch xa...xb v xb+1...xc u c di len {Merge(X, Y, a, b, c); //Dch cc ch s a, b, c v sau 2.len v tr a := a + 2 * len; b := b + 2 * len; c := c + 2 * len; } if b < n then Merge(X, Y, a, b, n) //Cn li hai mch m mch th hai c di ngn hn len else if a n then //Cn li mt mch (Ya, Ya+1, ..., Yn) := (Xa, Xa+1, ..., Xn); //a thng mch sang min y} Return
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

79

proc MergeSort; //Thut ton sp xp trn Flag := True; len := 1; while len < n do {if Flag then MergeByLength(k, t, len) else MergeByLength(t, k, len); len := len * 2; Flag := not Flag; //o c lun phin vai tr ca k v t} } if not Flag then k := t; //Nu kt qu cui cng ang nm trong t th sao chp kt qu vo k Return V cp phc tp ca thut ton, ta thy rng trong th tc Merge, php ton tch cc l thao tc a mt kho vo min sp xp. Mi ln gi th tc MergeByLength, tt c cc phn t trong dy kho c chuyn hon ton sang min sp xp, nn cp phc tp ca th tc MergeByLength l O(n). Th tc MergeSort c vng lp thc hin khng qu log2n + 1 li gi MergeByLength bi bin len s c tng theo cp s nhn cng bi 2. T suy ra cp phc tp ca MergeSort l O(nlog2n) bt chp trng thi d liu vo. Cng l nhng thut ton sp xp tng qut vi phc tp trung bnh nh nhau, nhng khng ging nh QuickSort hay HeapSort, MergeSort c tnh n nh. Nhc im ca MergeSort l n phi dng thm mt vng nh cha dy kho ph c kch thc bng dy kho ban u. Ngi ta cn c th li dng c trng thi d liu vo khin MergeSort chy nhanh hn: ngay t u, ta khng coi mi phn t ca dy kho l mt mch m coi nhng on c sp trong dy kho l mt mch. Bi mt dy kho bt k c th coi l gm cc mch sp xp nm lin tip nhau. Khi ngi ta gi phng php ny l phng php trn hai ng t nhin. Tng qut hn na, thay v php trn hai mch, ngi ta c th s dng php trn k mch, khi ta c thut ton sp xp trn k ng.

TRNG CAO NG CNG NGH THNG TIN

80

Cu trc d liu v Gii thut

CHNG 5

CC THUT TON TM KIM I. BI TON TM KIM


Cng vi sp xp, tm kim thng xuyn c cp n trong cc ng dng tin hc. Ta c th hnh dung bi ton tm kim nh sau: Cho mt dy gm n bn ghi r1, r2, , rn. mi bn ghi ri tng ng vi kho ki. Hy tm mt bn ghi c gi tr kho bng x cho trc. Vic tm kim hon thnh c th xy ra mt trong hai tnh hung sau: Tm c bn ghi c kho tng ng bng x, lc php tm kim thnh cng (true) Khng tm c bn ghi no c kho tm kim bng x c, php tm kim tht bi (false) Cng nh trong sp xp, s dng dy kho cha cc gi tr nguyn trnh by thut ton. Tng t nh sp xp, ta coi kho ca mt bn ghi l i din cho bn ghi . V trong mt s thut ton s trnh by di y, ta coi kiu d liu cho mi kho cng c tn gi l TKey. const n = ...; //S kho trong dy kho type TKey = ...; {Kiu d liu mt kho} TArray = array[0..n + 1] of TKey; var k: TArray; // Dy kho c thm 2 phn t k0 v kn+1 dng cho mt s thut ton

II. TM KIM TUN T


y l k thut tm kim n gin. Bt u t kho u tin, ln lt so snh kho x vi kho tng ng trong dy. Qu trnh tm kim kt thc khi tm c kho tho mn hoc i n ht dy hoc gp iu kin dng vng lp. C 2 thut ton tm tun t trn dy kho u vo khc nhau.
Trn dy kho cha sp xp Func Sequential_1(x,A,n) i := 1 While i <=n And ai <>x Do i := i+1 Sequential_1 := (i <=n) Return Trn dy kho c sp xp Func Sequential_2(x,A,n) i := 1 While i <=n And ai <x Do i := i+1 If ai =x Then Tuan_Tu2 := True Else Sequential_2 := False Return
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

81

D thy rng cp phc tp ca thut ton tm kim tun t trong trng hp tt nht l O(1), trong trng hp xu nht l O(n) v trong trng hp trung bnh cng l O(n).

III.TM KIM NH PHN


Php tm kim nh phn c thc hin trn dy kho c th t a1a2an. Chia i dy kho cn tm kim. So snh kho gia dy vi x, c 3 trng hp xy ra: Gi tr kho ny bng x, tm kim thnh cng Gi tr kho ny ln hn x, th ta tin hnh tm x vi na bn tri ca kho ny Gi tr kho ny nh hn x, th ta tin hnh tm x vi na bn phi ca kho ny Trng hp tm kim tht bi khi dy kho cn tm khng c phn t no.
Thut ton Proc BinarySearch(x,A,n) // Tm kho x trong dy a1,a2,an //Left tr v ch s u dy left 1 //right tr v v tr cui dy right n found False//dng xc tm thnh cng hay khng While left <= right And Not found Do //mid gia dy { mid (left + right) Div 2 If amid = x Then //trng hp tm thy dng thut ton found True Else If amid <x Then left mid +1 //xc nh li on tm tip theo l bn phi Else right mid -1//xc nh li on tm tip theo l bn tri } BinarySearch found Return

Ngi ta chng minh c phc tp tnh ton ca thut ton tm kim nh phn trong trng hp tt nht l O(1), trong trng hp xu nht l O(log2n) v trong trng hp trung bnh cng l O(log2n). Tuy nhin, ta khng nn qun rng trc khi s dng tm kim nh phn, dy kho phi c sp xp ri, tc l thi gian chi ph cho vic sp xp cng phi tnh n. Nu dy kho lun lun bin ng bi php b sung hay loi bt i th lc chi ph cho sp xp li ni ln rt r lm bc l nhc im ca phng php ny.

IV. PHP BM (HASH)


T tng ca php bm l da vo gi tr cc kho k1, k2, ..., kn, chia cc kho ra thnh cc nhm. Nhng kho thuc cng mt nhm c mt c im chung v c im ny khng c trong cc nhm khc. Khi c mt kho tm kim X, trc ht ta xc nh xem nu X thuc vo dy kho cho th n phi thuc nhm no v tin hnh tm kim trn nhm . Mt v d l trong cun t in, cc bn sinh vin thng dn vo 26 mnh giy nh vo cc trang nh du trang no l trang khi u ca mt on cha cc t c cng ch ci u. khi tra t ch cn tm trong cc trang cha nhng t c cng ch ci u vi t cn tm.
TRNG CAO NG CNG NGH THNG TIN

82

Cu trc d liu v Gii thut

Mt v d khc l trn dy cc kho s t nhin, ta c th chia n l lm m nhm, mi nhm gm cc kho ng d theo m-un m. C nhiu cch ci t php bm: Cch th nht l chia dy kho lm cc on, mi on cha nhng kho thuc cng mt nhm v ghi nhn li v tr cc on . khi c kho tm kim, c th xc nh c ngay cn phi tm kho trong on no. Cch th hai l chia dy kho lm m nhm, Mi nhm l mt danh sch ni n cha cc gi tr kho v ghi nhn li cht ca mi danh sch ni n. Vi mt kho tm kim, ta xc nh c phi tm kho trong danh sch ni n no v tin hnh tm kim tun t trn danh sch ni n . Vi cch lu tr ny, vic b sung cng nh loi b mt gi tr khi tp hp kho d dng hn rt nhiu phng php trn. Cch th ba l nu chia dy kho lm m nhm, mi nhm c lu tr di dng cy nh phn tm kim v ghi nhn li gc ca cc cy nh phn tm kim , phng php ny c th ni l tt hn hai phng php trn, tuy nhin dy kho phi c quan h th t ton phn th mi lm c.

V. CY TM KIM NH PHN V.1. nh ngha


Cy tm kim nh phn (TKNP) l cy nh phn m kho ti mi nt cy ln hn kho ca tt c cc nt thuc cy con bn tri v nh hn kho ca tt c cc nt thuc cy con bn phi. Minh ho mt cy TKNP c kho l s nguyn (vi quan h th t trong tp s nguyn).

Qui c: Cng nh tt c cc cu trc khc, ta coi cy rng l cy TKNP


Nhn xt: Trn cy TKNP khng c hai nt cng kho. Cy con ca mt cy TKNP l cy TKNP. Khi duyt trung t (InOrder) cy TKNP ta c mt dy c th t tng. Chng hn duyt trung t cy trn ta c dy: 5, 10, 15, 17, 20, 22, 30, 35, 42.

V.2. Ci t cy tm kim nh phn


C th p dng cc cch ci t nh trnh by trong phn cy nh phn ci t cy TKNP. Nhng s c nhiu s khc bit trong cc gii thut thao tc trn cy TKNP nh tm kim, thm hoc xo mt nt trn cy TKNP lun m bo tnh cht cu cy TKNP. Thng thng s dng con tr ci t cy TKNP.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

83

Gi s con tr tr vo cy TKNP l Root. Sau y l cc thao tc trn cy TKNP


Khi to cy TKNP rng Root Null Tm kim mt nt c kho cho trc trn cy TKNP

tm kim 1 nt c kho x trn cy TKNP, ta tin hnh t nt gc bng cch so snh kho cu nt gc vi kho x. Nu nt gc bng NIL th khng c kho x trn cy. Nu x bng kho ca nt gc th gii thut dng v ta tm c nt cha kho x. Nu x ln hn kho ca nt gc th ta tin hnh (mt cch qui) vic tm kho x trn cy con bn phi. Nu x nh hn kho ca nt gc th ta tin hnh (mt cch qui) vic tm kho x trn cy con bn tri. V d: tm nt c kho 30 trong cy TKNP trn So snh 30 vi kho nt gc l 20, v 30 > 20 vy ta tm tip trn cy con bn phi, tc l cy c nt gc c kho l 35. So snh 30 vi kho ca nt gc l 35, v 30 < 35 vy ta tm tip trn cy con bn tri, tc l cy c nt gc c kho l 22. So snh 30 vi kha ca nt gc l 22, v 30 > 22 vy ta tm kim trn cy con bn phi, tc l cy c nt gc c kho l 30. So snh 30 vi kho nt gc l 30, 30 = 30 vy n y gii thut dng v ta tm c nt cha kho cn tm.
Hm di y tr v kt qu l con tr tr ti nt cha kho x hoc Null nu khng tm thy kho x trn cy TKNP. Func Search(x,Root) If Root = Null Then Search := Null //khng tm thy kho x Else If Info(Root) = x Then Search := Root //tm thy kho x Else If Info(Root) < x Then Search := Search(x,Right(Root)) //tm tip trn cy bn phi Else Search := Search(x,Left(Root)) //tm tip trn cy bn tri Return Tuy nhin c th s dng gii thut khng qui nh sau Func Search(x,Root) p := Root While p<>Null And Info(p)<>x Do If Info(p)<x Then p := Right(p) //Tm kim bn cy con phi Else p := Left(p) //Tm kim bn cy con tri Search := p Return Thm mt nt c kho cho trc vo cy tm kim nh phn
TRNG CAO NG CNG NGH THNG TIN

84

Cu trc d liu v Gii thut

Trong qu trnh chn 1 gi tr mi vo cy TKNP, nu c x trong cy th khng thc hin chn. trng hp cha c th ta chn x vo cy cho tho tnh cht cy TKNP. Gii thut qui c th nh sau: Ta tin hnh t nt gc bng cch so snh kho cu nt gc vi kho x. Nu nt gc bng Null th kho x cha c trn cy, do ta thm nt mi cha kho x. Nu x bng kho ca nt gc th gii thut dng, trng hp ny ta khng thm nt. Nu x ln hn kho ca nt gc th ta tin hnh (mt cch qui) gii thut ny trn cy con bn phi. Nu x nh hn kho ca nt gc th ta tin hnh (mt cch qui) gii thut ny trn cy con bn tri. V d: thm kho 19 vo cy TKNP trn So snh 19 vi kho ca nt gc l 20, v 19 < 20 vy ta xt tip n cy bn tri, tc l cy c nt gc c kho l10. So snh 19 vi kho ca nt gc l 10, v 19 > 10 vy ta xt tip n cy bn phi, tc l cy c nt gc c kho l 17. So snh 19 vi kho ca nt gc l 17, v 19 > 17 vy ta xt tip n cy bn phi. Nt con bn phi bng Null, chng t rng kho 19 cha c trn cy, ta thm nt mi cha kho 19 v nt mi ny l con bn phi ca nt c kho l 17

Chng trnh con sau y tin hnh vic thm mt kho vo cy TKNP. Proc InsertNode(x ,Root) If Root = Null Then RootTao(x,Null,Null)//To 1 Node cho cy (hm to c) Else If x < Info(Root) Then Call InsertNode(x,Left(Root)) //Chn x vo cy con tri Else If x > Info(Root) Then Call InsertNode(x,Right(Root)) //Chn x vo cy con phi Return Ci t khng qui Proc InserNode(x,Root) p := Root While p<>Null And Info(p)<>x Do { q := p If Info(p)<x Then
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

85

p := Right(p) Else

//Tm kim bn cy con phi

p := Left(p) //Tm kim bn cy con tri } If p=Null Then //trng hp khng c x trong cy { p := Tao(x, Null, Null) If Info(q) >x Then Left(q) := p Else Right(q) := p } Return
Xo mt nt c kho cho trc trn cy tm kim nh phn

Gi s ta mun xo mt nt c kho x, trc ht ta phi tm kim nt cha kho x trn cy. Vic xo mt nt nh vy, tt nhin, ta phi bo m cu trc cy TKNP khng b ph v. Ta c cc trng hp sau:

Nu khng tm thy nt cha kho x th gii thut kt thc. Nu tm gp nt N c cha kho x, ta c ba trng hp sau Nu N l l ta thay n bi Null. N ch c mt nt con ta thay n bi nt con ca n. N c hai nt con ta thay n bi nt ln nht trn cy con tri ca n (nt cc phi ca cy con tri ) hoc l nt b nht trn cy con phi ca n (nt cc tri ca cy con phi). Trong gii thut sau, ta thay x bi kho ca nt cc tri ca cy con bn phi ri ta xo nt cc tri ny. Vic xo nt cc tri ca cy con bn phi s ri vo mt trong hai trng hp trn.
TRNG CAO NG CNG NGH THNG TIN

86

Cu trc d liu v Gii thut

Gii thut xo mt nt c kho nh nht

Hm di y tr v kho ca nt cc tri, ng thi xo nt ny. Func DeleteMin ( Root ) If Left(Root) = Null Then { DeleteMin := Info(Root) Root := Right(Root) } Else DeleteMin := DeleteMin(Left(Root)) Return Chng trnh con xa mt nt c kho cho trc trn cy TKNP Proc DeleteNode( X,Root) If Root <> Null Then If x < Info(Root) Then Call DeleteNode(x,Left(Root)) Else If x > Info(Root) Then Call DeleteNode(x,Right(Root)) Else If Left(Root) = Null And Right(Root) = Null Then Root := Null Else If Left(Root) = Null Then Root := Right(Root) Else If Right(Root) = Null Then Root := Left(Root) Else Info(Root) := DeleteMin(Right(Root) Return

VI.CY TM KIM C S (RADIX SEARCH TREE RST)


Mi d liu lu tr trong my tnh u c s ho, tc l u c lu tr bng cc n v Bit, Byte, Word v.v... iu c ngha l mt gi tr kho bt k, ta hon ton c th bit c n c m ho bng con s nh th no. V mt iu chc chn l hai kho khc nhau s c lu tr bng hai s khc nhau. i vi bi ton sp xp, ta khng th a vic sp xp mt dy kho bt k v vic sp xp trn mt dy kho s l m ca cc kho. Bi quan h th t trn cc con s c th khc vi th t cn sp ca cc kho. Nhng i vi bi ton tm kim th khc, vi mt kho tm kim, Cu tr li hoc l "Khng tm thy" hoc l "C tm thy v ch ..." nn ta hon ton c th thay cc kho bng cc m s ca n m khng b sai lm, ch lu mt iu l: hai kho khc nhau phi m ho thnh hai s khc nhau m thi. Ni nh vy c ngha l vic nghin cu nhng thut ton tm kim trn cc dy kho s rt quan trng, v y ta s tm hiu mt trong s nhng phng php . Cy tm kim c s l mt phng php khc phc nhc im , ni dung ca n c th tm tt nh sau: Trong cy tm kim c s l mt cy nh phn, ch c nt l cha gi tr kho, cn gi tr cha trong cc nt nhnh l v ngha. Cc nt l ca cy tm kim c s u nm mc z + 1.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

87

i vi nt gc ca cy tm kim c s, n c ti a hai nhnh con, mi kho cha trong nt l ca nhnh con tri u c bt cao nht l 0, mi kho cha trong nt l ca nhnh con phi u c bt cao nht l 1. i vi hai nhnh con ca nt gc, vn tng t vi bt th z - 2, v d vi nhnh con tri ca nt gc, n li c ti a hai nhnh con, mi kho cha trong nt l ca nhnh con tri u c bt th z - 2 l 0 (chng bt u bng hai bt 00), mi kho cha trong nt l ca nhnh con phi u c bt th z - 2 l 1 (chng bt u bng hai bt 01)... Tng qut vi nt mc d, n c ti a hai nhnh con, mi nt l ca nhnh con tri cha kho c bt z - d l 0, mi nt l ca nhnh con phi cha kho c bt th z - d l 1. V d: cho dy kho 9, 4, 11, 2, 8, 14, 10, 5 c biu din bng cy tm kim c s sau:
0 1

0
2
0010

0
4
0100

1
5
0101

0
8
1000

1
9 10

1
11
1011

0
14
1110

1001 1010

Cy tm kim c s c khi to gm c mt nt gc, v nt gc tn ti trong sut qu trnh s dng: n khng bao gi b xo i c.


Tm kim trn cy tm kim c s

tm mt gi tr x trn cy tm kim c s, ban u con tr p nt gc v ng thi duyt dy bit ca x t bit z-1 n bit 0. Trong qu trnh duyt, nu gp bit 0 th p tr qua nt con tri, gp bit 1 th p tr qua nt con phi. Trong qu trnh duyt c th c 2 trng hp xy ra: Bit ca x cn nhng con tr p trn cy ra Null th qu trnh tm kim tht bi Duyt ht cc bit ca x v p ang ng nt l, th qu trnh tm kim thnh cng v gi tr ca nt l bng ng kho x Hm tm kim trn cy tm kim c s, n tr v nt l cha kho tm kim X nu tm thy, tr v nil nu khng tm thy, z l di dy bt biu din mt kho func RSTSearch(X: TKey): PNode; b := z; p := Root; //Bt u vi nt gc, i vi RST th gc lun c sn do { b := b - 1; //Xt bt b ca X if <Bt b ca X l 0> then p := p^.Left //Gp 0 r tri else p := p^.Right; //Gp 1 r phi
TRNG CAO NG CNG NGH THNG TIN

88

Cu trc d liu v Gii thut

} while (p <> nil) and (b <> 0); RSTSearch := p; Return


Thao tc chn mt gi tr X vo RST

Thut ton thc hin nh sau: u tin, ta ng gc v duyt dy bt ca X t tri qua phi (t bt z - 1 v bt 0), c gp 0 th r tri, gp 1 th r phi. Nu qu trnh r theo mt lin kt nil (i ti nt rng) th lp tc to ra mt nt mi, v ni vo theo lin kt c ng i tip. Sau khi duyt ht dy bt ca X, ta s dng li mt nt l ca RST, v cng vic cui cng l t gi tr X vo nt l . proc RSTInsert(X: TKey); b := z; p := Root; //Bt u t nt gc, i vi RST th gc lun nil do { b := b - 1; //Xt bt b ca X q := p; //Khi p chy xung nt con th q^ lun gi vai tr l nt cha ca p^ if <Bt b ca X l 0> then p := p^.Left //Gp 0 r tri} else p := p^.Right; //Gp 1 r phi if p = nil then //Khng i c th t thm nt i tip {New(p); //To ra mt nt mi v em p tr ti nt p^.Left := nil; p^.Right := nil; if <Bt b ca X l 0> then q^.Left := p //Ni p^ vo bn tri q^ else q^.Right := p; //Ni p^ vo bn phi q^ } } while b <> 0; p^.Info := X; //p^ l nt l t X vo Return
Thao tc xo mt nt c gi tr X khi cy RST

Vi cy tm kim c s, vic xo mt gi tr kho khng phi ch l xo ring mt nt l m cn phi xo ton b nhnh c o i ti nt trnh lng ph b nh. Ta lp li qu trnh tm kim gi tr kho X, qu trnh ny s i t gc xung l, ti mi bc i, mi khi gp mt nt ng ba (nt c c con tri v con phi - nt cp hai), ta ghi nhn li ng ba v hng r. Kt thc qu trnh tm kim ta gi li c ng ba i qua cui cng, t nt ti nt l cha X l con ng c o (khng c ch r), ta tin hnh d b tt c cc nt trn on ng c o khi cy tm kim c s. khng b gp li khi cy suy bin (khng c nt cp 2) ta coi gc cng l nt ng ba. proc RSTDelete(X: TKey); //Trc ht, tm kim gi tr X xem n nm nt no b := z; p := Root; do{ b := b - 1; q := p; //Mi ln p chuyn sang nt con, ta lun m bo cho q^ l nt cha ca p^ if <Bt b ca X l 0> then p := p^.Left else p := p^.Right; if (b = z - 1) or (q^.Left nil) and (q^.Right nil) then //q^ l nt ng ba { TurnNode := q; Child := p; //Ghi nhn li q^ v hng r } } while (p <> nil) and (b <> 0); if p = nil then Exit; //X khng tn ti trong cy th khng xo c //Trc ht, ct nhnh c o ra khi cy
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

89

if TurnNode^.Left = Child then TurnNode^.Left := nil else TurnNode^.Right := nil p := Child; //Chuyn sang on ng c o, bt u xo do { q := p; //Lu rng p^ ch c ti a mt nhnh con m thi, cho p tr sang nhnh con duy nht nu c if p^.Left nil then p := p^.Left else p := p^.Right; Dispose(q); //Gii phng b nh cho nt q^ } while p <> nil; Return Hnh dng ca cy tm kim c s khng ph thuc vo th t chn cc kho vo m ch ph thuc vo gi tr ca cc kho cha trong cy. i vi cy tm kim c s, phc tp tnh ton cho cc thao tc tm kim, chn, xo trong trng hp xu nht cng nh trung bnh u l O(z). Do khng phi so snh gi tr kho dc ng i, n nhanh hn cy tm kim s hc nu nh gp cc kho cu trc ln. Tc nh vy c th ni l tt, nhng vn b nh khin ta phi xem xt: Gi tr cha trong cc nt nhnh ca cy tm kim c s l v ngha dn ti s lng ph b nh. Mt gii php cho vn ny l: Duy tr hai dng nt trn cy tm kim c s: Dng nt nhnh ch cha cc lin kt tri, phi v dng nt l ch cha gi tr kho. Ci t cy ny trn mt s ngn ng nh kiu qu mnh i khi rt kh. Gii php th hai l c t mt cy tng t nh RST, nhng sa i mt cht: nu c nt l cha gi tr X c ni vi cy bng mt nhnh c o th ct b nhnh c o , v thay vo ch nhnh ny ch mt nt cha gi tr X. Nh vy cc gi tr kho vn ch cha trong cc nt l nhng cc nt l gi y khng ch nm trn mc z + 1 m cn nm trn nhng mc khc na. Phng php ny khng nhng tit kim b nh hn m cn lm cho qu trnh tm kim nhanh hn. Gi phi tr cho phng php ny l thao tc chn, xo kh phc tp. Tn ca cu trc d liu ny l Trie (Trie ch khng phi Tree) tm kim c s. Php tm kim bng c s khng nht thit phi chn h c s 2. Ta c th chn h c s ln hn c tc nhanh hn (km theo s tn km b nh), ch lu l cy tm kim c s trong trng hp ny khng cn l cy nh phn m l cy R_phn vi R l h c s c chn. Trong cc phng php tm kim bng c s, thc ra cn mt phng php tinh tu v thng minh nht, n c cu trc gn ging nh cy nhng khng c nt d tha, v qu trnh duyt bt ca kho tm kim khng phi t tri qua phi m theo th t ca cc bt kim sot lu ti mi nt i qua. Phng php c tn gi l Practical Algorithm To Retrieve Information Coded In Alphanumeric (PATRICIA) do Morrison xut. Tuy nhin, vic ci t phng php ny kh phc tp (c bit l thao tc xo gi tr kho), ta c th tham kho ni dung ca n trong cc ti liu khc.

TRNG CAO NG CNG NGH THNG TIN

90

Cu trc d liu v Gii thut

CHNG 6

BIU DIN TH I. MT S KHI NIM


Mt th G bao gm mt tp hp V cc nh v mt tp hp E cc cung, k hiu G=(V,E). Cc nh cn c gi l nt (node) hay im (point). Cc cung ni gia hai nh, hai nh ny c th trng nhau. Hai nh c cung ni nhau gi l hai nh k (adjacency). Mt cung ni gia hai nh v, w c th coi nh l mt cp im (v,w). Nu cp ny c th t th ta c cung c th t, ngc li th cung khng c th t. Nu cc cung trong th G c th t th G gi l th c hng (directed graph). Nu cc cung trong th G khng c th t th th G l th v hng (undirected graph). Trong cc phn sau ny ta dng t th (graph) ni n th ni chung, khi no cn phn bit r ta s dng th c hng, th v hng. Hnh V.1a cho ta mt v d v th c hng, hnh V.1b cho v d v th v hng. Trong cc th ny th cc vng trn c nh s biu din cc nh, cn cc cung c biu din bng cc on thng c hng (Hnh 1a) hoc khng c hng (Hnh 1b).

Thng thng trong mt th, cc nh biu din cho cc i tng cn cc cung biu din mi quan h (relationship) gia cc i tng . Chng hn cc nh c th biu din cho cc thnh ph cn cc cung biu din cho ng giao thng ni gia hai thnh ph. Mt ng i (path) trn th l mt dy tun t cc nh v1, v2,..., vn sao cho (vi,vi+1) l mt cung trn th (i=1,...,n-1). ng i ny l ng i t v1 n vn v i qua cc nh v2,...,vn-1. nh v1 cn gi l nh u, vn gi l nh cui. di ca ng i ny bng (n1). Trng hp c bit dy ch c mt nh v th ta coi l ng i t v n chnh n c di bng khng. V d dy 1,2,4 trong th V.1a l mt ng i t nh 1 n nh 4, ng i ny c di l hai. ng i gi l n (simple) nu mi nh trn ng i u khc nhau, ngoi tr nh u v nh cui c th trng nhau. Mt ng i c nh u v nh cui trng nhau gi l mt chu trnh (cycle). Mt chu trnh n l mt ng i n c nh u v nh cui trng nhau v c di t nht l 1. V d trong hnh V.1a th 3, 2, 4, 3 to thnh mt chu trnh c di 3. Trong hnh V.1b th 1,3,4,2,1 l mt chu trnh c di 4.
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

91

Trong nhiu ng dng ta thng kt hp cc gi tr (value) hay nhn (label) vi cc nh v/hoc cc cnh, lc ny ta ni th c nhn. Nhn kt hp vi cc nh v/hoc cnh c th biu din tn, gi, khong cch,... Ni chung nhn c th c kiu tu . Hnh 2 cho ta v d v mt th c nhn. y nhn l cc gi tr s nguyn biu din cho gi cc vn chuyn mt tn hng gia cc thnh ph 1, 2, 3, 4 chng hn.

th con ca mt th G=(V,E) l mt th G'=(V',E') trong : VV v E gm tt c cc cnh (v,w) E sao cho v,w V. Thng thng trong cc gii thut trn th, ta thng phi thc hin mt thao tc no vi tt c cc nh k ca mt nh, tc l mt on gii thut c dng sau: For (mi nh w k vi v) { thao tc no trn w } ci t cc gii thut nh vy ta cn b sung thm khi nim v ch s ca cc nh k vi v. Hn na ta cn nh ngha thm cc php ton sau y: FIRST(v) tr v ch s ca nh u tin k vi v. Nu khng c nh no k vi v th null c tr v. Gi tr null c chn tu theo cu trc d liu ci t th. NEXT(v,i) tr v ch s ca nh nm sau nh c ch s i v k vi v. Nu khng c nh no k vi v theo sau nh c ch s i th null c tr v. VERTEX(i) tr v nh c ch s i. C th xem VERTEX(v,i) nh l mt hm nh v nh th i thc hin mt thao tc no trn nh ny.

II. CC CCH BIU DIN TH


Mt s cu trc d liu c th dng biu din th. Vic chn cu trc d liu no l tu thuc vo cc php ton trn cc cung v nh ca th. Hai cu trc thng gp l biu din th bng ma trn k (adjacency matrix) v biu din th bng danh sch cc nh k (adjacency list).

II.1. Biu din th bng ma trn k


Ta dng mt mng hai chiu, chng hn mng A, kiu boolean biu din cc nh k. Nu th c n nh th ta dng mng A c kch thc nxn. Gi s cc nh c nh s 1..n th A[i,j] = true, nu c nh ni gia nh th i v nh th j, ngc li th A[i,j] = false. R rng, nu G l th v hng th ma trn k s l ma trn i xng. Chng hn th Hnh1b c biu din ma trn k nh sau:

TRNG CAO NG CNG NGH THNG TIN

92

Cu trc d liu v Gii thut

j i 0 1 2 3

true true true false

true true true true

true true true true

false true true true

Ta cng c th biu din true l 1 cn false l 0. Vi cch biu din ny th th Hnh1a c biu din ma trn k nh sau: j i 0 1 2 3 1 0 0 0 1 1 1 0 1 0 1 0 0 1 0 1 0 1 2 3

Vi cch biu din th bng ma trn k nh trn chng ta c th nh ngha ch s ca nh l s nguyn ch nh (theo cch nh s cc nh) v ta ci t cc php ton FIRST, NEXT v VERTEX nh sau: const null=0; int A[n,n]; //mng biu din ma trn k int FIRST(int v) //tr ra ch s [1..n] ca nh u tin k vi v 1..n { int i; for (i=1; i<=n; i++) if (a[v-1,i-1] == 1) return (i); //tr ra ch s nh ca th return (null); } int NEXT(int v; int i) //tr ra nh { int j; for (j=i+1; j<=n; j++) if (a[v-1,j-1] == 1) return(j) return(null); } [1..n] sau nh i m k vi v; i, v 1..n

Cn VERTEX(i) ch n gin l tr ra chnh i. Vng lp trn cc nh k vi v c th ci t nh sau Int VERTEX(i) { i=FIRST(v);

while (i<>null) { w = VERTEX(i);


http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

93

//thao tc trn w
i =NEXT(v,i);

}}

Trn th c nhn th ma trn k c th dng lu tr nhn ca cc cung chng hn cung gia i v j c nhn a th A[i,j]=a. V d ma trn k ca th hnh 6.2 l: j i 1 2 3 4 50 45 10 75 30 50 45 10 75 30 1 1 3 4

y cc cp nh khng c cnh ni th ta trng, nhng trong cc ng dng ta c th phi gn cho n mt gi tr c bit no phn bit vi cc gi tr c ngha khc. Chng hn nh trong bi ton tm ng i ngn nht, cc gi tr s nguyn biu din cho khong cch gia hai thnh ph th cc cp thnh ph khng c cnh ni ta gn cho n khong cch bng , cn khong cch t mt nh n chnh n l 0. Cch biu din th bng ma trn k cho php kim tra mt cch trc tip hai nh no c k nhau khng. Nhng n phi mt thi gian duyt qua ton b mng xc nh tt c cc cnh trn th. Thi gian ny c lp vi s cnh v s nh ca th. Ngay c s cnh ca th rt nh chng ta cng phi cn mt mng nxn phn t lu tr. Do vy, nu ta cn lm vic thng xuyn vi cc cnh ca th th ta c th phi dng cch biu din khc cho thch hp hn.

II.2. Biu din th bng danh sch cc nh k:


Trong cch biu din ny, ta s lu tr cc nh k vi mt nh i trong mt danh sch lin kt theo mt th t no . Nh vy ta cn mt mng HEAD mt chiu c n phn t biu din cho th c n nh. HEAD[i] l con tr tr ti danh sch cc nh k vi nh i. V d th Hnh 1a c biu din nh sau: Mng HEAD
1 2 3 4 2 4 2 3 * * * 3 *

TRNG CAO NG CNG NGH THNG TIN

94

Cu trc d liu v Gii thut

III. CC PHP DUYT TH (TRAVERSALS OF GRAPH)


Trong khi gii nhiu bi ton c m hnh ho bng th, ta cn i qua cc nh v cc cung ca th mt cch c h thng. Vic i qua cc nh ca th mt cch c h thng nh vy gi l duyt th. C hai php duyt th ph bin l duyt theo chiu su, tng t nh duyt tin t mt cy, v duyt theo chiu rng, tng t nh php duyt cy theo mc.

III.1. Duyt theo chiu su (depth-first search)


Gi s ta c th G=(V,E) vi cc nh ban u c nh du l cha duyt (unvisited). T mt nh v no ta bt u duyt nh sau: nh du v duyt, vi mi nh w cha duyt k vi v, ta thc hin qui qu trnh trn cho w. S d cch duyt ny c tn l duyt theo chiu su v n s duyt theo mt hng no su nht c th c. Gii thut duyt theo chiu su mt th c th c trnh by nh sau, trong ta dng mt mng mark c n phn t nh du cc nh ca th l duyt hay cha. //nh du cha duyt tt c cc nh for (v =1; v <=n; v++) mark[v-1]=unvisited; //duyt theo chiu su t nh nh s 1 for (v = 1; v<=n; v++) if (mark[v-1] == unvisited) dfs(v); //duyt theo chiu su nh v Th tc dfs trong gii thut trn c th c vit dng qui nh sau: void dfs(vertex v) // v [1..n] { vertex w; mark[v-1]=visited; for (mi nh w l nh k vi v) if (mark[w-1] == unvisited) dfs(w); }

V d: Duyt theo chiu su th trong hnh 6.3. Gi s ta bt u duyt t nh A, tc l dfs(A). Gii thut s nh du l A c duyt, ri chn nh u tin trong danh sch cc nh k vi A, l G. Tip tc duyt nh G, G c hai nh k vi n l B v C, theo th t th nh k tip c duyt l nh B. B c mt nh k l A, nhng A c duyt nn php duyt dfs(B) hon tt. By gi gii thut s tip tc vi nh k vi G m cn cha duyt l C. C khng c nh k nn php duyt dfs(C) kt thc vy dfs(A) cng kt thc. Cn li 3 nh cha c duyt l D,E,F v theo th t th D c duyt, k n l F. Php duyt
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

95

dfs(D) kt thc v cn mt nh E cha c duyt. Tip tc duyt E v kt thc. Nu ta in cc nh ca th trn theo th t c duyt ta s c danh sch sau: AGBCDFE. V d duyt theo chiu su th hnh 6.4 bt u t nh A: Duyt A, A c cc nh k l B,C,D; theo th t th B c duyt. B c 1 nh k cha duyt l F, nn F c duyt. F c cc nh k cha duyt l D,G; theo th t th ta duyt D. D c cc nh k cha duyt l C,E,G; theo th t th C c duyt. Cc nh k vi C u c duyt nn gii thut c tip tc duyt E. E c mt nh k cha duyt l G, vy ta duyt G. Lc ny tt c cc nt u c duyt nn th c duyt xong. Vy th t cc nh c duyt l ABFDCEG.

III.2. Duyt theo chiu rng (breadth-first search)


Gi s ta c th G vi cc nh ban u c nh du l cha duyt (unvisited). T mt nh v no ta bt u duyt nh sau: nh du v c duyt, k n l duyt tt c cc nh k vi v. Khi ta duyt mt nh v ri n nh w th cc nh k ca v c duyt trc cc nh k ca w, v vy ta dng mt hng lu tr cc nt theo th t c duyt c th duyt cc nh k vi chng. Ta cng dng mng mt chiu mark nh du mt nt l duyt hay cha, tng t nh duyt theo chiu su. Gii thut duyt theo chiu rng c vit nh sau: //nh du cha duyt tt c cc nh for (v = 1; v<= n; v++) mark[v-1] = unvisited; //n l s nh ca th //duyt theo chiu rng t nh nh s 1 for (v = 1; v<=n; v++) if (mark[v-1] == unvisited) bfs(v); Th tc bfs c vit nh sau: void bfs(vertex v) // v [1..n] { QUEUE of vertex Q; vertex x,y; mark[v-1] = visited; ENQUEUE(v,Q); while !(EMPTY_QUEUE(Q)) { x = FRONT(Q); DEQUEUE(Q); for (mi nh y k vi x) if (mark[y-1] == unvisited) {
TRNG CAO NG CNG NGH THNG TIN

96

Cu trc d liu v Gii thut

mark[y-1] = visited; {duyt y} ENQUEUE(y,Q); } } } V d duyt theo chiu rng th hnh 6.3. Gi s bt u duyt t A. A ch c mt nh k G, nn ta duyt G. K n duyt tt c cc nh k vi G; l B,C. Sau duyt tt c cc nh k vi B, C theo th t . Cc nh k vi B, C u c duyt, nn ta tip tc duyt cc nh cha c duyt. Cc nh cha c duyt l D, E, F. Duyt D, k n l F v cui cng l E. Vy th t cc nh c duyt l: AGBCDFE. V d duyt theo chiu rng th hnh 6.4. Gi s bt u duyt t A. Duyt A, k n duyt tt c cc nh k vi A; l B, C, D theo th t . K tip l duyt cc nh k ca B, C, D theo th t . Vy cc nt c duyt tip theo l F, E,G. C th minh ho hot ng ca hng trong php duyt trn nh sau: Duyt A ngha l nh du visited v a n vo hng:
A

K n duyt tt c cc nh k vi nh u hng m cha c duyt; tc l ta loi A khi hng, duyt B, C, D v a chng vo hng, by gi hng cha cc nh B, C, D.
B C D

K n B c ly ra khi hng v cc nh k vi B m cha c duyt, l F, s c duyt, v F c a vo hng i.


C D F

K n th C c ly ra khi hng v cc nh k vi C m cha c duyt s c duyt. Khng c nh no nh vy, nn bc ny khng c thm nh no c duyt.
D F

K n th D c ly ra khi hng v duyt cc nh k cha duyt ca D, tc l E, G c duyt. E, G c a vo hng i.


F E G

Tip tc, F c ly ra khi hng. Khng c nh no k vi F m cha c duyt. Vy khng duyt thm nh no.
E G

Tng t nh F, E ri n G c ly ra khi hng. Hng tr thnh rng v gii thut kt thc.

IV. MT S BI TON TRN TH


Phn ny s gii thiu vi cc bn mt s bi ton quan trng trn th, nh bi ton tm ng i ngn nht, bi ton tm bao ng chuyn tip, cy bao trm ti thiu... Cc bi ton ny cng vi cc gii thut ca n c trnh by chi tit trong gio trnh v Qui Hoch
http://www.ebook.edu.vn TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

97

ng, v th y ta khng i vo qu chi tit cc gii thut ny. Phn ny ch xem nh l phn nu cc ng dng cng vi gii thut gii quyt cc bi ton nhm gip bn c c th vn dng c cc gii thut vo vic ci t gii cc bi ton nu trn.

IV.1. Bi ton tm ung i ngn nht t mt nh ca th (the single source shorted path problem)
Cho th G vi tp cc nh V v tp cc cnh E ( th c hng hoc v hng). Mi cnh ca th c mt nhn, l mt gi tr khng m, nhn ny cn gi l gi (cost) ca cnh. Cho trc mt nh v xc nh, gi l nh ngun. Vn l tm ng i ngn nht t v n cc nh cn li ca G; tc l cc ng i t v n cc nh cn li vi tng cc gi (cost) ca cc cnh trn ng i l nh nht. Ch rng nu th c hng th ng i ny l ng i c hng. Ta c th gii bi ton ny bng cch xc nh mt tp hp S cha cc nh m khong cch ngn nht t n n nh ngun v bit. Khi u S={v}, sau ti mi bc ta s thm vo S cc nh m khong cch t n n v l ngn nht. Vi gi thit mi cung c mt gi khng m th ta lun lun tm c mt ng i ngn nht nh vy m ch i qua cc nh tn ti trong S. chi tit ho gii thut, gi s G c n nh v nhn trn mi cung c lu trong mng hai chiu C, tc l C[i,j] l gi (c th xem nh di) ca cung (i,j), nu i v j khng ni nhau th C[i,j]=. Ta dng mng 1 chiu D c n phn t lu di ca ng i ngn nht t mi nh ca th n v. Khi u khong cch ny chnh l di cnh (v,i), tc l D[i]=C[v,i]. Ti mi bc ca gii thut th D[i] s c cp nht li lu di ng i ngn nht t nh v ti nh i, ng i ny ch i qua cc nh c trong S. ci t gii thut d dng, ta gi s cc nh ca th c nh s t 1 n n, tc l V={1,..,n} v nh ngun l 1. Di dy l gii thut Dijkstra gii bi ton trn. void Dijkstra() { S = [1]; //Tp hp S ch cha mt nh ngun for (i =2; i<=n; i++) D[i-1] = C[0,i-1]; //khi u cc gi tr cho D for (i=1; i<n; i++) { Ly nh w trong V-S sao cho D[w-1] nh nht; Thm w vo S; for (mi nh u thuc V-S) D[u-1] = min(D[u-1], D[w-1] + C[w-1,u-1]); } } Nu mun lu tr li cc nh trn ng i ngn nht c th xy dng li ng i ny t nh ngun n cc nh khc, ta dng mt mng P. Mng ny s lu P[u]=w vi u l nh "trc" nh w trong ng i. Lc khi u P[u]=1 vi mi u. Gii thut Dijkstra c vit li nh sau: void Dijkstra() { S =[1]; //S ch cha mt nh ngun for(i=2; i<=n; i++)
TRNG CAO NG CNG NGH THNG TIN

98

Cu trc d liu v Gii thut

{ P[i-1] =1; D[i-1] =C[0,i-1]; //khi to gi tr cho P //khi u cc gi tr cho D } for (i=1; i<n; i++) { Ly nh w trong V-S sao cho D[w-1] nh nht; Thm w vo S; for (mi nh u thuc V-S) if (D[w-1] + C[w-1,u-1] < D[u-1]) { D[u-1] =D[w-1] + C[w-1,u-1]; P[u-1] =w; } } } V d: p dng gii thut Dijkstra cho th hnh 6.5

Kt qu khi p dng gii thut Ln lp Khi u 1 2 3 4 S {1} {1,2} {1,2,4} {1,2,3,4} {1,2,3,4,5} W 2 4 3 5 D[2] 10 10 10 10 10 D[3] 60 40 40 40 D[4] 30 30 30 30 30 D[5] 100 100 90 50 50

Mng P c gi tr nh sau:
P 1 2 3 4 5

1
http://www.ebook.edu.vn

3
TRUNG CAO NG CNG NGH THNG TIN

Cu trc d liu v Gii thut

99

T kt qu trn ta c th suy ra rng ng i ngn nht t nh 1 n nh 3 l 1 4 3 c di l 40. ng i ngn nht t 1 n 5 l 1 4 3 5 c di 50.

IV.2. Tm ng i ngn nht gia tt c cc cp nh


Gi s th G c n nh c nh s t 1 n n. Khong cch hay gi gia cc cp nh c cho trong mng C[i,j]. Nu hai nh i,j khng c ni th C[i,j]= . Gii thut Floyd xc nh ng i ngn nht gia hai cp nh bt k bng cch lp k ln, ln lp th k s xc nh khong cch ngn nht gia hai nh i,j theo cng thc: Ak[i,j]=min(Ak-1[i,j], Ak1[i,k]+Ak-1[k,j]). Ta cng dng mng P lu cc nh trn ng i. float A[n,n], C[n,n]; int P[n,n]; void Floyd() { int i,j,k; for (i=1; i<=n; i++) for (j=1; j<=n; j++) { A[i-1,j-1] = C[i-1,j-1]; P[i-1,j-1]=0; } for (i=1; i<=n; i++) A[i-1,i-1]=0; for (k=1; k<=n; k++) for (i=1; i<=n; i++) for (j=1; j<=n; j++) if (A[i-1,k-1] + A[k-1,j-1] < A[i-1,j-1) { A[i-1,j-1] = A[i-1,k-1] + A[k-1,j-1]; P[i-1,j-1] = k; } }

TRNG CAO NG CNG NGH THNG TIN

100

Cu trc d liu v Gii thut

TI LIU THAM KHO


[1] [2] [3] [4] [5] Xun Li, Cu trc d liu v gii thut, NXB Khoa hc v k thut, 1996 Nguyn trung Trc, Cu trc d liu, HBK TpHCM, 1990. N. Wirth, Algorithms + Data structures = Programs, Prentice Hall, 1976. Aho, A. V. , J. E. Hopcroft, J. D. Ullman, Data Structure and Algorihtms, 1983 Mark Allen Weiss, Data Structures and Algorithms Analysis In C, The Benjamin / Cummings Publishing Company, Inc. 1993. [6] R.L. Kruse, C.L. Tondo, B.P. Leung, Data Structures and Program Design in C, Prentice Hall, 1997.

http://www.ebook.edu.vn

TRUNG CAO NG CNG NGH THNG TIN

You might also like