Professional Documents
Culture Documents
BI GING
NGUYN C HIN
A NNG 2007
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
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
CHNG 1
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.
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
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
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.
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(*).
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.
12
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.
14
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
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
16
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)
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
18
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
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.
20
[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
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:
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
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.
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
http://www.ebook.edu.vn
23
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)
24
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.
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
http://www.ebook.edu.vn
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)
26
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
27
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
28
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
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
30
Write(VALUE(p,L)) Return
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
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
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
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
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
a1 L
a2
an
q 1 x
5
p a1 a2 an
6.r
35
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
36
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)
37
Do{ Return
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
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.
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
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
39
40
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
41
Top_pointer 5 4 3 2 1 Khai bo ci t
Phn t th 1 Phn t th 2
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;
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
42
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
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
43
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
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
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
(1)
(2) (2,B,A,C)
(3)
A
(4)
1 1 1
B B A
C A B
(5)
A C C
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
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
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]
[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
47
Q(rear) := 0 Return
48
Func FRONT(Q) If EMPTY_QUEUE(Q) Then Write(Li, Khng xc nh) Else FRONT := Q(A[Q(front)+1]) Return
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
49
50
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 ^.
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
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:
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
52
10 *
http://www.ebook.edu.vn
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
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
(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
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
k 11
56
Cng c th dng 1 mng 1 chiu kiu bn ghi gm (Value, Left, Right) lu tr.
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.
Left
Info
Right
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
57
58
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.
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 )
60
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
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
62
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
http://www.ebook.edu.vn
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).
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
A 9
TRNG CAO NG CNG NGH THNG TIN
64
B 1
F 2
J 4
C 3 D 5 E6
G 7 H 8 10 K L 11
M 12
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
on 2
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.
66
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
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
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
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
69
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
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
70
aj+1 := aj j := j-1
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)
a1 a2 ... Cc kho ak
ak-1
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
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
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.
http://www.ebook.edu.vn
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
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
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
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
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).
76
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
77
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
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
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
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
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.
80
CHNG 5
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).
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.
82
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.
83
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
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
85
p := Right(p) Else
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
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
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
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
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
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.
90
CHNG 6
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
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.
92
j i 0 1 2 3
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
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.
94
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
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.
96
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 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
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
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
{ 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
99
100
http://www.ebook.edu.vn