98
 ĐẠI HC ĐÀ NNG TR ƯỜ NG CAO ĐẲNG CÔNG NGH THÔNG TIN BÀI GING CU TRÚC DỮ  LIU VÀ GII THT  NGUYÃÙ N ÂÆÏ C HIÃØ N ÂAÌ  NÀÔ NG 2007

Bai Giang CTDL GT

Embed Size (px)

Citation preview

  • 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

  • 4 Cu trc d liu v Gii thut

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

    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

  • Cu trc d liu v Gii thut 5

    TRNG 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. BI TON SP XP ................................................................................................................................ 66 II. 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. MT S KHI NIM............................................................................................................................... 90 II. 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

  • 6 Cu trc d liu v Gii thut

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

    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.

  • Cu trc d liu v Gii thut 7

    TRNG CAO NG CNG NGH THNG TIN

    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

  • 8 Cu trc d liu v Gii thut

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

    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.

  • Cu trc d liu v Gii thut 9

    TRNG 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.

  • 10 Cu trc d liu v Gii thut

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

    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

  • Cu trc d liu v Gii thut 11

    TRNG CAO NG CNG NGH THNG TIN

    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

    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.

    Begin

    End.

    a,b

    a>b

    Temp= UCLN(a,b)

    BC = a*b/Temp

    BC

  • 12 Cu trc d liu v Gii thut

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

    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(ab)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 #include //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:");

  • Cu trc d liu v Gii thut 13

    TRNG CAO NG CNG NGH THNG TIN

    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

    Lu : 9 Phn ghi ch v thuyt minh: c t sau du // hoc trong cp du /* ..*/ 9 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:

    Program S1 S2 Sn Return.

  • 14 Cu trc d liu v Gii thut

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

    Cc php ton s hc: +, -, *, /, (lu tha), Div (chia nguyn), Mod (chia ly phn d) Cc k t quan h: >, =, 1 9 bc bi cp du {} 9 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 9 C php 1: If Then Lnh 9 C php 2: If Then Lnh 1 Else Lnh 2 9 C php 3 (lnh c nhiu la chn)

    Case Of : Lnh 1 : Lnh 2 : Lnh n [Else Lnh n+1] EndCase

    Lnh vng lp 9 Vng lp FOR

    For To [Step ] Lnh

    Ch : nu [step ] khng c th hiu bin := bin + 1 n v 9 Vng lp WHILE

    While Do Lnh

    9 Vng Lp DOWHILE Do{ Lnh }While

    9 Ngoi ra dng vng lp, c th s dng t kho break trong vng lp mun dng

    Chng trnh con Dng hm

    Func [(Danh sch tham s hnh thc)] S1 S2

  • Cu trc d liu v Gii thut 15

    TRNG CAO NG CNG NGH THNG TIN

    Sn tn_hm := 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 [(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 : 9 Trng hp l dng hm th phi c lnh: tn_hm := 9 Khi gi hm th tn hm nm bn phi php gn 9 Khi gi chng trnh con: Call 9 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 Cu trc d liu v Gii thut

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

    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

  • Cu trc d liu v Gii thut 17

    TRNG CAO NG CNG NGH THNG TIN

    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

    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

    Thut ton qui ci t nh sau:

    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)

    62 71 80 80 71 62

    DS(0) suy bin,dng

    DS(1234)

    DS(123)

    DS(12)

    DS(1)

    Div 10

    Div 10

    Div 10

    Div 10

    4

    Mod 10

    Mod 10

    Mod 10

    Mod 10

    3

    2

    1

    Mn hnh

  • 18 Cu trc d liu v Gii thut

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

    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.

    Phn tch bi ton:

    Trng hp 1 a: Chuyn thng t A sang C. y l trng hp suy bin Trng hp 2 a: 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

    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.

  • Cu trc d liu v Gii thut 19

    TRNG CAO NG CNG NGH THNG TIN

    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 [If < chp nhn j theo iu kin B> Then] { [nh du s dng j] If Then Else Call Try(i+1)

  • 20 Cu trc d liu v Gii thut

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

    [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

  • Cu trc d liu v Gii thut 21

    TRNG CAO NG CNG NGH THNG TIN

    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:

    =

    =

    ++++=n

    j

    j

    icccccccnT

    2

    1

    17654321 )()( (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 ( ) ( ) ( )( )=

    ++=++=n

    jnccccccccnT

    273217321 1

    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:

    ( ) ( ) ( ) ( ) = =

    ++++=n

    j

    n

    jjccccccccnT

    2 265417321 1

    ( )( ) ( )( ) 2/11 65417321 nnccccncccc ++++= 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).

  • 22 Cu trc d liu v Gii thut

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

    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 K hiu Ghi ch

    1 O(1) phc tp hng

    2 O(lgn) Thut ton tm kim nh phn, cy BST

    3 O(lglgn) Tm c chung ln nht bng EUCLID

    4 O(n) phc tp tuyn tnh, duyt dy

    5 O(nlgn) Sp xp dy tng dn bng QuickSort,HeapSort, dng cy BST

    6 O(n2) Cc phng php c in dng sp xp dy hoc duyt ma trn

    7 O(n3) Nhn 2 ma trn

    8 O(nk) phc tp a thc

    9 O(2n) Bi ton thp H Ni, thp Si Gn

    10 O(kn)

    11 O(n!)

    Ch : lgn hiu l log2n

  • Cu trc d liu v Gii thut 23

    TRNG CAO NG CNG NGH THNG TIN

    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 9 Cc lnh c, ghi, so snh: thi gian thc hin theo tim cn l O(1). 9 Lnh if

    - If (iuKin_T1) Then Thi gian thc hin theo tim cn ca on lnh ny l: T = T1+T2 = O(max(T1, T2))

    - If(iuKin_T0) Then Else Thi gian thc hin tim cn ca on lnh ny l: T = T0+max(T1, T2) = O(max(T0, T1, T2)) 9 Cc lnh tun t: p dng nh l 1. 9 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: 9 Cc vng lp lng nhau: p dng nh l 2.

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

    Ta c c2=c3=c5=c6=c7=O(1)

    c4=

    =

    ==

    1

    1

    1

    165 1),max(

    j

    i

    j

    icc

    c1=

    = === = =

    =

    =+=====n

    j

    n

    j

    n

    j

    n

    j

    n

    j

    n

    j

    j

    i

    nnnnnjjjncccc2

    2

    222 2 2

    1

    17432 2

    )1(12

    )1(1)1()(1),,,max(

    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 Cu trc d liu v Gii thut

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

    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 ; khi n=1 T(n) = 2T(n-1) +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 ; khi n=0 T(n) = T(n-1) +1 ; 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) ; khi n=1 T(n) = 2T(n-1) +1 ; khi n>1 Ta c T(n)=2T(n-1)+1

  • Cu trc d liu v Gii thut 25

    TRNG CAO NG CNG NGH THNG TIN

    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 ; khi n=1 T(n) = 2T(n/2) +n ; 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 Cu trc d liu v Gii thut

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

    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

  • Cu trc d liu v Gii thut 27

    TRNG CAO NG CNG NGH THNG TIN

    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 mng

    Cc khai bo cn thit

    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)

  • 28 Cu trc d liu v Gii thut

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

    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: 9 Trng hp 1: Mng y khng thc hin c 9 Trng hp 2: pLast +1 cng khng thc hin c 9 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 (pL(Last)) or (p

  • Cu trc d liu v Gii thut 29

    TRNG CAO NG CNG NGH THNG TIN

    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

  • 30 Cu trc d liu v Gii thut

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

    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)

  • Cu trc d liu v Gii thut 31

    TRNG CAO NG CNG NGH THNG TIN

    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: 9 Trng th nht cha gi tr lu trong nt 9 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 : 9 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. 9 Con tr c bit Null 9 Danh sch rng L = Null 9 Danh sch lun c ga tr Null bo kt thc danh sch 9 Trng Next ca mi Node ch cha a ch Node sau n 9 Cp pht 1 Node cho con tr p : New(p) 9 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

    Trng hp p tr vo Node khng phi u danh sch

    a1 a2 an Null (ENDLIST) L

    Null L

    p

    q

    xr

    1

    2

    34

    Null L

    p x r 1

    5 3

  • 32 Cu trc d liu v Gii thut

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

    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

    Trng hp p tr vo Node khng phi u danh sch

    Null L

    p

    1

    4

    3

    Null L pq

    2

    4

  • Cu trc d liu v Gii thut 33

    TRNG CAO NG CNG NGH THNG TIN

    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 pNull 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)

  • 34 Cu trc d liu v Gii thut

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

    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.

    Ch : 9 Danh sch rng: L=Null 9 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

    x

    q

    L 2

    3

    1

    a1 a2 anL

    x q 1 p 6.r

    5

    a1 a2 anL

  • Cu trc d liu v Gii thut 35

    TRNG CAO NG CNG NGH THNG TIN

    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 (rL) 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

    L

    p

    1

    4

  • 36 Cu trc d liu v Gii thut

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

    Trng hp p tr vo Node khng phi u danh sch

    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 q := Link(q) C_PREVIOUS := q } Return

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

    L pq 4

  • Cu trc d liu v Gii thut 37

    TRNG CAO NG CNG NGH THNG TIN

    Do{ write(Info(p)) p := Link(p) }while(pL) 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

    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:

    9 Danh sch rng, tc l DL=Null khng thc hin

  • 38 Cu trc d liu v Gii thut

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

    9 Trng hp danh sch khc rng, tc l DLNull, ta phi phn bit hai trng hp b xo khng phi l c tr bi DL

    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.

    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: 9 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

    9 Nu Dlnil, 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

    q r

    DL

    Null

    p

    q r s

    p

  • Cu trc d liu v Gii thut 39

    TRNG CAO NG CNG NGH THNG TIN

    If rNull 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 ).

  • 40 Cu trc d liu v Gii thut

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

    Cc thao tc c bn trn ngn xp:

    9 CREAT_STACK(S): to mt ngn xp S rng 9 TOP(S): tr v gi tr ca phn t ti nh ngn xp. Nu ngn xp rng th hm

    khng xc nh. 9 POP(S): Ly mt phn t ti nh ngn xp. 9 PUSH(x,S): thm mt phn t x vo u ngn xp. 9 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 19 9 4 2 1 0 n Mod 2 1 1 0 0 1

    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.

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

    y Stack

    nh Stack

  • Cu trc d liu v Gii thut 41

    TRNG CAO NG CNG NGH THNG TIN

    Top_pointer5

    Phn t th 1

    4 Phn t th 2

    3

    2

    1 Phn t cui cng

    Khai bo ci t

    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')

  • 42 Cu trc d liu v Gii thut

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

    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:

    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)

    Null Top point

  • Cu trc d liu v Gii thut 43

    TRNG CAO NG CNG NGH THNG TIN

    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(1,A,B,C) A->B Move(2,A,C,B) Move(1,A,C,B) A->C

  • 44 Cu trc d liu v Gii thut

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

    Move(1,B,C,A) B->C Move(3,A,B,C) Move(1,A,B,C) A->B Move(1,C,A,B) C->A Move(2,C,B,A) Move(1,C,B,A) C->B Move(1,A,B,C) A->B Mc 1 mc 2 mc 3

    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) (2,A,C,B) Qu trnh chuyn a

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

    (4) (5)

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

    3 A B C

    2 A C B1 A B C2 B A C

    1 A B C1 A C B1 C A B1 A B C2 B A C

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

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

    2 B A C

    1 B C A1 B A C1 A B C

  • Cu trc d liu v Gii thut 45

    TRNG CAO NG CNG NGH THNG TIN

    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:

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

    4 3 2 1 0

    rear fron

    rearfron

    rear

    fron

    rear

    fron fron

    4 3 2 1 A 0

    4 3 2 B 1 A0

    4 3 C 2 B 1 A0

    rear 4 D 3 C 2 B 1 A 0

    fron

    rear 4 D 3 C 2 B 1 -

  • 46 Cu trc d liu v Gii thut

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

    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.

    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

  • Cu trc d liu v Gii thut 47

    TRNG CAO NG CNG NGH THNG TIN

    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

  • 48 Cu trc d liu v Gii thut

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

    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).

    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

    Null

    front rear

  • Cu trc d liu v Gii thut 49

    TRNG CAO NG CNG NGH THNG TIN

    Q(front) := p //trng hp Q rng th thnh Q c 1 phn t Else (Q(rear))(Link) := p Q(rear) := p Return

    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

  • 50 Cu trc d liu v Gii thut

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

    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.

  • Cu trc d liu v Gii thut 51

    TRNG CAO NG CNG NGH THNG TIN

    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 1 2 3 4 5 6 7 8 9 10

    Tn nt (cha ch s nt cha) 0 1 1 2 2 5 5 5 3 3

    nhn 1 2 3 4 5 6 7 8 9 10

  • 52 Cu trc d liu v Gii thut

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

    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)

    1 *

    2 * 3 *

    4 * * * 5 9 * * * 10 * * *

    6 * * * 7 * * * 8 * * *

  • Cu trc d liu v Gii thut 53

    TRNG CAO NG CNG NGH THNG TIN

    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: 9 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 . 9 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 . 9 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

  • 54 Cu trc d liu v Gii thut

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

    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.

    Cn ch ti mt s dng c bit ca cy nh phn

    (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.

    1 1 2 2 3 4 3 4 5 5

  • Cu trc d liu v Gii thut 55

    TRNG CAO NG CNG NGH THNG TIN

    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:

    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:

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

    a d g h i k l o x y z

    1 2 3 4 5 6 7 8 9 10 11 a d g h i k l o x y z 2 4 6 8 9 3 5 7 10 11

    Ch s Value Left

    Right

  • 56 Cu trc d liu v Gii thut

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

    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:

    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

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

    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

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 a d g h i k l o x y z

    Ch s Value

    Left Info Right

    a

    d g

    h i k l

    o x y z

    *

    * * * * * *

    *

    * *

    * *

    T

  • Cu trc d liu v Gii thut 57

    TRNG CAO NG CNG NGH THNG TIN

    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

    {

    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: A B D H I E C F J G

    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);

    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: H D I B E A F J C G

  • 58 Cu trc d liu v Gii thut

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

    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); }

    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: H I D E B J F G C A

    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)

    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 ( )

    ^

    * + - a b c d

  • Cu trc d liu v Gii thut 59

    TRNG CAO NG CNG NGH THNG TIN

    * /

    + -

    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)

    Cy biu din nh sau:

    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 trun