cau truc du lieu va giai thuat

83

Upload: thanh-dat-nguyen

Post on 20-Oct-2015

25 views

Category:

Documents


2 download

DESCRIPTION

Cấu trúc dữ liệu và giải thuật

TRANSCRIPT

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 1 [

    MC LC

    0. CC BC C BN KHI TIN HNH GII CC BI TON TIN HC..................................... 3I. XC NH BI TON..................................................................................................................................3II. TM CU TRC D LIU BIU DIN BI TON..................................................................................3III. TM THUT TON.....................................................................................................................................4IV. LP TRNH..................................................................................................................................................5V. KIM TH ....................................................................................................................................................6VI. TI U CHNG TRNH..........................................................................................................................6

    1. PHN TCH THI GIAN THC HIN GII THUT ...................................................................... 8I. PHC TP TNH TON CA GII THUT.......................................................................................8II. XC NH PHC TP TNH TON CA GII THUT.................................................................8V. PHC TP TNH TON VI TNH TRNG D LIU VO.........................................................10VI. CHI PH THC HIN THUT TON.....................................................................................................11

    2. QUY V GII THUT QUY............................................................................................... 12I. KHI NIM V QUY............................................................................................................................12II. GII THUT QUY ...............................................................................................................................12III. V D V GII THUT QUY............................................................................................................12IV. HIU LC CA QUY.........................................................................................................................15

    3. CU TRC D LIU BIU DIN DANH SCH.......................................................................... 17I. KHI NIM DANH SCH..........................................................................................................................17II. BIU DIN DANH SCH TRONG MY TNH ......................................................................................17

    4. NGN XP V HNG I........................................................................................................... 21I. NGN XP (STACK)...................................................................................................................................21II. HNG I (QUEUE)..................................................................................................................................23

    5. CY (TREE)................................................................................................................................... 27I. NH NGHA................................................................................................................................................27II. CY NH PHN (BINARY TREE)............................................................................................................28III. BIU DIN CY NH PHN....................................................................................................................29IV. PHP DUYT CY NH PHN...............................................................................................................30V. CY K_PHN.............................................................................................................................................32VI. CY TNG QUT....................................................................................................................................32

    6. K PHP TIN T, TRUNG T V HU T.............................................................................. 35I. BIU THC DI DNG CY NH PHN.............................................................................................35II. CC K PHP CHO CNG MT BIU THC......................................................................................35III. CCH TNH GI TR BIU THC.........................................................................................................35IV. CHUYN T DNG TRUNG T SANG DNG HU T ...................................................................38V. XY DNG CY NH PHN BIU DIN BIU THC........................................................................41

    7. SP XP (SORTING).................................................................................................................... 42I. BI TON SP XP....................................................................................................................................42II. THUT TON SP XP KIU CHN (SELECTION SORT)................................................................44III. THUT TON SP XP NI BT (BUBBLE SORT) ..........................................................................44IV. THUT TON SP XP KIU CHN....................................................................................................45V. SHELL SORT...............................................................................................................................................46

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 2 [

    VI. THUT TON SP XP KIU PHN ON (QUICK SORT) ...........................................................47VII. THUT TON SP XP KIU VUN NG (HEAP SORT) ..............................................................49VIII. SP XP BNG PHP M PHN PHI (DISTRIBUTION COUNTING).....................................52IX. TNH N NH CA THUT TON SP XP (STABILITY)............................................................53X. THUT TON SP XP BNG C S (RADIX SORT).......................................................................53XI. THUT TON SP XP TRN (MERGE SORT) .................................................................................57XII. CI T ...................................................................................................................................................59XIII. NHNG NHN XT CUI CNG.......................................................................................................68

    8. TM KIM (SEARCHING).............................................................................................................. 70I. BI TON TM KIM.................................................................................................................................70II. TM KIM TUN T (SEQUENTIAL SEARCH)....................................................................................70III. TM KIM NH PHN (BINARY SEARCH)...........................................................................................70IV. CY NH PHN TM KIM (BINARY SEARCH TREE - BST)...........................................................71V. PHP BM (HASH)....................................................................................................................................74VI. KHO S VI BI TON TM KIM...................................................................................................75VII. CY TM KIM S HC (DIGITAL SEARCH TREE - DST).............................................................75VIII. CY TM KIM C S (RADIX SEARCH TREE - RST) ..................................................................78IX. NHNG NHN XT CUI CNG..........................................................................................................82

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 3 [

    0. CC BC C BN KHI TIN HNH GII CC BI TON TIN HC

    I. XC NH BI TON

    Input Process Output(D liu vo X l Kt qu ra)

    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. Khc vi bi ton thun tu ton hc ch cn xcnh r gi thit v kt lun ch khng cn xc nh yu cu v li gii, i khi nhng bi ton tinhc ng dng trong thc t ch cn tm li gii tt ti mc no , thm ch l ti mc chp nhnc. 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 tvic tnh ton lun lun cho php chp nhn mt sai s no nn cc hm s trong my tnh uc tnh bng phng php xp x ca gii tch sXc nh ng yu cu bi ton l rt quan trng bi n nh hng ti cch thc gii quyt v chtlng ca li gii. Mt bi ton thc t thng cho bi nhng thng tin kh m h v hnh thc, taphi 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. Hytm 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 dngsao 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 vthy c cc thao tc cn phi tin hnh. i vi nhng bi ton n gin, i khi ch cn qua vd l ta c th a v mt bi ton quen thuc gii.

    II. TM CU TRC D LIU BIU DIN BI TON

    Khi gii mt bi ton, ta cn phi nh ngha tp hp d liu biu din tnh trng c th. Vic lachn ny tu thuc vo vn cn gii quyt v nhng thao tc s tin hnh trn d liu vo. Cnhng thut ton ch thch ng vi mt cch t chc d liu nht nh, i vi nhng cch t chcd liu khc th s km hiu qu hoc khng th thc hin c. Chnh v vy nn bc xy dngcu 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 dngi vi mt s bi ton, trc khi t chc d liu ta phi vit mt on chng trnh nh khost xem d liu cn lu tr ln ti mc no.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 4 [

    III. TM THUT TON

    Thut ton l mt h thng cht ch v r rng cc quy tc nhm xc nh mt dy thao tc trn cutrc d liu sao cho: Vi mt b d liu vo, sau mt s hu hn bc thc hin cc thao tc chra, ta t c mc tiu nh.Cc c trng ca thut ton1. Tnh n nh mi bc ca thut ton, cc thao tc phi ht sc r rng, khng gy nn s nhp nhng, lnxn, tu tin, a ngha. Thc hin ng cc bc ca thut ton th vi mt d liu vo, ch cho duynht mt kt qu ra.2. Tnh dngThut ton khng c ri vo qu trnh v hn, phi dng li v cho kt qu sau mt s hu hnbc.3. Tnh ngSau khi thc hin tt c cc bc ca thut ton theo ng qu trnh nh, ta phi c kt qumong mun vi mi b d liu u vo. Kt qu c kim chng bng yu cu bi ton.4. Tnh ph dngThut ton phi d sa i thch ng c vi bt k bi ton no trong mt lp cc bi ton vc th lm vic trn cc d liu khc nhau.5. Tnh kh thia) Kch thc phi nh: V d: Mt thut ton s c tnh hiu qu bng 0 nu lng b nh mn 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 kth 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 0Output: c s chung ln nht ca a v bThut ton s tin hnh c m t nh sau: (Thut ton Euclide)Bc 1 (Input): Nhp a v b: S t nhinBc 2: Nu b 0 th chuyn sang bc 3, nu khng th b qua bc 3, i lm bc 4Bc 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.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 5 [

    Input: a, b

    No

    Yes

    begin

    b > 0 ?

    r := a mod b;a := b;b := r;

    Output a;

    end

    Hnh 1: Lu thut gii 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 tmt 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 giangii hn, ta ch phi thit k tng th cn nhng ch thuc th c vic lp rp vo. Tnh ngn ca nhng m-un thuc ta khng cn phi quan tm na m tp trung gii quyt ccphn khc.

    IV. LP TRNH

    Sau khi c thut ton, ta phi tin hnh lp trnh th hin thut ton . Mun lp trnh t hiuqu cao, cn phi c k thut lp trnh tt. K thut lp trnh tt th hin k nng vit chngtrnh, kh nng g ri v thao tc nhanh. Lp trnh tt khng phi ch cn nm vng ngn ng lptrnh 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 haynhng do ci t vng v nn khi chy li cho kt qu sai hoc tc chm.Thng thng, ta khng nn c th ho ngay ton b chng trnh m nn tin hnh theo phngphp 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 stinh ch cc cng vic, d liu cng c tinh ch dn, c cu trc hn, th hin r hn mi lin hgia cc d liu.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 6 [

    Phng php tinh ch tng bc l mt th hin ca t duy gii quyt vn t trn xung, gipcho ngi lp trnh c c mt nh hng th hin trong phong cch vit chng trnh. Trnhvic m mm, xo i vit li nhiu ln, bin chng trnh thnh t giy nhp.

    V. KIM TH

    1. Chy th v tm liChng trnh l do con ngi vit ra, m l con ngi th ai cng c th nhm ln. Mt chngtrnh vit xong cha chc chy c ngay trn my tnh cho ra kt qu mong mun. K nngtm li, sa li, iu chnh li chng trnh cng l mt k nng quan trng ca ngi lp trnh. Knng 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 testC nhiu chng trnh rt kh kim tra tnh ng n. Nht l khi ta khng bit kt qu ng l thno?. V vy nu nh chng trnh vn chy ra kt qu (khng bit ng sai th no) th vic tm lirt 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 chyth ch cn thay tn file d liu vo l xong, khng cn g li b test t bn phm. Kinh nghim lmcc 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.Lu rng chng trnh chy qua c ht cc test khng c ngha l chng trnh ng. Bic th ta cha xy dng c b test lm cho chng trnh chy sai. V vy nu c th, ta nn tmcch chng minh tnh ng n ca thut ton v chng trnh, iu ny thng rt kh.

    VI. TI U CHNG TRNH

    Mt chng trnh chy ng khng c ngha l vic lp trnh xong, ta phi sa i li mt vichi tit chng trnh c th chy nhanh hn, hiu qu hn. Thng thng, trc khi kim th thta 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 trnhc m lnh ti u thng phc tp v kh kim sot.Ta nn ti u chng trnh theo cc tiu chun sau:

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 7 [

    1. Tnh tin cyChng trnh phi chy ng nh d nh, m t ng mt gii thut ng. Thng thng khi vitchng trnh, ta lun c thi quen kim tra tnh ng n ca cc bc mi khi c th.2. Tnh uyn chuynChng trnh phi d sa i. Bi t c chng trnh no vit ra hon ho ngay c m vn cnphi sa i li. Chng trnh vit d sa i s lm gim bt cng sc ca lp trnh vin khi phttrin chng trnh.3. Tnh trong sngChng trnh vit ra phi d c d hiu, sau mt thi gian di, khi c li cn hiu mnh lm cig?. nu c iu kin th cn c th sa sai (nu pht hin li mi), ci tin hay bin i cchng trnh gii quyt bi ton khc. Tnh trong sng ca chng trnh ph thuc rt nhiu vocng c lp trnh v phong cch lp trnh.4. Tnh hu hiuChng 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. Tuynhin, vic p dng qu nhiu tiu xo c th khin chng trnh tr nn ri rm, kh hiu khi sai. Tiu chun hu hiu nn dng li mc chp nhn c, khng quan trng bng ba tiu chuntrn. 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 nhiucng on v tiu tn kh nhiu cng sc. Ch mt cng on khng hp l s lm tng chi ph vitchng trnh. Ngh ra cch gii quyt vn kh, bin tng thnh hin thc cng khngd cht no.Nhng cu trc d liu v gii thut cp ti trong chuyn ny l nhng kin thc rt phthng, mt ngi hc lp trnh khng sm th mun cng phi bit ti. Ch hy vng rng khi hcxong chuyn ny, qua nhng cu trc d liu v gii thut ht sc mu mc, chng ta rt ra cbi hc kinh nghim: ng bao gi vit chng trnh khi m cha suy xt k v gii thut vnhng d liu cn thao tc, bi nh vy ta d mc phi hai sai lm trm trng: hoc l sai v giithut, hoc l gii thut khng th trin khai ni trn mt cu trc d liu khng ph hp. Ch cnmc mt trong hai li thi th nguy c sp ton b chng trnh l hon ton c th, cng ccha cng b ri, kh nng hu nh chc chn l phi lm li t u(*).

    (*) Tt nhin, cn thn n u th cng c xc sut ri ro nht nh, ta hiu c mc tai hi ca hai li ny hnch n cng nhiu cng tt

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 8 [

    1. PHN TCH THI GIAN THC HIN GII THUT

    I. PHC TP TNH TON CA GII THUT

    Vi mt bi ton khng ch c mt gii thut. Chn mt gii thut a ti kt qu nhanh nht l mti hi thc t. Nh vy cn c mt cn c no ni rng gii thut ny nhanh hn gii thutkia ?.Thi gian thc hin mt gii thut bng chng trnh my tnh ph thuc vo rt nhiu yu t. Mtyu t cn ch nht l kch thc ca d liu a vo. D liu cng ln th thi gian x l cngchm, chng hn nh thi gian sp xp mt dy s phi chu nh hng ca s lng cc s thucdy s . Nu gi n l kch thc d liu a vo th thi gian thc hin ca mt gii thut c thbiu 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 hngti thi gian thc hin. Nhng yu t ny khng ging nhau trn cc loi my, v vy khng th davo chng khi xc nh T(n). Tc l T(n) khng th biu din bng n v thi gian gi, pht, giyc. Tuy nhin, khng phi v th m khng th so snh c cc gii thut v mt tc . Nunh thi gian thc hin mt gii thut l T1(n) = n2 v thi gian thc hin ca mt gii thut khc lT2(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 tamt cch nh gi tng i v tc thc hin ca gii thut khi n kh ln. Cch nh gi thigian thc hin gii thut c lp vi my tnh v cc yu t lin quan ti my tnh nh vy s dnti khi nim gi l phc tp tnh ton ca gii thut.Cho f v g l hai hm xc nh dng vi mi n. Hm f(n) c gi l O(g(n)) nu tn ti mt hngs c > 0 v mt gi tr n0 sao cho:

    f(n) c.g(n) vi n n0Ngha 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) (hay phc tp tnh ton l O(g(n))).

    II. XC NH PHC TP TNH TON CA GII THUT

    Vic xc nh phc tp tnh ton ca mt gii thut bt k c th rt phc tp. Tuy nhin, trongthc t, i vi mt s gii thut ta c th phn tch bng mt s quy tc n gin:1. Quy tc tngNu on chng trnh P1 c thi gian thc hin T1(n) =O(f(n)) v on chng trnh P2 c thigian thc hin l T2(n) = O(g(n)) th thi gian thc hin P1 ri n P2 tip theo s l

    T1(n) + T2(n) = O(max(f(n), g(n)))Chng minh:T1(n) = O(f(n)) nn n1 v c1 T1(n) c1.f(n) vi n n1.T2(n) = O(g(n)) nn n2 v c2 T2(n) c2.g(n) vi n n2.Chn n0 = max(n1, n2) v c = max(c1, c2) ta c:Vi n n0:T1(n) + T2(n) c1.f(n) + c2.g(n) c.f(n) + c.g(n) c.(f(n) + g(n)) 2c.(max(f(n), g(n))).Vy T1(n) + T2(n) = O(max(f(n), g(n))).

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 9 [

    2. Quy tc nhnNu on chng trnh P c thi gian thc hin l T(n) = O(f(n)). Khi , nu thc hin k(n) lnon chng trnh P vi k(n) = O(g(n)) th phc tp tnh ton s l O(g(n).f(n))Chng minh:Thi gian thc hin k(n) ln on chng trnh P s l k(n)T(n). Theo nh ngha: ck 0 v nk k(n) ck(g(n)) vi n nk cT 0 v nT T(n) cT(f(n)) vi n nTVy vi n max(nT, nk) ta c k(n).T(n) cT.ck(g(n).f(n))3. Mt s tnh chtTheo 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 athc, ngi ta thng k hiu l O(nk)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 khiu 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 vokch 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 hma 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 giithut cp O(n2) c thi gian thc hin l 1000n2, cn gii thut cp O(n3) li ch cn thi gian thchin l n3, th vi n < 1000, r rng gii thut O(n3) tt hn gii thut O(n2). Trn y l xt trnphng din tnh ton l thuyt nh ngha gii thut ny "tt" hn gii thut kia, khi chn mtthut ton gii mt bi ton thc t phi c mt s mm do nht nh.f) Cng theo nh ngha v phc tp tnh ton

    Mt thut ton c cp O(1) cng c th vit l O(logn) Mt thut ton c cp O(logn) cng c th vit l O(n) Mt thut ton c cp O(n) cng c th vit l O(n.logn) Mt thut ton c cp O(n.logn) cng c th vit l O(n2) Mt thut ton c cp O(n2) cng c th vit l O(n3) Mt thut ton c cp O(n3) cng c th vit l O(2n)

    Vy phc tp tnh ton ca mt thut ton c nhiu cch k hiu, thng thng ngi ta chncp thp nht c th, tc l chn k php O(f(n)) vi f(n) l mt hm tng chm nht theo n.Di y l mt s hm s hay dng k hiu phc tp tnh ton v bng gi tr ca chng tin theo di s tng ca hm theo i s n.

    log2n n nlog2n n2 n3 2n

    0 1 0 1 1 21 2 2 4 8 42 4 8 16 64 163 8 24 64 512 2564 16 64 256 4096 655365 32 160 1024 32768 2147483648

    V d:Thut ton tnh tng cc s t 1 ti n:

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 10 [

    Nu vit theo s nh sau:Input n;S := 0;for i := 1 to n do S := S + i;Output S;

    Cc on chng trnh cc dng 1, 2 v 4 c phc tp tnh ton l O(1).Vng lp dng 3 lp n ln php gn S := S + i, nn thi gian tnh ton t l thun vi n. Tc l phc tp tnh ton l O(n).Vy phc tp tnh ton ca thut ton trn l O(n).Cn nu vit theo s nh sau:

    Input n;S := n * (n - 1) div 2;Output S;

    Th phc tp tnh ton ca thut ton trn l O(1), thi gian tnh ton khng ph thuc vo n.4. Php ton tch ccDa vo nhng nhn xt nu trn v cc quy tc khi nh gi thi gian thc hin gii thut, tach cn ch n mt php ton m ta gi l php ton tch cc trong mt on chng trnh. lmt php ton trong mt on chng trnh m s ln thc hin khng t hn cc php tonkhc.Xt hai on chng trnh tnh ex bng cng thc gn ng:

    =

    =++++n

    i

    inx

    ix

    nxxxe

    0

    2

    !!...

    !2!11 vi x v n cho trc.

    {Chng trnh 1: Tnh ring tng hng t ri cng li}program Exp1;var i, j, n: Integer; x, p, S: Real;begin Write('x, n = '); ReadLn(x, n); S := 0; for i := 0 to n do begin p := 1; for j := 1 to i do p := p * x / j; S := S + p; end; WriteLn('exp(', x:1:4, ') = ', S:1:4);end.

    {Tnh hng t sau qua hng t trc}program Exp2;var i, n: Integer; x, p, S: Real;begin Write('x, n = '); ReadLn(x, n); S := 1; p := 1; for i := 1 to n do begin p := p * x / i; S := S + p; end; WriteLn('exp(', x:1:4, ') = ', S:1:4);end.

    Ta c th coi php ton tch cc y lp := p * x / j;

    S ln thc hin php ton ny l:0 + 1 + 2 + ... + n = n(n - 1)/2 ln.Vy phc tp tnh ton ca thut ton l O(n2)

    Ta c th coi php ton tch cc y l phpp := p * x / i.

    S ln thc hin php ton ny l n.Vy phc tp tnh ton ca thut ton l O(n).

    V. PHC TP TNH TON VI TNH TRNG D LIU VO

    C nhiu trng hp, thi gian thc hin gii thut khng phi ch ph thuc vo kch thc d lium cn ph thuc vo tnh trng ca d liu na. Chng hn thi gian sp xp mt dy s theoth t tng dn m dy a vo cha c th t s khc vi thi gian sp xp mt dy s sp xpri hoc sp xp theo th t ngc li. Lc ny, khi phn tch thi gian thc hin gii thut ta sphi xt ti trng hp tt nht, trng hp trung bnh v trng hp xu nht. Khi kh khn trong

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 11 [

    vic xc nh phc tp tnh ton trong trng hp trung bnh (bi vic xc nh T(n) trung bnhthng phi dng ti nhng cng c ton phc tp), ngi ta thng ch nh gi phc tp tnhton trong trng hp xu nht.

    VI. CHI PH THC HIN THUT TON

    Khi nim phc tp tnh ton t ra l nh gi chi ph thc hin mt gii thut v mt thigian. Nhng chi ph thc hin gii thut cn c rt nhiu yu t khc na: khng gian b nh phis dng l mt v d. 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. i vi ngi lptrnh th khc, mt thut ton vi phc tp d rt thp cng s l v dng nu nh khng th cit c trn my tnh, chnh v vy khi bt tay ci t mt thut ton, ta phi bit cch t chc dliu mt cch khoa hc, trnh lng ph b nh khng cn thit. C mt quy lut tng i khi tchc d liu: Tit kim c b nh th thi gian thc hin thng s chm hn v ngc li. Bitcn i, dung ho hai yu t l mt k nng cn thit ca ngi lp trnh, m k nng li cht kinh nghim mi c ch khng th hc c qua sch v.

    Bi tp1. Chng minh mt cch cht ch: Ti sao vi P(n) l a thc bc k th mt gii thut cp O(P(n))cng c th coi cp l cp O(nk)2. Xc nh phc tp tnh ton ca nhng gii thut sau bng k php ch O ln:a) on chng trnh tnh tng n s nhp t bn phm

    Sum := 0;for i := 1 to n do begin Write('Nhp s th ', i, ': '); ReadLn(x); Sum := Sum + x; end;

    b) on chng trnh tnh tng hai a thc:P(X) = amxm + am-1xm-1 + ... + a1x + a0 v Q(X) = bnxn + an-1xn-1 + ... + b1x + b0 c a thcR(X) = cpxp + cp-1xp-1 + ... + c1x + c0

    if m < n then p := m else p := n; {p = min(m, n)}for i := 0 to p do c[i] := a[i] + b[i];if p < m then for i := p + 1 to m do c[i] := a[i]else for i := p + 1 to n do c[i] := b[i];while (p > 0) and (c[p] = 0) do p := p - 1;

    b) on chng trnh tnh tch hai a thc:P(X) = amxm + am-1xm-1 + ... + a1x + a0 v Q(X) = bnxn + an-1xn-1 + ... + b1x + b0 c a thcR(X) = cpxp + cp-1xp-1 + ... + c1x + c0

    p := m + n;for i := 0 to p do c[i] := 0;for i := 0 to m do for j := 0 to n do c[i + j] := c[i + j] + a[i] * b[j];

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 12 [

    2. QUY V GII THUT QUY

    I. KHI NIM V QUY

    Ta ni mt i tng l quy nu n c nh ngha qua chnh n hoc mt i tng khc cngdng vi chnh n bng quy np.V d: t hai chic gng cu i din nhau. Trong chic gng th nht cha hnh chic gngth hai. Chic gng th hai li cha hnh chic gng th nht nn tt nhin n cha li hnh nhca chnh n trong chic gng th nht... mt gc nhn hp l, ta c th thy mt dy nh vhn 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 truynhnh, trn mn hnh ca my ny li c chnh hnh nh ca pht thanh vin ngi bn my vtuyn 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 phnt x S, khi S = S\{x} + 1. y l phng php nh ngha tp cc s t nhin.II. GII THUT QUY

    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. Minghe th c v hi l nhng im mu cht cn lu l: P' tuy c dng ging nh P, nhng theomt ngha no , n phi "nh" hn P, d gii hn P v vic gii n khng cn dng n P.Trong Pascal, ta thy nhiu v d ca cc hm v th tc c cha li gi quy ti chnh n, bygi, ta tm tt li cc php quy trc tip v tng h c vit nh th no:nh ngha mt hm quy hay th tc quy gm hai phn: Phn neo (anchor): 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 biton 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 titnh hu hn dng ca li gii.

    III. V D V GII THUT QUY

    1. Hm tnh giai thafunction Factorial(n: Integer): Integer; {Nhn vo s t nhin n v tr v n!}begin if n = 0 then Factorial := 1 {Phn neo} else Factorial := n * Factorial(n - 1); {Phn quy}end; y, phn neo nh ngha kt qu hm ti n = 0, cn phn quy (ng vi n > 0) s nh nghakt qu hm qua gi tr ca n v giai tha ca n - 1.V d: Dng hm ny tnh 3!, trc ht n phi i tnh 2! bi 3! c tnh bng tch ca 3 * 2!.Tng t tnh 2!, n li i tnh 1! bi 2! c tnh bng 2 * 1!. p dng bc quy np ny thmmt ln na, 1! = 1 * 0!, v ta t ti trng hp ca phn neo, n y t gi tr 1 ca 0!, n tnh

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 13 [

    c 1! = 1*1 = 1; t gi tr ca 1! n tnh c 2!; t gi tr ca 2! n tnh c 3!; cui cng chokt qu l 6:3! = 3 * 2!

    2! = 2 * 1!

    1! = 1 * 0!

    0! = 1

    2. Dy s FibonacciDy s Fibonacci bt ngun t bi ton c v vic sinh sn ca cc cp th. Bi ton t ra nh sau:1) Cc con th khng bao gi cht2) Hai thng sau khi ra i, mi cp th mi s sinh ra mt cp th con (mt c, mt ci)3) Khi sinh con ri th c mi thng tip theo chng li sinh c mt cp con miGi s t u thng 1 c mt cp mi ra i th n gia thng th n s c bao nhiu cp.V d, n = 5, ta thy:Gia thng th 1: 1 cp (ab) (cp ban u)Gia thng th 2: 1 cp (ab) (cp ban u vn cha )Gia thng th 3: 2 cp (AB)(cd) (cp ban u ra thm 1 cp con)Gia thng th 4: 3 cp (AB)(cd)(ef) (cp ban u tip tc )Gia thng th 5: 5 cp (AB)(CD)(ef)(gh)(ik) (c cp (AB) v (CD) cng )By gi, ta xt ti vic tnh s cp th thng th n: F(n)Nu mi cp th thng th n - 1 u sinh ra mt cp th con th s cp th thng th n s l:

    F(n) = 2 * F(n - 1)Nhng vn khng phi nh vy, trong cc cp th thng th n - 1, ch c nhng cp th c thng th n - 2 mi sinh con thng th n c thi. Do F(n) = F(n - 1) + F(n - 2) (= s c +s sinh ra). Vy c th tnh c F(n) theo cng thc sau: F(n) = 1 nu n 2 F(n) = F(n - 1) + F(n - 2) nu n > 2function F(n: Integer): Integer; {Tnh s cp th thng th n}begin if n 2 then F := 1 {Phn neo} else F := F(n - 1) + F(n - 2); {Phn quy}end;

    3. Gi thuyt ca CollatzCollatz a ra gi thuyt rng: vi mt s nguyn dng X, nu X chn th ta gn X := X div 2; nuX l th ta gn X := X * 3 + 1. Th sau mt s hu hn bc, ta s c X = 1.V du: X = 10, cc bc tin hnh nh sau:1. X = 10 (chn) X := 10 div 2; (X := 5)2. X = 5 (l); X := 5 * 3 + 1; (X := 16)3. X = 16 (chn) X := 16 div 2; (X := 8)4. X = 8 (chn) X := 8 div 2; (X := 4)5. X = 4 (chn) X := 4 div 2; (X := 2)6. X = 2 (chn) X := 2 div 2; (X := 1)C cho gi thuyt Collatz l ng n, vn t ra l: Cho trc s 1 cng vi hai php ton * 2v div 3, hy s dng mt cch hp l hai php ton bin s 1 thnh mt gi tr nguyn dngX cho trc.V d: X = 10 ta c 1 * 2 * 2 * 2 * 2 div 3 * 2 = 10.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 14 [

    D thy rng li gii ca bi ton gn nh th t ngc ca php bin i Collatz: biu din sX > 1 bng mt biu thc bt u bng s 1 v hai php ton "* 2", "div 3". Ta chia hai trng hp: Nu X chn, th ta tm cch biu din s X div 2 v vit thm php ton * 2 vo cui Nu X l, th ta tm cch biu din s X * 3 + 1 v vit thm php ton div 3 vo cuiprocedure Solve(X: Integer); {In ra cch biu din s X}begin if X = 1 then Write(X) {Phn neo} else {Phn quy} if X mod 2 = 0 then {X chn} begin Solve(X div 2); {Tm cch biu din s X div 2} Write(' * 2'); {Sau vit thm php ton * 2} end else {X l} begin Solve(X * 3 + 1); {Tm cch biu din s X * 3 + 1} Write(' div 3'); {Sau vit thm php ton div 3} end;end;Trn y l cch vit quy trc tip, cn c mt cch vit quy tng h nh sau:procedure Solve(X: Integer); forward; {Th tc tm cch biu din s X: Khai bo trc, c t sau}

    procedure SolveOdd(X: Integer); {Th tc tm cch biu din s X > 1 trong trng hp X l}begin Solve(X * 3 + 1); Write(' div 3');end;

    procedure SolveEven(X: Integer); {Th tc tm cch biu din s X trong trng hp X chn}begin Solve(X div 2); Write(' * 2');end;

    procedure Solve(X: Integer); {Phn c t ca th tc Solve khai bo trc trn}begin if X = 1 then Write(X) else if X mod 2 = 1 then SolveOdd(X) else SolveEven(X);end;Trong c hai cch vit, tm biu din s X theo yu cu ch cn gi Solve(X) l xong. Tuy nhintrong cch vit quy trc tip, th tc Solve c li gi ti chnh n, cn trong cch vit quytng h, th tc Solve cha li gi ti th tc SolveOdd v SolveEven, hai th tc ny li chatrong n li gi ngc v th tc Solve.i vi nhng bi ton nu trn, vic thit k cc gii thut quy tng ng kh thun li v chai u thuc dng tnh gi tr hm m nh ngha quy np ca hm c xc nh d dng.Nhng khng phi lc no php gii quy cng c th nhn nhn v thit k d dng nh vy. Thth vn g cn lu tm trong php gii quy?. C th tm thy cu tr li qua vic gii p cccu hi sau:1. C th nh ngha c bi ton di dng phi hp ca nhng bi ton cng loi nhng nh hnhay khng ? Khi nim "nh hn" l th no ?2. Trng hp c bit no ca bi ton s c coi l trng hp tm thng v c th gii ngayc a vo phn neo ca php gii quy

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 15 [

    4. Bi ton Thp H Niy l mt bi ton mang tnh cht mt tr chi, ni dung nh sau: C n a ng knh hon tonphn bit, t chng ln nhau, cc a c xp theo th t gim dn ca ng knh tnh t diln, a to nht c t st t. C ba v tr c th t cc a nh s 1, 2, 3. Chng a ban uc t v tr 1:

    1 2 3

    Hnh 2: Thp H NiNgi ta mun chuyn c chng a t v tr 1 sang v tr 2, theo nhng iu kin: Khi di chuyn mt a, phi t n vo mt trong ba v tr cho Mi ln ch c th chuyn mt a v phi l a trn cng Ti mt v tr, a no mi chuyn n s phi t ln trn cng a ln hn khng bao gi c php t ln trn a nh hn (hay ni cch khc: mt a ch

    c t trn mt t hoc t trn mt a ln hn)Trong trng hp c 2 a, cch lm c th m t nh sau:Chuyn a nh sang v tr 3, a ln sang v tr 2 ri chuyn a nh t v tr 3 sang v tr 2.Nhng ngi mi bt u c th gii quyt bi ton mt cch d dng khi s a l t, nhng h sgp rt nhiu kh khn khi s cc a nhiu hn. Tuy nhin, vi t duy quy np ton hc v mtmy tnh th cng vic tr nn kh d dng:C n a. Nu n = 1 th ta chuyn a duy nht t v tr 1 sang v tr 2 l xong. Gi s rng ta c phng php chuyn c n - 1 a t v tr 1 sang v tr 2, th cch chuyn n -

    1 a t v tr x sang v tr y (1 x, y 3) cng tng t. Gi s rng ta c phng php chuyn c n - 1 a gia hai v tr bt k. chuyn n a t

    v tr x sang v tr y, ta gi v tr cn li l z (=6 - x - y). Coi a to nht l ... mt t, chuyn n -1 a cn li t v tr x sang v tr z, sau chuyn a to nht sang v tr y v cui cng licoi a to nht l mt t, chuyn n - 1 a cn li ang v tr z sang v tr y chng ln a tonht .

    Cch lm c th hin trong th tc quy di y:procedure Move(n, x, y: Integer); {Th tc chuyn n a t v tr x sang v tr y}begin if n = 1 then WriteLn('Chuyn 1 a t ', x, ' sang ', y) else { chuyn n > 1 a t v tr x sang v tr y, ta chia lm 3 cng on} begin Move(n - 1, x, 6 - x - y); {Chuyn n - 1 a t x sang v tr cn li} Move(1, x, y); {Chuyn a to nht t x sang y} Move(n - 1, 6 - x - y, y); {Chuyn n - 1 a t v tr cn li sang v tr y} end;end;Chng trnh chnh rt n gin, ch gm c 2 vic: Nhp vo s n v gi Move(n, 1, 2).

    IV. HIU LC CA QUY

    Qua cc v d trn, ta c th thy quy l mt cng c mnh gii cc bi ton. C nhng biton m bn cnh gii thut quy vn c nhng gii thut lp kh n gin v hu hiu. Chng

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 16 [

    hn bi ton tnh giai tha hay tnh s Fibonacci. 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 trongmt s trng hp chng trnh quy hot ng nhanh hn chng trnh vit khng c quy.Gii thut cho bi Thp H Ni v thut ton sp xp kiu phn on (Quick Sort) m ta s ni titrong cc bi sau l nhng v d.C mt mi quan h khng kht gia quy v quy np ton hc. Cch gii quy cho mt bi tonda trn vic nh r li gii cho trng hp suy bin (neo) ri thit k lm sao li gii ca biton c suy ra t li gii ca bi ton nh hn cng loi nh th. Tng t nh vy, quy np tonhc 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) vsau 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 tnhcht c lin quan ti gii thut quy. Chng hn: Chng minh s php chuyn a gii bi tonThp 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 trongtrng hp ny n cn (2n-1 - 1) + 1 + (2n-1 - 1) = 2n - 1 php chuyn a. Tnh cht c chngminh 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 nhvy khng c ngha l ta b tay trc mt bi ton mang tnh quy. Mi gii thut quy u ccch thay th bng mt gii thut khng quy (kh quy), c th ni c nh vy bi tt c ccchng trnh con quy s u c trnh dch chuyn thnh nhng m lnh khng quy trckhi 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 rc ch xp chng ca cc th tc trong mt dy chuyn gi quy l c th lm c. Nhng munkh quy mt cch tinh t th phi tu thuc vo tng bi ton m kh quy cho kho. Khngphi tm u xa, nhng k thut gii cng thc truy hi bng quy hoch ng l v d cho thy tnhngh thut trong nhng cch tip cn bi ton mang bn cht quy tm ra mt gii thut khng quy y hiu qu.Bi tp1. Vit mt hm quy tnh c s chung ln nht ca hai s t nhin a, b khng ng thi bng 0,ch r u l phn neo, u l phn quy.2. Vit mt hm quy tnh knC theo cng thc truy hi sau:

    10 == nnn CC

    Vi 0 < k < n: knkn

    kn CCC 1

    11

    +=

    Chng minh rng hm cho ra ng gi tr )!(!

    !knk

    nCkn

    = .

    3. Nu r cc bc thc hin ca gii thut cho bi Thp H Ni trong trng hp n = 3.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 17 [

    3. CU TRC D LIU BIU DIN DANH SCH

    I. KHI NIM DANH SCH

    Danh sch l mt tp sp th t cc phn t cng mt kiu. i vi danh sch, ngi ta c mt sthao tc: Tm mt phn t trong danh sch, chn mt phn t vo danh sch, xo mt phn t khidanh sch, sp xp li cc phn t trong danh sch theo mt trt t no v.v...

    II. BIU DIN DANH SCH TRONG MY TNH

    Vic ci t mt danh sch trong my tnh tc l tm mt cu trc d liu c th m my tnh hiuc lu cc phn t ca danh sch ng thi vit cc on chng trnh con m t cc thao tccn thit i vi danh sch.1. Ci t bng mng mt chiuKhi ci t danh sch bng mt mng, th c mt bin nguyn n lu s phn t hin c trong danhsch. Nu mng c nh s bt u t 1 th cc phn t trong danh sch c ct gi trong mngbng cc phn t c nh s t 1 ti n.Chn phn t vo mng:Mng ban u:

    A B ... G H I ... Z1 2 ... p - 1 p p + 1 n

    Nu mun chn mt phn t V vo mng ti v tr p, ta phi: Dn tt c cc phn t t v tr p ti ti v tr n v sau mt v tr:

    A B ... G H I ... Z1 2 ... p - 1 p + 1 p + 2 n + 1

    Sau t gi tr V vo v tr p:A B ... G V H I ... Z1 2 ... p - 1 p p + 1 p + 2 n + 1

    Tng n ln 1Xo phn t khi mngMng ban u:

    A B ... G H I ... Z1 2 ... p - 1 p p + 1 n

    Mun xo phn t th p ca mng, ta phi: Dn tt c cc phn t t v tr p + 1 ti v tr n ln trc mt v tr:

    A B ... G I ... Z1 2 ... p - 1 p n - 1

    Gim n i 12. Ci t bng danh sch ni nDanh 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.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 18 [

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

    Value 1 Value 2 Value n-1 Value n...

    ...

    Head

    Chn phn t vo danh sch ni n:Danh sch ban u:

    A G H...

    ...

    Head

    I Z...

    ...

    q p

    Mun chn thm mt nt cha gi tr V vo v tr ca nt p, ta phi: To ra mt nt mi NewNode cha gi tr V:

    V

    Tm nt q l nt ng trc nt p trong danh sch (nt c lin kt ti p). Nu tm thy th chnh li lin kt: q lin kt ti NewNode, NewNode lin kt ti p

    A G H...

    ...

    Head

    I Z...

    ...

    q p

    V

    Nu khng c nt ng trc nt p trong danh sch th tc l p = Head, ta chnh li lin kt:NewNode lin kt ti Head (c) v t li Head = NewNode

    Xo phn t khi danh sch ni n:Danh sch ban u:

    A G H...

    ...

    Head

    I Z...

    ...

    q p

    Mun hu nt p khi danh sch ni n, ta phi: Tm nt q l nt ng lin trc nt p trong danh sch (nt c lin kt ti p)

    Nu tm thy th chnh li lin kt: q lin kt thng ti nt lin sau p, khi qu trnh duytdanh sch bt u t Head khi duyt ti q s nhy qua khng duyt p na, trn thc t khi cit bng cc bin ng v con tr, ta nn c thao tc gii phng b nh cp cho nt p

    A G H...

    ...

    Head

    I Z...

    ...

    q p

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 19 [

    Nu khng c nt ng trc nt p trong danh sch th tc l p = Head, ta ch vic t liHead bng nt ng k tip Head (c) trong danh sch. Sau c th gii phng b nh cpcho nt p (Head c)

    3. Ci t bng danh sch ni kpDanh sch ni kp gm cc nt c ni vi nhau theo hai chiu. Mi nt l mt bn ghi (record)gm ba trng: Trng th nht cha gi tr lu trong nt Trng th hai (Next) cha lin kt (con tr) ti nt k tip, tc l cha mt thng tin bit

    nt k tip nt l nt no, trong trng hp l nt cui cng (khng c nt k tip), trnglin kt ny c gn mt gi tr c bit.

    Trng th ba (Prev) cha lin kt (con tr) ti nt lin trc, tc l cha mt thng tin bit nt ng trc nt trong danh sch l nt no, trong trng hp l nt u tin (khngc nt lin trc) trng ny c gn mt gi tr c bit.

    Khc vi danh sch ni n, danh sch ni kp c hai cht: Nt u tin trong danh sch c gil First, nt cui cng trong danh sch c gi l Last. duyt danh sch ni kp, ta c hai cch:Hoc bt u t First, da vo lin kt Next i sang nt k tip, n khi gp gi tr c bit(duyt qua nt cui) th dng li. Hoc bt u t Last, da vo lin kt Prev i sang nt lintrc, n khi gp gi tr c bit (duyt qua nt u) th dng li

    Value 1 Value 2 ...

    ...

    First

    Value n-1 Value n

    Last

    Vic chn / xo vo danh sch ni kp cng n gin ch l k thut chnh li cc mi lin kt giacc nt cho hp l, ta coi nh bi tp.4. Ci t bng danh sch ni vng mt hngTrong danh sch ni n, phn t cui cng trong danh sch c trng lin kt c gn mt gi trc bit (thng s dng nht l gi tr nil). Nu ta cho trng lin kt ca phn t cui cng trthng v phn t u tin ca danh sch th ta s c mt kiu danh sch mi gi l danh sch nivng mt hng.

    A G H...

    ...

    Head

    I Z...

    ...

    q p

    i vi danh sch ni vng, ta ch cn bit mt nt bt k ca danh sch l ta c th duyt c htcc nt trong danh sch bng cch i theo hng ca cc lin kt. Chnh v l do ny, khi chn xovo danh sch ni vng, ta khng phi x l cc trng hp ring khi chn xo ti v tr ca cht5. Ci t bng danh sch ni vng hai hngDanh sch ni vng mt hng ch cho ta duyt cc nt ca danh sch theo mt chiu, nu ci tbng danh sch ni vng hai hng th ta c th duyt cc nt ca danh sch c theo chiu ngc lina. Danh sch ni vng hai hng c th to thnh t danh sch ni kp nu ta cho trng Prevca nt First tr thng ti nt Last cn trng Next ca nt Last th tr thng v nt First.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 20 [

    Value 1

    Value 2

    ...

    ...

    Value n-1

    Value n

    Bi tp1. Lp chng trnh qun l danh sch hc sinh, tu chn loi danh sch cho ph hp, chng trnhc nhng chc nng sau: (H s mt hc sinh gi s c: Tn, lp, s in thoi, im TB ...) Cho php nhp danh sch hc sinh t bn phm hay t file. Cho php in ra danh sch hc sinh gm c tn v xp loi Cho php in ra danh sch hc sinh gm cc thng tin y Cho php nhp vo t bn phm mt tn hc sinh v mt tn lp, tm xem c hc sinh c tn

    nhp vo trong lp khng ?. Nu c th in ra s in thoi ca hc sinh Cho php vo mt h s hc sinh mi t bn phm, b sung hc sinh vo danh sch hc sinh,

    in ra danh sch mi. Cho php nhp vo t bn phm tn mt lp, loi b tt c cc hc sinh ca lp khi danh

    sch, in ra danh sch mi. C chc nng sp xp danh sch hc sinh theo th t gim dn ca im trung bnh Cho php nhp vo h s mt hc sinh mi t bn phm, chn hc sinh vo danh sch m

    khng lm thay i th t sp xp, in ra danh sch mi. Cho php lu tr li trn a danh sch hc sinh khi thay i.2. C n ngi nh s t 1 ti n ngi quanh mt vng trn (n 10000), cng chi mt tr chi:Mt ngi no m 1, ngi k tip, theo chiu kim ng h m 2... c nh vy cho ti ngim n mt s nguyn t th phi ra khi vng trn, ngi k tip li m bt u t 1:Hy lp chng trnha) Nhp vo 2 s n v S t bn phmb) Cho bit nu ngi th nht l ngi m 1 th ngi cn li cui cng trong vng trn l ngi

    th myc) Cho bit nu ngi cn li cui cng trong vng trn l ngi th k th ngi m 1 l ngi

    no?.d) Gii quyt hai yu cu trn trong trng hp: u tin tr chi c m theo chiu kim ng

    h, khi c mt ngi b ra khi cuc chi th vn l ngi k tip m 1 nhng qu trnh mngc li (tc l ngc chiu kim ng h)

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 21 [

    4. NGN XP V HNG I

    I. NGN XP (STACK)

    Ngn xp l mt kiu danh sch c trang b hai php ton b sung mt phn t vo cui danhsch v loi b mt phn t cng cui danh sch.C th hnh dung ngn xp nh hnh nh mt chng a, a no c t vo chng sau cng snm trn tt c cc a khc v s c ly ra u tin. V nguyn tc"vo sau ra trc" , Stackcn c tn gi l danh sch kiu LIFO (Last In First Out) v v tr cui danh sch c gi l nh(Top) ca Stack.1. M t Stack bng mngKhi m t Stack bng mng: Vic b sung mt phn t vo Stack tng ng vi vic thm mt phn t vo cui mng. Vic loi b mt phn t khi Stack tng ng vi vic loi b mt phn t cui mng. Stack b trn khi b sung vo mng y Stack l rng khi s phn t thc s ang cha trong mng = 0.program StackByArray;const max = 10000;var Stack: array[1..max] of Integer; Last: Integer;

    procedure StackInit; {Khi to Stack rng}begin Last := 0;end;

    procedure Push(V: Integer); {y mt gi tr V vo Stack}begin if Last = max then WriteLn('Stack is full') {Nu Stack y th khng y c thm vo na} else begin Inc(Last); Stack[Last] := V; {Nu khng th thm mt phn t vo cui mng} end;end;

    function Pop: Integer; {Ly mt gi tr ra khi Stack, tr v trong kt qu hm}begin if Last = 0 then WriteLn('Stack is empty') {Stack ang rng th khng ly c} else begin Pop := Stack[Last]; Dec(Last); {Ly phn t cui ra khi mng} end;end;

    begin StackInit; ;end.Khi ci t bng mng, tuy cc thao tc i vi Stack vit ht sc n gin nhng y ta vn chiathnh cc chng trnh con, mi chng trnh con m t mt thao tc, t v sau, ta ch cnbit rng chng trnh ca ta c mt cu trc Stack, cn ta m phng c th nh th no th khng

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 22 [

    cn phi quan tm na, v khi ci t Stack bng cc cu trc d liu khc, ch cn sa li cc thtc StackInit, Push v Pop m thi.2. M t Stack bng danh sch ni n kiu LIFOKhi ci t Stack bng danh sch ni n kiu LIFO, th Stack b trn khi vng khng gian nhdng cho cc bin ng khng cn thm mt phn t mi. Tuy nhin, vic kim tra iu nyrt kh bi n ph thuc vo my tnh v ngn ng lp trnh. V d nh i vi Turbo Pascal, khiHeap cn trng 80 Bytes th cng ch ch cho 10 bin, mi bin 6 Bytes m thi. Mt khc,khng gian b nh dng cho cc bin ng thng rt ln nn ci t di y ta b qua vic kimtra Stack trn.

    V1 V2 Vn...

    ...

    Last

    Vn-1

    program StackByLinkedList;type PNode = ^TNode; {Con tr ti mt nt ca danh sch} TNode = record {Cu trc mt nt ca danh sch} Value: Integer; Link: PNode; end;var Last: PNode; {Con tr nh Stack}

    procedure StackInit; {Khi to Stack rng}begin Last := nil;end;

    procedure Push(V: Integer); {y gi tr V vo Stack thm nt mi cha V v ni nt vo danh sch}var P: PNode;begin New(P); P^.Value := V; {To ra mt nt mi} P^.Link := Last; Last := P; {Mc nt vo danh sch}end;

    function Pop: Integer; {Ly mt gi tr ra khi Stack, tr v trong kt qu hm}var P: PNode;begin if Last = nil then WriteLn('Stack is empty') else begin Pop := Last^.Value; {Gn kt qu hm} P := Last^.Link; {Gi li nt tip theo last ^(nt c y vo danh sch trc nt Last^)} Dispose(Last); Last := P; {Gii phng b nh cp cho Last ,^ cp nht li Last mi} end;end;

    begin StackInit; end.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 23 [

    II. HNG I (QUEUE)

    Hng i l mt kiu danh sch c trang b hai php ton b sung mt phn t vo cui danhsch (Rear) v loi b mt phn t u danh sch (Front).C th hnh dung hng i nh mt on ngi xp hng mua v: Ngi no xp hng trc sc mua v trc. V nguyn tc"vo trc ra trc" , Queue cn c tn gi l danh sch kiuFIFO (First In First Out).1. M t Queue bng mngKhi m t Queue bng mng, ta c hai ch s First v Last, First lu ch s phn t u Queue cnLast lu ch s cui Queue, khi to Queue rng: First := 1 v Last := 0; thm mt phn t vo Queue, ta tng Last ln 1 v a gi tr vo phn t th Last. loi mt phn t khi Queue, ta ly gi tr v tr First v tng First ln 1. Khi Last tng ln ht khong ch s ca mng th mng y, khng th y thm phn t vo

    na. Khi First > Last th tc l Queue ang rngNh vy ch mt phn ca mng t v tr First ti Last c s dng lm Queue.program QueueByArray;const max = 10000;var Queue: array[1..max] of Integer; First, Last: Integer;

    procedure QueueInit; {Khi to mt hng i rng}begin First := 1; Last := 0;end;

    procedure Push(V: Integer); {y V vo hng i}begin if Last = max then WriteLn('Overflow') else begin Inc(Last); Queue[Last] := V; end;end;

    function Pop: Integer; {Ly mt gi tr khi hng i, tr v trong kt qu hm}begin if First > Last then WriteLn('Queue is Empty') else begin Pop := Queue[First]; Inc(First); end;end;

    begin QueueInit; end.Xem li chng trnh ci t Stack bng mt mng kch thc ti a 10000 phn t, ta thy rngnu nh ta lm 6000 ln Push ri 6000 ln Pop ri li 6000 ln Push th vn khng c vn g xyra. L do l v ch s Last lu nh ca Stack s c tng ln 6000 ri li gim n 0 ri li tng

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 24 [

    tr li ln 6000. Nhng i vi cch ci t Queue nh trn th s gp thng bo li trn mng, bimi ln Push, ch s cui hng i Last cng tng ln v khng bao gi b gim i c. chnh lnhc im m ta ni ti khi ci t: Ch c cc phn t t v tr First ti Last l thuc Queue, ccphn t t v tr 1 ti First - 1 l v ngha. khc phc iu ny, ta m t Queue bng mt danh sch vng: Coi nh cc phn t ca

    mng c xp xung quanh mt vng trn theo chiu kim ng h. Cc phn t nm trn phncung trn t v tr First ti v tr Last l cc phn t ca Queue. C thm mt bin n lu s phnt trong Queue. Vic thm mt phn t vo Queue tng ng vi vic ta dch ch s Lasttheo chiu kim ng h mt v tr ri t gi tr mi vo .

    Vic loi b mt phn t trong Queue tng ng vi vic ly ra phn t ti v tr First ridch First theo chiu kim ng h mt v tr.

    ...First

    Last

    Lu l trong thao tc Push v Pop phi kim tra Queue trn hay Queue cn nn phi cp nhtli bin n. (Thc ra y dng thm bin n cho d hiu ch trn thc t ch cn hai bin First vLast l ta c th kim tra c Queue trn hay cn ri)

    program QueueByCList;const max = 10000;var Queue: array[1..max] of Integer; i, n, First, Last: Integer;

    procedure QueueInit; {Khi to Queue rng}begin First := 1; Last := 0; n := 0;end;

    procedure Push(V: Integer); {y gi tr V vo Queue}begin if n = max then WriteLn('Queue is Full') else begin if Last = max then Last := 1 else Inc(Last); {Last chy theo vng trn} Queue[Last] := V; Inc(n); end;end;

    function Pop: Integer; {Ly mt phn t khi Queue, tr v trong kt qu hm}begin if n = 0 then WriteLn('Queue is Empty') else begin Pop := Queue[First]; if First = max then First := 1 else Inc(First); {First chy theo vng trn} Dec(n); end;end;

    begin

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 25 [ QueueInit; end.

    2. M t Queue bng danh sch ni n kiu FIFOTng t nh ci t Stack bng danh sch ni n kiu LIFO, ta cng khng kim tra Queue trntrong trng hp m t Queue bng danh sch ni n kiu FIFO.

    V1 V2 Vn...

    ...

    Last

    Vn-1

    First

    program QueueByLinkedList;type PNode = ^TNode; {Kiu con tr ti mt nt ca danh sch} TNode = record {Cu trc mt nt ca danh sch} Value: Integer; Link: PNode; end;var First, Last: PNode; {Hai con tr ti nt u v nt cui ca danh sch}

    procedure QueueInit; {Khi to Queue rng}begin First := nil;end;

    procedure Push(V: Integer); {y gi tr V vo Queue}var P: PNode;begin New(P); P^.Value := V; {To ra mt nt mi} P^.Link := nil; if First = nil then First := P {Mc nt vo danh sch} else Last^.Link := P; Last := P; {Nt mi tr thnh nt cui, cp nht li con tr Last}end;

    function Pop: Integer; {Ly gi tr khi Queue, tr v trong kt qu hm}var P: PNode;begin if First = nil then WriteLn('Queue is empty') else begin Pop := First^.Value; {Gn kt qu hm} P := First^.Link; {Gi li nt tip theo First ^(Nt c y vo danh sch ngay sau First^)} Dispose(First); First := P;{Gii phng b nh cp cho First ,^ cp nht li First mi} end;end;

    begin QueueInit; end.

    Bi tp1. Vit chng trnh m t cch i c s t h thp phn sang h c s R dng ngn xp2. Tm hiu c ch xp chng ca th tc quy, phng php dng ngn xp kh quy.3. C cu ng tu ti mt ga xe la nh sau:

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 26 [

    1 2 ... n

    A

    B

    C

    Ban u ng ray A cha cc toa tu nh s t 1 ti n theo th t t tri qua phi, ngi tamun chuyn cc toa sang ng ray C c mt th t mi l mt hon v ca (1, 2, ..., n),ch c a cc toa tu chy theo ng ray theo hng mi tn, c th dng on ng ray B cha tm cc toa tu trong qu trnh di chuyn.a) Hy nhp vo hon v cn c, cho bit c phng n chuyn hay khng, v nu c hy a racch chuyn:V d: n = 4; Th t cn c (1, 4, 3, 2)

    1. A C2. A B3. A B4. A C5. B C6. B C

    b) Nhng hon v no ca th t cc toa l c th to thnh trn on ng ray C vi lut dichuyn nh trn4. Tng t nh bi 3, nhng vi s ng ray sau:

    1 2 ... n

    A

    B

    C

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 27 [

    5. CY (TREE)

    I. NH NGHA

    Cu trc d liu tru tng ta quan tm ti trong mc ny l cu trc cy. Cy l mt cu trc dliu gm mt tp hu hn cc nt, gia cc nt c mt quan h phn cp gi l quan h "cha - con".C mt nt c bit gi l gc (root).C th nh ngha cy bng cc quy nh sau:1. Mi nt l mt cy, nt cng l gc ca cy y2. Nu n l mt nt v n1, n2, ..., nk ln lt l gc ca cc cy T1, T2, ..., Tk; cc cy ny i mt

    khng c nt chung. Th nu cho nt n tr thnh cha ca cc nt n1, n2, ..., nk ta s c mt cymi T. Cy ny c nt n l gc cn cc cy T1, T2, ..., Tk tr thnh cc cy con (subtree) cagc.

    3. tin, ngi ta cn cho php tn ti mt cy khng c nt no m ta gi l cy rng (nulltree).

    Xt cy di y:A

    B C D

    E F G H I

    J K

    Hnh 3: Cy A l cha ca B, C, D, cn G, H, I l con ca D S cc con ca mt nt c gi l cp ca nt , v d cp ca A l 3, cp ca B l 2, cp

    ca C l 0. Nt c cp bng 0 c gi l nt l (leaf) hay nt tn cng. V d nh trn, cc nt E, F, C,

    G, J, K v I l cc nt l. Nhng nt khng phi l l c gi l nt nhnh (branch) Cp cao nht ca mt nt trn cy gi l cp ca cy , cy hnh trn l cy cp 3. Gc ca cy ngi ta gn cho s mc l 1, nu nt cha c mc l i th nt con s c mc l i +

    1. Mc ca cy trn c ch ra trong hnh sau:A

    B C D

    E F G H I

    J K

    1

    2 2 2

    3 3 3 3 3

    4 4

    Hnh 4: Mc ca cc nt trn cy 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 Mt tp hp cc cy phn bit c gi l rng (forest), mt cy cng l mt rng. Nu b nt

    gc trn cy th s to thnh mt rng cc cy con.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 28 [

    V d: Mc lc ca mt cun sch vi phn, chng, bi, mc v.v... c cu trc ca cy Cu trc th mc trn a cng c cu trc cy, th mc gc c th coi l gc ca cy vi cc

    cy con l cc th mc con v tp nm trn th mc gc. Gia ph ca mt h tc cng c cu trc cy. Mt biu thc s hc gm cc php ton cng, tr, nhn, chia cng c th lu tr trong mt cy

    m cc ton hng c lu tr cc nt l, cc ton t c lu tr cc nt nhnh, mi nhnhl mt biu thc con:

    *

    + -

    a b c /

    d e

    (a + b)*(c - d / e)

    Hnh 5: Cy biu din biu thc

    II. CY NH PHN (BINARY TREE)

    Cy nh phn l mt dng quan trng ca cu trc cy. N c c im l mi nt trn cy ch c tia hai nhnh con. Vi mt nt th ngi ta cng phn bit cy con tri v cy con phi ca nt .Cy nh phn l cy c tnh n th t ca cc nhnh con.Cn ch ti mt s dng c bit ca cy nh phn

    1

    2

    3

    4

    5

    1

    2

    3

    4

    5

    1

    2

    3

    4

    5

    1

    2

    3

    4

    5

    a) b) c) d)Hnh 6: Cc dng cy nh phn suy bin

    Cc cy nh phn trong Hnh 6 c gi l cy nh phn suy bin (degenerate binary tree), cc ntkhng phi l l ch c mt nhnh con. Cy a) c gi l cy lch tri, cy b) c gi l cy lchphi, cy c) v d) c gi l cy zc-zc.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 29 [

    1

    2 3

    4 5 6 7

    8 9 10

    1

    2 3

    4 5 6 7

    e) f)Hnh 7: Cy nh phn hon chnh v cy nh phn y

    Cc cy trong Hnh 7 c gi l cy nh phn hon chnh (complete binary tree): Nu chiu caoca cy l h th mi nt c mc < h - 1 u c ng 2 nt con. Cn nu mi nt c mc h - 1 uc ng 2 nt con nh trng hp cy f) trn th cy c gi l cy nh phn y (fullbinary 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 cao

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

    III. BIU DIN CY NH PHN

    1. Biu din bng mngNu c mt cy nh phn y , ta c th d dng nh s cho cc nt trn cy theo th t lnlt t mc 1 tr i, ht mc ny n mc khc v t tri sang phi i vi cc nt mi mc.

    A

    B E

    C D F G

    1

    2 3

    4 5 6 7

    Hnh 8: nh s cc nt ca cy nh phn y biu din bng mngKhi con ca nt th i s l cc nt th 2i v 2i + 1. Cha ca nt th j l nt j div 2.Vy ta c th lu tr cy bng mt mng T, nt th i ca cy c lu tr bng phn t T[i].Vi cy nh phn y trn th khi lu tr bng mng, ta s c mng nh sau:

    A B E C D F G1 2 3 4 5 6 7

    Trong trng hp cy nh phn khng y , ta c th thm vo mt s nt gi c cy nhphn y , v gn nhng gi tr c bit cho nhng phn t trong mng T tng ng vi nhngnt ny. Hoc dng thm mt mng ph nh du nhng nt no l nt gi t ta thm vo. Chnhv l do ny nn vi cy nh phn khng y , ta s gp phi s lng ph b nh v c th s phithm rt nhiu nt gi vo th mi c cy nh phn y .V d vi cy lch tri, ta phi dng mt mng 31 phn t lu cy nh phn ch gm 5 nt

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 30 [

    A

    B

    C

    D

    E

    A B C D E1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

    Ngoi ra nu cu trc ca cy lun lun bin ng (tc l thng xuyn c nhng thao tc thm vohay loi b mt nhnh con) th cc lu tr ny c th khin cho cc thao tc km hiu qu.2. Biu din bng cu trc lin kt.Khi biu din cy nh phn bng cu trc lin kt, mi nt ca cy l mt bn ghi (record) gm 3trng: Trng Info: Cha gi tr lu ti nt Trng Left: Cha lin kt (con tr) ti nt con tri, tc l cha mt thng tin bit nt

    con tri ca nt l nt no, trong trng hp khng c nt con tri, trng ny c gn mtgi tr c bit.

    Trng Right: Cha lin kt (con tr) ti nt con phi, tc l cha mt thng tin bit ntcon phi ca nt l nt no, trong trng hp khng c nt con phi, trng ny c gnmt gi tr c bit.

    i vi cy ta ch cn phi quan tm gi li nt gc, bi t nt gc, i theo cc hng lin kt Left,Right ta c th duyt mi nt khc.

    A

    L R

    B

    L R

    C

    L R

    D

    L R

    E

    L R

    F

    L R

    G

    L R

    H

    L R

    I

    L R

    J

    L R

    Hnh 9: Biu din cy bng cu trc lin kt

    IV. 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 chomi nt ch c thm mt ln gi l php duyt cy.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 31 [

    Gi s rng nu nh mt nt khng c nt con tri (hoc nt con phi) th lin kt Left (Right) cant c lin kt thng ti mt nt c bit m ta gi l NIL (hay NULL), nu cy rng th ntgc ca cy cng c gn bng NIL. Khi c ba cch duyt cy hay c s dng:1. 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 lutrong hai nt con ca n, c th m t bng th tc quy sau:procedure Visit(N); {Duyt nhnh cy nhn N l nt gc ca nhnh }begin if N nil then begin Visit(Nt con tri ca N); Visit(Nt con phi ca N); end;end;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 ln lt c lit k theo th t:

    A B D H I E C F J G2. 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:procedure Visit(N); {Duyt nhnh cy nhn N l nt gc ca nhnh }begin if N nil then begin Visit(Nt con tri ca N); Visit(Nt con phi ca N); end;end;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 ln lt c lit k theo th t:

    H D I B E A F J C G3. 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 haint con ca nt , c th m t bng th tc quy sau:procedure Visit(N); {Duyt nhnh cy nhn N l nt gc ca nhnh }begin if N nil then begin Visit(Nt con tri ca N); Visit(Nt con phi ca N); end;end;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 ln lt c lit k theo th t:

    H I D E B J F G C A

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 32 [

    V. 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 tca cc nt con).1. Biu din cy K_phn bng mngCng tng t nh vic biu din cy nh phn, ngi ta c th thm vo cy K_phn mt s ntgi cho mi nt nhnh ca cy K_phn u c ng K nt con, cc nt con c xp th t tnt con th nht ti nt con th K, sau nh s cc nt trn cy K_phn bt u t 0 tr i, btu t mc 1, ht mc ny n mc khc v t "tri qua phi" mi mc:

    A

    BF

    J

    C

    D E

    M

    KL

    IG

    H

    0

    12 3

    4

    56

    7

    89

    1011

    12

    Hnh 10: nh s cc nt ca cy 3_phn biu din bng mngTheo 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. Tac 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 B F J C D E G H I K L M0 1 2 3 4 5 6 7 8 9 10 11 12

    2. Biu din cy K_phn bng cu trc lin ktKhi biu din cy K_phn bng cu trc lin kt, mi nt ca cy l mt bn ghi (record) gm haitrng: Trng Info: Cha gi tr lu trong nt . Trng Links: L mt mng gm K phn t, phn t th i cha lin kt (con tr) ti nt con th

    i, trong trng hp khng c nt con th i th Links[i] c gn mt gi tr c bit.i vi cy K_ phn, ta cng ch cn gi li nt gc, bi t nt gc, i theo cc hng lin kt cth i ti mi nt khc.

    VI. CY TNG QUT

    Trong thc t, c mt s ng dng i hi mt cu trc d liu dng cy nhng khng c rng bucg v s con ca mt nt trn cy, v d nh cu trc th mc trn a hay h thng mc ca mtcun sch. Khi , ta phi tm cch m t mt cch khoa hc cu trc d liu dng cy tng qut.Cng nh trng hp cy nh phn, ngi ta thng biu din cy tng qut bng hai cch: Lu trk tip bng mng v lu tr bng cu trc lin kt.1. Lu tr cy tng qut bng mng lu tr cy tng qut bng mng, trc ht, ta nh s cc nt trn cy bt u t 1 theo mt tht tu . Gi s cy c n nt th ta s dng: Mt mng Info[1..n], trong Info[i] l gi tr lu trong nt th i. Mt mng Children c chia lm n on, on th i gm mt dy lin tip cc phn t l ch

    s cc nt con ca nt i. Nh vy mng Children s cha tt c ch s ca mi nt con trn cy

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 33 [

    (ngoi tr nt gc) nn n s gm n - 1 phn t, lu rng khi chia mng Children lm n onth s c nhng on rng (tng ng vi danh sch cc nt con ca mt nt l)

    Mt mng Head[1..n + 1], nh du v tr ct on trong mng Children: Head[i] l v tr uon th i, hay ni chnh xc hn: Cc phn t trong mng Children t v tr Head[i] nHead[i+1] - 1 l ch s cc nt con ca nt th i. Khi Head[i] = Head[i+1] c ngha l on thi rng. Quy c: Head[n+1] = n.

    Gi li ch s ca nt gc.V d: Vi cy di y.

    A

    BF

    J

    C

    D E

    M

    KL

    G

    H

    9

    12 4

    3

    56

    7

    810

    11

    12

    Mng Info:Info[i] B F C J D E G H A K L M

    i 1 2 3 4 5 6 7 8 9 10 11 12Mng Children:Children[i] 3 5 6 7 8 10 11 12 1 2 4

    i 1 2 3 4 5 6 7 8 9 10 11on 1 on 2 on 4 on 9

    (Cc on 3, 5, 6, 7, 8, 10, 11, 12 l rng)Mng Head:

    Head[i] 1 4 6 6 9 9 9 9 9 12 12 12 12i 1 2 3 4 5 6 7 8 9 10 11 12 13

    2. Lu tr cy tng qut bng cu trc lin ktKhi lu tr cy tng qut bng cu trc lin kt, mi nt l mt bn ghi (record) gm ba trng: Trng Info: Cha gi tr lu trong nt . Trng FirstChild: Cha lin kt (con tr) ti nt con u tin ca nt (con c), trong trng

    hp l nt l (khng c nt con), trng ny c gn mt gi tr c bit. 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 cnt 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 theolin kt FirstChild n nt con c, nt ny chnh l cht ca mt danh sch ni n cc nt conca nt N: t nt con c, i theo lin kt Sibling, ta c th duyt tt c cc nt con ca nt N.

    Bi tp1. Vit chng trnh m t cy nh phn dng cu trc lin kt, mi nt cha mt s nguyn, v vitcc th tc duyt trc, gia, sau.2. Chng minh rng nu cy nh phn c x nt l v y nt cp 2 th x = y + 1

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 34 [

    3. Chng minh rng nu ta bit dy cc nt c thm ca mt cy nh phn khi duyt theo th ttrc v th t gia th c th dng c cy nh phn . iu ny con ng na khng i vith t trc v th t sau? Vi th t gia v th t sau.4. Vit cc th tc duyt trc, gia, sau khng quy.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 35 [

    6. K PHP TIN T, TRUNG T V HU T

    I. BIU THC DI DNG CY NH PHN

    Chng ta c th biu din cc biu thc s hc gm cc php ton cng, tr, nhn, chia bng mtcy nh phn, trong cc nt l biu th cc hng hay cc bin (cc ton hng), cc nt khng phil l biu th cc ton t (php ton s hc chng hn). Mi php ton trong mt nt s tc ng lnhai biu thc con nm cy con bn tri v cy con bn phi ca nt . V d: Cy biu din biuthc (6 / 2 + 3) * (7 - 4)

    *

    L R

    +

    L R

    -

    L R

    /

    L R

    3

    L R

    7

    L R

    4

    L R

    6

    L R

    2

    L R

    Hnh 11: Biu thc di dng cy nh phn

    II. CC K PHP CHO CNG MT BIU THC

    Vi cy nh phn biu din biu thc, Nu ta duyt theo th t trc, ta s c dng tin t (prefix) ca biu thc: * + / 6 2 3 - 7 4.

    Trong k php ny, ton t c vit trc hai ton hng tng ng, ngi ta cn gi k phpny l k php Ba lan.

    Nu ta duyt theo th t gia, ta s c: 6 / 2 + 3 * 7 - 4. K php ny hi mp m v thiudu ngoc. Nu ta thm vo th tc duyt inorder vic b sung cc cp du ngoc vo mi biuthc con th ta s c biu thc (((6 / 2) + 3) * (7 - 4)). 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 dng hu t (postfix) ca biu thc 6 2 / 3 + 7 4 - *.Trong k php ny ton t c vit sau hai ton hng, ngi ta cn gi k php ny l k phpnghch o Balan (Reverse Polish Notation - RPN)

    Ch c dng trung t mi cn c du ngoc, dng tin t v hu t khng cn phi c du ngoc.

    III. CCH TNH GI TR BIU THC

    C mt vn cn lu l khi my tnh gi tr mt biu thc s hc gm cc ton t hai ngi (tont gm hai ton hng nh +, -, *, /) th my ch thc hin c php ton vi hai ton hng, nubiu thc phc tp th my phi chia nh v tnh ring tng biu thc trung gian, sau mi ly gitr tm c tnh tip. V d nh biu thc 1 + 2 + 4 my s phi tnh 1 + 2 trc c kt qu l3 sau mi em 3 cng vi 4 ch khng th thc hin php cng mt lc ba s c.

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 36 [

    Khi lu tr biu thc di dng cy nh phn th ta c th coi mi nhnh con ca cy m tmt biu thc trung gian m my cn tnh khi x l biu thc ln. Nh v d trn, my s phitnh hai biu thc 6 / 2 + 3 v 7 - 4 trc khi lm php tnh nhn cui cng. tnh biu thc 6 / 2+ 3 th my li phi tnh biu thc 6 / 2 trc khi em cng vi 3.Vy tnh mt biu thc lu tr trong mt nhnh cy nh phn gc nt n, my s tnh gn gingnh hm quy sau:function Calculate(n): Value; {Tnh biu thc con trong nhnh cy gc n}begin if then Calculate := else {Nt n cha mt ton t R} begin x := Calculate(nt con tri ca n); y := Calculate(nt con phi ca n); Calculate := x R y; end;end.(Trong trng hp lp trnh trn cc h thng song song, vic tnh gi tr biu thc cy con triv cy 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 contrc, ri mi xt n ton t nt gc. iu lm ta ngh ti php duyt hu th t v k phphu t. Trong nhng nm u 1950, nh l-gic hc ngi Balan Jan Lukasiewicz chng minhrng biu thc hu t khng cn phi c du ngoc vn c th tnh c mt cch ng n bngcch c ln lt biu thc t tri qua phi v dng mt Stack lu cc kt qu trung gian:

    Bc 1: Khi ng mt Stack rngBc 2: c ln lt cc phn t ca biu thc RPN t tri qua phi (phn t ny c th l hng,bin hay ton t) vi mi phn t , ta kim tra: Nu phn t ny l mt ton hng th y gi tr ca n vo Stack. Nu phn t ny l mt ton t, ta ly t Stack ra hai gi tr (y v x) sau p dng ton t (R)

    vo hai gi tr va ly ra, y kt qu tm c (x R y) vo Stack (ra hai vo mt).Bc 3: Sau khi kt thc bc 2 th ton b biu thc c c xong, trong Stack ch cn duynht mt phn t, phn t chnh l gi tr ca biu thc.

    V d: Tnh biu thc 10 2 / 3 + 7 4 - * (tng ng vi biu thc (10 / 2 + 3) * (7 - 4)c X l Stack10 y vo Stack 102 y vo Stack 10, 2/ Ly 2 v 10 khi Stack, Tnh c 10 / 2 = 5, y 5 vo Stack 53 y vo Stack 5, 3+ Ly 3 v 5 khi Stack, tnh c 5 + 3 = 8, y 8 vo Stack 87 y vo Stack 8, 74 y vo Stack 8, 7, 4- Ly 4 v 7 khi Stack, tnh c 7 - 4 = 3, y 3 vo Stack 8, 3* Ly 3 v 8 khi Stack, tnh c 8 * 3 = 24, y 24 vo Stack 24Ta c kt qu l 24Di y ta s vit mt chng trnh n gin tnh gi tr biu thc RPN. Chng trnh s nhnInput l biu thc RPN gm cc s thc v cc ton t + - * / v cho Output l kt qu biu thc .Quy nh khun dng bt buc l hai s lin nhau trong biu thc RPN phi vit cch nhau t nhtmt du cch. qu trnh c mt phn t trong biu thc RPN c d dng hn, sau bc nhp

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 37 [

    liu, ta c th hiu chnh i cht biu thc RPN v khun dng d c nht. Chng hn nh thmv bt mt s du cch trong Input mi phn t (ton hng, ton t) u cch nhau ng mt ducch, thm mt du cch vo cui biu thc RPN. Khi qu trnh c ln lt cc phn t trongbiu thc RPN c th lm nh sau:

    T := '';for p := 1 to Length(RPN) do {Xt cc k t trong biu thc RPN t tri qua phi} if RPN[p] ' ' then T := T + RPN[p] {Nu RPN[p] khng phi du cch th ni k t vo T} else {Nu RPN[p] l du cch th phn t ang c c xong, tip theo s l phn t khc} begin T := ''; {Chun b c phn t mi} end;

    n gin, chng trnh khng kim tra li vit sai biu thc RPN, vic ch l thao tc t mch khng phc tp lm, ch cn xem li thut ton v ci thm cc m-un bt li ti mi bc.

    V d v Input / Output ca chng trnh:Enter RPN Expression: 10 2/3 + 4 7 -*10 2 / 3 + 4 7 - * = 24.0000

    CALRPN.PAS * Tnh gi tr biu thc RPN{$N+,E+}program CalculateRPNExpression;const Opt = ['+', '-', '*', '/'];var T, RPN: String; Stack: array[1..255] of Extended; p, Last: Integer;{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cc thao tc i vi Stack - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }procedure StackInit;begin Last := 0;end;

    procedure Push(V: Extended);begin Inc(Last); Stack[Last] := V;end;

    function Pop: Extended;begin Pop := Stack[Last]; Dec(Last);end;{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - -}procedure Refine(var S: String); {Hiu chnh biu thc RPN v khun dng d c nht}var i: Integer;begin S := S + ' '; for i := Length(S) - 1 downto 1 do {Thm nhng du cch gia ton hng v ton t} if (S[i] in Opt) or (S[i + 1] in Opt) then Insert(' ', S, i + 1); for i := Length(S) - 1 downto 1 do {Xo nhng du cch tha} if (S[i] = ' ') and (S[i + 1] = ' ') then Delete(S, i + 1, 1);end;

    procedure Process(T: String); {X l phn t T c c t biu thc RPN}var

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 38 [ x, y: Extended; e: Integer;begin if not (T[1] in Opt) then {T l ton hng} begin Val(T, x, e); Push(x); {i T thnh s v y gi tr vo Stack} end else {T l ton t} begin y := Pop; x := Pop; {Ra hai} case T[1] of '+': x := x + y; '-': x := x - y; '*': x := x * y; '/': x := x / y; end; Push(x); {Vo mt} end;end;

    begin Write('Enter RPN Expression: '); ReadLn(RPN); Refine(RPN); StackInit; T := ''; for p := 1 to Length(RPN) do {Xt cc k t ca biu thc RPN t tri qua phi} if RPN[p] ' ' then T := T + RPN[p] {nu khng phi du cch th ni n vo sau xu T} else {Nu gp du cch} begin Process(T); {X l phn t va c xong} T := ''; {t li T chun b c phn t mi} end; WriteLn(RPN, ' = ', Pop:0:4); {In gi tr biu thc RPN c lu trong Stack}end.

    IV. CHUYN T DNG TRUNG T SANG DNG HU T

    C th ni rng vic tnh ton biu thc vit bng k php nghch o Balan l khoa hc hn, mymc, v n gin hn vic tnh ton biu thc vit bng k php trung t. Ch ring vic khng phix l du ngoc cho ta thy u im ca k php RPN. Chnh v l do ny, cc chng trnhdch vn cho php lp trnh vin vit biu thc trn k php trung t theo thi quen, nhng trckhi dch ra cc lnh my th tt c cc biu thc u c chuyn v dng RPN. Vn t ra lphi c mt thut ton chuyn biu thc di dng trung t v dng RPN mt cch hiu qu, vdi y ta trnh by thut ton :Thut ton s dng mt Stack cha cc ton t v du ngoc m. Th tc Push(V) y mtphn t vo Stack, hm Pop ly ra mt phn t t Stack, hm Get c gi tr phn t nm nh Stack m khng ly phn t ra. Ngoi ra mc u tin ca cc ton t c quy nhbng hm Priority nh sau: u tin cao nht l du "*" v "/" vi Priority l 2, tip theo l du "+"v "-" vi Priority l 1, u tin thp nht l du ngoc m "(" vi Priority l 0.

    Stack := ;for do{T c th l hng, bin, ton t hoc du ngoc c c t biu thc infix theo th t t tri qua phi} case T of '(': Push(T); ')': repeat x := Pop;

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 39 [ if x '(' then Output(x); until x = '('; '+', '-', '*', '/': begin while (Stack ) and (Priority(T) Priority(Get)) do Output(Pop); Push(T); end; else Output(T); end;while (Stack ) do Output(Pop);

    V d vi biu thc trung t (2 * 3 + 7 / 8) * (5 - 1)c X l Stack Output( y vo Stack (2 Hin th ( 2* php "*" c u tin hn phn t nh

    Stack l "(", y "*" vo Stack(*

    3 Hin th (* 2 3+ php "+" u tin khng cao hn phn t

    nh Stack l "*", ly ra v hin th "*".So snh tip, thy php "+" c u tincao hn phn t nh Stack l "(", y"+" vo Stack

    (+ 2 3 *

    7 Hin th (+ 2 3 * 7/ php "/" c u tin hn phn t nh

    Stack l "+", y "/" vo Stack(+/

    8 Hin th (+/ 2 3 * 7 8) Ly ra v hin th cc phn t trong Stack

    ti khi ly phi du ngoc m 2 3 * 7 8 / +

    * Stack ang l rng, y * vo Stack *( y vo Stack *(5 Hin th *( 2 3 * 7 8 / + 5- php "-" c u tin hn phn t nh

    Stack l "(", y "-" vo Stack*(-

    1 Hin th *(- 2 3 * 7 8 / + 5 1) Ly ra v hin th cc phn t nh Stack

    cho ti khi ly phi du ngoc m* 2 3 * 7 8 / + 5 1 -

    Ht Ly ra v hin th ht cc phn t cn litrong Stack

    2 3 * 7 8 / + 5 1 - *

    Di y l chng trnh chuyn biu thc vit dng trung t sang dng RPN. Biu thc trung tu vo s c hiu chnh sao cho mi thnh phn ca n c cch nhau ng mt du cch, vthm mt du cch vo cui cho d tch cc phn t ra x l. V Stack ch dng cha cc tont v du ngoc m nn c th m t Stack di dng xu k t cho n gin.V d v Input / Output ca chng trnh:Infix: (10*3 + 7 /8) * (5-1)Refined: ( 10 * 3 + 7 / 8 ) * ( 5 - 1 )RPN: 10 3 * 7 8 / + 5 1 - *

    RPNCVT.PAS * Chuyn biu thc trung t sang dng RPNprogram ConvertInfixToRPN;const Opt = ['(', ')', '+', '-', '*', '/'];var T, Infix, Stack: String; {Stack dng cha ton t v du ngoc m nn dng String cho tin} p: Integer;

    {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cc thao tc i vi Stack - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }procedure StackInit;begin Stack := '';

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 40 [end;

    procedure Push(V: Char);begin Stack := Stack + V;end;

    function Pop: Char;begin Pop := Stack[Length(Stack)]; Dec(Stack[0]);end;

    function Get: Char;begin Get := Stack[Length(Stack)];end;{- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -}procedure Refine(var S: String); {Hiu chnh biu thc trung t v khun dng d c nht}var i: Integer;begin S := S + ' '; for i := Length(S) - 1 downto 1 do {Thm nhng du cch trc v sau mi ton t v du ngoc} if (S[i] in Opt) or (S[i + 1] in Opt) then Insert(' ', S, i + 1); for i := Length(S) - 1 downto 1 do {Xo nhng du cch tha} if (S[i] = ' ') and (S[i + 1] = ' ') then Delete(S, i + 1, 1);end;

    function Priority(Ch: Char): Integer; {Hm ly mc u tin ca Ch}begin case ch of '*', '/': Priority := 2; '+', '-': Priority := 1; '(': Priority := 0; end;end;

    procedure Process(T: String); {X l mt phn t c c t biu thc trung t}var c, x: Char;begin c := T[1]; if not (c in Opt) then Write(T, ' ') else case c of '(': Push(c); ')': repeat x := Pop; if x '(' then Write(x, ' '); until x = '('; '+', '-', '*', '/': begin while (Stack '') and (Priority(c)

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 41 [ WriteLn('Refined: ', Infix); Write('RPN: '); T := ''; for p := 1 to Length(Infix) do if Infix[p] ' ' then T := T + Infix[p] else begin Process(T); T := ''; end; while Stack '' do Write(Pop, ' '); WriteLn;end.

    V. XY DNG CY NH PHN BIU DIN BIU THC

    Ngay trong phn u tin, chng ta bit rng cc dng biu thc trung t, tin t v hu t u cth c hnh thnh bng cch duyt cy nh phn biu din biu thc theo cc trt t khc nhau.Vy ti sao khng xy dng ngay cy nh phn biu din biu thc ri thc hin cc cng victnh ton ngay trn cy?. Kh khn gp phi chnh l thut ton xy dng cy nh phn trc tip tdng trung t c th km hiu qu, trong khi t dng hu t li c th khi phc li cy nh phnbiu din biu thc mt cch rt n gin, gn ging nh qu trnh tnh ton biu thc hu t:Bc 1: Khi to mt Stack rng dng cha cc nt trn cyBc 2: c ln lt cc phn t ca biu thc RPN t tri qua phi (phn t ny c th l hng,bin hay ton t) vi mi phn t :

    To ra mt nt mi N cha phn t mi c c Nu phn t ny l mt ton t, ly t Stack ra hai nt (theo th t l y v x), sau em lin

    kt tri ca N tr n x, em lin kt phi ca N tr n y. y nt N vo Stack

    Bc 3: Sau khi kt thc bc 2 th ton b biu thc c c xong, trong Stack ch cn duynht mt phn t, phn t chnh l gc ca cy nh phn biu din biu thc.Bi tp1. Vit chng trnh chuyn biu thc trung t sang dng RPN, biu thc trung t c c nhng phpton mt ngi: Php ly s i (-x), php lu tha xy (x^y), li gi hm s hc (sqrt, exp, abs v.v...)2. Vit chng trnh chuyn biu thc logic dng trung t sang dng RPN. V d:Chuyn: a and b or c and d thnh: a b and c d and or3. Chuyn cc biu thc sau y ra dng RPNa) A * (B + C) b) A + B / C + Dc) A * (B + -C) d) A - (B + C)d/ee) A and B or C f) A and (B or not C)g) (A or B) and (C or (D and not E)) h) (A = B) or (C = D)i) (A < 9) and (A > 3) or not (A > 0)j) ((A > 0) or (A < 0)) and (B * B - 4 * A * C < 0)4. Vit chng trnh tnh biu thc logic dng RPN vi cc ton t and, or, not v cc ton hng lTRUE hay FALSE

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 42 [

    7. SP XP (SORTING)

    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 tv.v... Yu cu v sp xp thng xuyn xut hin trong cc ng dng Tin hc vi cc mc chkhc nhau: sp xp d liu trong my tnh tm kim cho thun li, sp xp cc kt qu x l inra trn bng biu v.v...Ni chung, d liu c th xut hin di nhiu dng khc nhau, nhng y ta quy c: Mt tpcc 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 trongqu 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, sbo danh, im thi. Khi mun lit k danh sch nhng th sinh trng tuyn tc l phi sp xp ccth sinh theo th t t im cao nht ti im thp nht. y kho sp xp chnh l im thi.

    STT SBD H v tn im thi1 A100 Nguyn Vn A 202 B200 Trn Th B 253 X150 Phm Vn C 184 G180 Th D 21

    Khi sp xp, cc bn ghi trong bng s c t li vo cc v tr sao cho gi tr kho tng ng vichng c ng th t n nh. Ta thy rng kch thc ca kho thng kh nh so vi kchthc ca ton bn ghi, nn nu vic sp xp thc hin trc tip trn cc bn ghi s i hi schuyn i v tr ca cc bn ghi, ko theo vic thng xuyn phi di chuyn, copy nhng vng nhln, gy ra nhng tn ph thi gian kh nhiu. Thng ngi ta khc phc tnh trng ny bng cchxy dng mt bng kho: Mi bn ghi trong bng ban u s tng ng vi mt bn ghi trong bngkho. 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.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 ngthuc bng kho ny.Nh v d trn, ta c th xy dng bng kho gm 2 trng, trng kho cha im v trnglin kt cha s th t ca ngi c im tng ng trong bng ban u:

    im thi STT20 125 218 321 4

    Sau khi sp xp theo trt t im cao nht ti im thp nht, bng kho s tr thnh:

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 43 [im thi STT25 221 420 118 3

    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 ngimang s th t 3, cn mun lit k danh sch y th ta ch vic i chiu vi bng ban u vlit 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 honton c th suy ra c t trng lin kt bng cch: Da vo trng lin kt, tm ti bn ghi tngng trong bng chnh ri truy xut trng kho trong bng chnh. Nh v d trn th ngi mang sth t 1 chc chn s phi c im thi l 20, cn ngi mang s th t 3 th chc chn phi c imthi l 18. Vy th bng kho c th loi b i trng kho m ch gi li trng lin kt. Trongtrng hp cc phn t trong bng ban u c nh s t 1 ti n v trng lin kt chnh l sth t ca bn ghi trong bng ban u nh v d trn, ngi ta gi k thut ny l k thut spxp bng ch s: Bng ban u khng h b nh hng g c, vic sp xp ch n thun l nh lich 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 chs 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 nhi din cho cc bn ghi v cho n gin, ta ch ni ti gi tr ca kho m thi. Cc thao tctrong k thut sp xp l ra l tc ng ln ton bn ghi gi y ch lm trn kho. Cn vic ci tcc phng php sp xp trn danh sch cc bn ghi v k thut sp xp bng ch s, ta coi nh bitp.Bi ton sp xp gi y c th pht biu nh sau:Xt quan h th t ton phn "nh hn hoc bng" k hiu "" trn mt tp hp S, l quan h haingi tho mn bn tnh cht:Vi a, b, c S Tnh ph bin: Hoc l a b, hoc b a; Tnh phn x: a a Tnh phn i xng: Nu a b v b a th bt buc a = b. Tnh bc cu: Nu c a b v b c th a c.Trong trng hp a b v a b, ta dng k hiu "

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 44 [

    Th nhng thut ton sp xp di y c vit di dng th tc sp xp dy kho k, kiu ch snh cho tng kho trong dy c th coi l s nguyn Integer.

    II. THUT TON SP XP KIU CHN (SELECTION SORT)

    Mt trong nhng thut ton sp xp n gin nht l phng php sp xp kiu chn. tng cbn ca cch sp xp ny l: lt th nht, ta chn trong dy kho k1, k2, ..., kn ra kho nh nht (kho mi kho khc) vi gi tr ca n vi k1, khi gi tr kho k1 tr thnh gi tr kho nh nht. lt th hai, ta chn trong dy kho k2, ..., kn ra kho nh nht v i gi tr ca n vi k2.... lt th i, ta chn trong dy kho ki, ki+1, ..., kn ra kho nh nht v i gi tr ca n vi ki....Lm ti lt th n - 1, chn trong hai kho kn-1, kn ra kho nh nht v i gi tr ca n vi kn-1.procedure SelectionSort;var i, j, jmin: Integer;begin for i := 1 to n - 1 do {Lm n - 1 lt} begin {Chn trong s cc kho t ki ti kn ra kho kjmin nh nht} jmin := i; for j := i + 1 to n do if kj < kjmin then jmin := j; if jmin i then end;end;

    i vi phng php kiu la chn, ta c th coi php so snh (kj < kjmin) l php ton tch cc nh gi hiu sut thut ton v mt thi gian. lt th i, chn ra kho nh nht bao gi cngcn n - i php so snh, s lng php so snh ny khng h ph thuc g vo tnh trng ban u cady kho c. T suy ra tng s php so snh s phi thc hin l:

    (n - 1) + (n - 2) + ... + 1 = n * (n - 1) / 2Vy thut ton sp xp kiu chn c cp l O(n2)

    III. THUT TON SP XP NI BT (BUBBLE SORT)

    Trong thut ton sp xp ni bt, dy cc kho s c duyt t cui dy ln u dy (t kn v k1),nu gp hai kho k cn b ngc th t th i ch ca chng cho nhau. Sau ln duyt nh vy,phn t nh nht trong dy kho s c chuyn v v tr u tin v vn tr thnh sp xp dykho t k2 ti kn:procedure BubbleSort;var i, j: Integer;begin for i := 2 to n do for j := n downto i do{Duyt t cui dy ln, lm ni kho nh nht trong s ki-1, ...,kn v v tr i-1} if kj < kj-1 then end;

    i vi thut ton sp xp ni bt, ta c th coi php ton tch cc l php so snh kj < kj-1. V sln thc hin php so snh ny l:

    (n - 1) + (n - 2) + ... + 1 = n * (n - 1) / 2

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 45 [

    Vy thut ton sp xp ni bt cng c cp l O(n2). Bt k tnh trng d liu vo nh th no.

    IV. THUT TON SP XP KIU CHN

    Xt dy kho k1, k2, ..., kn. Ta thy dy con ch gm mi mt kho l k1 c th coi l sp xp ri.Xt thm k2, ta so snh n vi k1, nu thy k2 < k1 th chn n vo trc k1. i vi k3, ta li xt dych gm 2 kho k1, k2 sp xp v tm cch chn k3 vo dy kho c th t sp xp. Mtcch tng qut, ta s sp xp dy k1, k2, ..., ki trong iu kin dy k1, k2, ..., ki-1 sp xp ri bngcch chn ki vo dy ti v tr ng khi sp xp.procedure InsertionSort;var i, j: Integer; tmp: TKey; {Bin gi li gi tr kho chn}begin for i := 2 to n do {Chn gi tr ki vo dy k1,..., ki-1 ton on k1, k2,..., ki tr thnh sp xp} begin tmp := ki; {Gi li gi tr ki} j := i - 1; while (j > 0) and (tmp < kj) do {So snh gi tr cn chn vi ln lt cc kho kj (i-1j0)} begin kj+1 := kj; {y li gi tr kj v pha sau mt v tr, to ra "khong trng" ti v tr j} j := j - 1; end; kj+1 := tmp; {a gi tr chn vo "khong trng" mi to ra} end;end;

    i vi thut ton sp xp kiu chn, th chi ph thi gian thc hin thut ton ph thuc vo tnhtrng dy kho ban u. Nu coi php ton tch cc y l php so snh tmp < kj th: Trng hp tt nht ng vi dy kho sp xp ri, mi lt ch cn 1 php so snh, v nh

    vy tng s php so snh c thc hin l n - 1. Trng hp ti t nht ng vi dy kho c th t ngc vi th t cn sp th lt th i,

    cn c i - 1 php so snh v tng s php so snh l:(n - 1) + (n - 2) + ... + 1 = n * (n - 1) / 2.

    Trng hp cc gi tr kho xut hin mt cch ngu nhin, ta c th coi xc sut xut hin mikho l ng kh nng, th c th coi lt th i, thut ton cn trung bnh i / 2 php so snh vtng s php so snh l:

    (1 / 2) + (2 / 2) + ... + (n / 2) = (n + 1) * n / 4.Nhn v kt qu nh gi, ta c th thy rng thut ton sp xp kiu chn t ra tt hn so vi thutton sp xp chn v sp xp ni bt. Tuy nhin, chi ph thi gian thc hin ca thut ton sp xpkiu chn vn cn kh ln. V xt trn phng din tnh ton l thuyt th cp ca thut ton spxp kiu chn vn l O(n2).C th ci tin thut ton sp xp chn nh nhn xt: Khi dy kho k1, k2, ..., ki-1 c sp xpth vic tm v tr chn c th lm bng thut ton tm kim nh phn v k thut chn c th lmbng cc lnh dch chuyn vng nh cho nhanh. Tuy nhin iu cng khng lm tt hn cp phc tp ca thut ton bi trong trng hp xu nht, ta phi mt n - 1 ln chn v ln chn th i taphi dch li i kho to ra khong trng trc khi y gi tr kho chn vo ch trng .procedure InsertionSortwithBinarySearching;var i, inf, sup, median: Integer; tmp: TKey;begin

  • Cu trc d liu v gii thut

    L Minh Hong

    \ 46 [

    for i := 2 to n do begin tmp := ki; {Gi li gi tr ki} inf := 1; sup := i - 1; {Tm ch chn gi tr tmp vo on t kinf ti ksup+1} repeat {Sau mi vng lp ny th on tm b co li mt na} median := (inf + sup) div 2; {Xt ch s nm gia ch s inf v ch s sup} if tmp < k[median] then sup := median - 1 else inf := median + 1; until inf > sup; {Kt thc vng lp th inf = sup + 1 chnh l v tr chn} kinf := tmp; {a gi tr tmp vo "khong trng" mi to ra} end;end;

    V. SHELL SORT

    Nhc im ca thut ton sp xp kiu chn th hin khi m ta lun phi chn mt kha vo v trgn u dy. Trong trng hp , ngi ta s dng phng php Shell Sort.Xt dy kho: k1, k2, ..., kn. Vi mt s nguyn dng h: 1 h n, ta c th chia dy thnh h dycon: Dy con 1: k1, k1+h, k1 + 2h, ... Dy con 2: k2, k2+h, k2 + 2h, ... ... Dy