Ctdl&Gt Manh

Embed Size (px)

Citation preview

  • 7/31/2019 Ctdl&Gt Manh

    1/70

  • 7/31/2019 Ctdl&Gt Manh

    2/70

  • 7/31/2019 Ctdl&Gt Manh

    3/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 33

    CHNG 1: TNG QUAN V CU TRC D LIU V GIITHUT

    1.1. Mi quan h gia cu trc d liu v gii thutThc hin mt n tin hc l chuyn bi ton thc t thnh bi ton c

    th gii quyt trn my tnh. Mt bi ton thc t bt k u bao gm cc itng d liu v cc yu cu x l trn cc i tng . V th, xy dngmt m hnh tin hc phn nh c bi ton thc t ta cn ch trng n haivn sau :

    1.1.1. T chc biu din cc i tng thc t

    Cc thnh phn d liu thc t a dng, phong ph v thng cha ngnhng mi quan h no vi nhau. Do cn phi t chc, xy dng ccCTDL thch hp nht sao cho va c th phn nh chnh xc cc d liu thct ny, va c th d dng dng my tnh x l. Cng vic ny gi l xydng cu trc d liu cho bi ton.

    1.1.2. Xy dng cc thao tc x l d liu

    Gii thut phn nh cc php x l, cn i tng x l ca gii thut lil d liu. Chnh d liu chang cc thng tin cn thit thc hin giithut.

    xc nh c GT ph hp cn phi bit n tc ng n loi CTDLno.

    V d: thc hin tm kim trn dy s tng dn, ta dng GT tm kimnh phn thay v tm kim tun t.

    Khi chn la CTDL cng cn phi hiu r nhng thao tc no (GT) s tcng n n.

    V d: biu din cc im s ca sinh vin ta dng s thc Real thay vxu k t String v cn phi thc hin thao tc tnh im trung bnh t nhngim s .

    Nh vy trong mt n tin hc, cu trc d liu v gii thut c miquan h cht ch vi nhau, c th hin qua cng thc

    Cu trc d liu + Gii thut = Chng trnh

    Vi mt cu trc d liu chn, s c nhng gii thut tng ng, phhp. Khi cu trc d liu thay i thng gii thut cng phi thay i theo trnh vic x l gng p, thiu t nhin trn mt cu trc khng ph hp.Hn na, mt cu trc d liu tt s gip gii thut x l trn c th phthuy tc dng tt hn, va nhanh va tit kim vt t,gii thut cng n gin

    v d hiu hn.

  • 7/31/2019 Ctdl&Gt Manh

    4/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 44

    11..22.. CCcc ttiiuu cchhuunnnnhh ggii ccuu ttrrcc ddlliiuu

    Do tm quan trng ca cu trc d liu c trnh by trong phn trn,

    nn nht thit phi ch trng n vic la chn mt phng n t chc dliu thch hp cho n. Mt cu trc d liu tt phi tho mn ba tiu chunsau:

    11..22..11..PPhhnn nnhhnngg tthhcc tt

    y l tiu chun quan trng nht, quyt nh tnh ng n ca ton bbi ton. Cn xem xt k lng cng nh d tr cc trng thi bin i cad liu trong chu trnh sng c th la chn cu trc d liu lu tr thhin chnh xc i tng thc t.

    V d: Mt s tnh hung chn cu trc lu tr sai

    - Chn bin s nguyn integer lu tr tin thng bn hng (c tnhtheo cng thc tin thng bn hng = tr gi hng *5%), do vy khi lm trnmi gi tr tin thng s gy thit hi cho nhn vin bn hng. Trng hpny phi s dng bin s thc phn nh ng kt qu ca cng thc tnhthc t.

    - Trong trng trung hc, mi lp c th nhn ti a 25 hc sinh. Lp hinc 20 hc sinh, mi thng, mi hc sinh ng hc ph 15.000 ng. Chn mt

    bin s nguyn (kh nng -32768 32767) lu tr tng s hc ph ca lp

    hc trong thng, nu xy ra trng hp c thm 5 hc sinh na vo lp th gitr tng hc ph thu c l 375000 ng, vt kh nng lu tr ca bin chn, gy ra tnh trng trn b nh, sai lch.

    11..22..22.. PPhh hhpp vvii cccc tthhaaoo ttcc xxll

    Tiu chun ny gip tng hiu qu ca n: vic pht trin cc thut tonn gin, t nhin hn; chng trnh t hiu qu cao hn v tc x l.

    V d : Mt tnh hung chn cu trc lu tr khng ph hp :

    - Gi s ta cn xy dng mt chng trnh son tho vn bn, cc thao tcx l thng l chn, xa, sa cc k t trn vn bn. Trong thi gian x lvn bn, nu chn cu trc lu tr vn bn trc tip ln tp tin th s gy khkhn khi xy dng cc gii thut cp nht v lm chm tc x l cachng trnh v phi lm vic trn b nh ngoi. Trng hp ny nn tm mtCTDL c th t chc b nh trong lu tr vn bn sut thi gian sontho.

    11..22..33..TTiitt kkiimm ttii nngguuyynn hh tthhnnggCu trc d liu ch nn s dng ti nguyn va m nhim c

    chc nng ca n. Thng thng c hai loi ti nguyn cn lu nht: CPU

  • 7/31/2019 Ctdl&Gt Manh

    5/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 55

    v b nh.Tiu chun ny nn cn nhc tu vo tnh hung c th khi thchin n. Nu t chc s dng n cn c nhng x l nhanh th khi chncu trc d liu yu t tit kim thi gian x l phi t nng hn tiu chun

    s dng ti a b nh, v ngc li.V d: Mt s tnh hung chn cu trc lu tr lng ph:

    - S dng bin integer(2 bytes) lu tr mt gi tr cho bit thng hinhnh. Trong tnh hung ny ta ch cn s dng bin kiu bytel .

    - lu tr danh sch hc vin trong mt lp, s dng mng 60 phn t(gii hn s hc vin trong lp ti a l 60). Nu s lng hc vin tht s thn 60, th gy lng ph b nh. Hn na, s hc vin c th thay i theotng k, tng nm. Trong trng hp ny ta cn c mt cu trc d liu linh

    ng hn mng, chng hn danh sch lin kt s c hc trong Bi 6.

    11..33.. KKiiuu ddlliiuu

    1.3.1. nh ngha kiu d liu

    Kiu d liu (KDL) T c xc nh bi 1 b , vi:

    V: Tp cc gi tr hp l m 1 i tng kiu T c th lu tr.

    O: Tp cc thao tc x l c th thi hnh trn i tng kiu T.

    V d: Pascal c KDL s nguyn Integer vi:V = {-32768..32767}

    O = {+, -, *, /, mod, div, }

    1.3.2. Cc thuc tnh ca mt kiu d liu

    Cc thuc tnh ca 1 KDL bao gm:

    - Tn KDL

    - Min gi tr

    - Kch thc lu tr- Tp cc ton t tc ng ln KD

    1.3.3. Cc kiu d liu c bn

    Cc loi d liu c bn thng l cc d liu n gin, khng c cu trc.Chng thng l cc gi tr v hng nh s nguyn, s thc, cc k t, ccgi tr logic Cc loi d liu ny, do tnh thng dng v n gin ca mnh,thng c cc Ngn ng lp trnh cp cao xy dng sn nh mt phn cangn ng gim nh cng vic cho ngi lp trnh. Chnh v vy i khi

    ngi ta cn gi chng l cc kiu d liu nhsn.

  • 7/31/2019 Ctdl&Gt Manh

    6/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 66

    Thng thng trong mt h kiu ca ngn ng lp trnh s c mt s kiud liu c gi l kiu d liu n hay kiu d liu phn t (atomic).

    Thng thng, cc kiu d liu c bn bao gm :- Kiu c th t ri rc: s nguyn, k t, logic, litk, min con

    - Kiu khng ri rc: s thc

    Tu tng ngn ng lp trnh, cc kiu d liu nh ngha sn ny c thkhc nhau i cht. Vi ngn ng C, cc kiu d liu ny ch gm s nguyn,s thc, k t. V theo quan im ca C, kiu k t thc cht cng l kiu snguyn v mt lu tr, ch khc v cch s dng. Ngoi ra, gi tr logic ng(TRUE) v gi tr logic sai (FALSE) c biu din trong ngn ng C nh lcc gi tr nguyn khc 0 v bng 0. Trong khi Pascal nh ngha tt c cckiu d liu lit k trn v phn bit chung mt cch cht ch.

    H kiu ca Pascal c th c nh ngha qui nh sau:

    1. Kiu integer

    2. Kiu real

    3. Kiu boolean

    4. Kiu char

    5. Kiu lit ka) Kiu s nguyn

    *) C 5 kiu s nguyn c nh ngha l: shortint, byte, word, integer,longint. Kch thc v phm vi biu din ca chng c cho trong bng sau:

    Tn kiu Phm vi biu din Kch thc

    Shortint -128 +127 1 (byte)

    Byte 0 255 1 (byte)

    Integer -32768 +32767 2 (bytes)Word 0 65535 2 (bytes)

    Longint -2147483648 +2147483647 4 (bytes)

    *) Cc php ton vi s nguyn

    - Cc php ton s hc: cng, tr, nhn, chia, div (php chia ly phnnguyn), mod (php chia ly phn d). Trong cc php ton cng, tr,

  • 7/31/2019 Ctdl&Gt Manh

    7/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 77

    nhn, div, mod cho kt qu l s nguyn, ring php chia cho kt qu l sthc.

    - Cc php ton so snh: , =, =, .Cc bin s nguyn c khai bo sau t kho Var theo cch sau:

    Var : ;

    V d: Var m, n, i : Integer;

    b) Kiu s thc

    Kiu thc c 5 loi l: Single, Real, Double, Extendedv Comp. Di yl kch thc v phm vi ca chng.

    Kiu Phm vi biu din S ch s cngha Kch thc

    Single 1.5*10-45 3.4*1038 7 8 4 bytes

    Real 2.9*10-39 1.7*1038 11 12 6 bytes

    Double 5.0*10-324 1.7*10308 15 16 8 bytes

    Extended 1.9*10-4951 1.1*104932 19 20 10 bytes

    Comp -9.2*1018 9.2*1018 19 20 8 bytes

    Gii thch: Phm vi biu din ca cc kiu: Single, Real, Double,Extendedc hiu nh sau:

    My c th lu tr c mt s kiu Single c gi tr tuyt i trongkhong t 1.5*10-45 3.4*1038. S c gi tr tuyt i nh hn 1.5*10-45cxem bng 0, s c gi tr tuyt i ln hn 3.4*10 38khng biu din ctrong my. Phm vi biu din ca cc kiu Real, Double, Extended cngc hiu theo ngha tng t.

    Cc php ton vi s thc:+ Cc php ton s hc: cng, tr, nhn, chia: cho kt qu l s thc.

    + Cc php ton so snh: =, =, , .

    Cc bin thc c th khai bo sau t kho VAR theo cch vit nh sau:

    Var : ;

    V d: Var x, y, z : Real;

    c) Kiu logic

  • 7/31/2019 Ctdl&Gt Manh

    8/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 88

    Kiu Boolean ch c 2 gi tr l True(ng) v False(sai). Mt gi trBooleanchim 1 byte b nh.

    C th khai bo cc bin kiu Booleannh sau:Var q, q1: Boolean;

    d) Kiu k t Char

    Mt gi tr kiu charchim 1 byte b nh v biu din c mt k tthng qua bng m ASCII. M ca mt k t chnh l s th t ca n trong

    bng m. C tt c 256 k t c nh s t 0 n 255. Do , c 256 gi trkiu char.

    biu din mt k t ngi ta t n trong cp du nhy n,

    V d: A c hiu l k t A.Cc bin kiu charc khai bo nh sau:

    Var ch, kt: char;

    e) Kiu xu k t String

    Mt gi tr kiu stringl mt dy k t bt k t trong cp du nhy n.S k t ca dy khng c vt qu 255. Dy k k t ny cn c gi l1 xu k t, xu khng cha k t no c gi l xu rng.

    V d:H tn : Xu gm 6 k t.

    : Xu rng

    *) Cch khai bo bin kiu xu k t.

    Var Tn_bin:string[ di];

    Trong [ di]ch s lng k t ti a m bin c khai bo c thcha.

    V d: Var Ho_ten: string[30];Khi bin Ho_ten c th cha c ti a l 30 k t.

    Nu trong khai bo khng ch ra di th bin c khai bo c th chac ti a l 255 k t.

    V d: Var st: String;

    Khi bin st c th cha ti a l 255 k t.

    Cng c th khai bo mt bin k t thng qua vic nh ngha mt kiu

    k t mi nh v d sau:

  • 7/31/2019 Ctdl&Gt Manh

    9/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 99

    Type Str30 = String[30];

    Var st, st1: Str30;

    c bit khi bin xu k t l tham sca chng trnh con ta phi sdng cch khai bo ny.

    Vic a mt xu k t vo b nh my tnh c th thc hin bng cchgn xu k t cho bin k t hoc nhp xu k t t bn phm bng th tcReadln.

    Chng hn:

    st := Ha Noi Viet Nam;

    Hoc: Readln(st);

    Cng c th gn gi tr ca bin xu k t cho mt bin xu k t khc.

    V d:

    st1 := st;

    Tuy nhin cn ch ti di ca cc xu k t trong cc php gn.

    C th in mt xu k t ra mn hnh bng mt trong 2 th tc write hocwriteln. V du: write(Ha Noi Viet Nam); hay writeln(st);

    1.3.4. Cc kiu d liu c cu trc

    Khi gii quyt cc bi ton phc tp, ta ch s dng cc d liu n lkhng , ta phi cn n cc cu trc d liu. Mt cu trc d liu bao gmmt tp hpno cc d liu phn t,cc thnh phn ny lin kt vi nhau

    bi mt phng php no . a s cc ngn ng lp trnh u ci t snmt s kiu c cu trc c bn nh mng, chui, tp tin, bn ghi...v cung cpc ch cho lp trnh vin t nh ngha kiu d liu mi.

    a) Kiu array (mng)

    Trong Pascal v trong nhiu ngn ng thng dng khc c mt cch n

    gin nht to lin kt cc d liu thnh phn, l cch sp xp ccthnh phn c cng mt kiu thnh mt dy. Khi ta c mt cu trc d liuc gi l mng (array). Nh vy, c th ni, mt mng l mt cu trc dliu gm mt dy xc nh cc d liu thnh phn cng mt kiu (mng snguyn, mng s thc, mng cc bn ghi,...).

    Gi s T0l mt kiu cho, ta s gi T0l kiu thnh phn mng. Gi sI l kiu on con hoc kiu lit k, ta s gi i l ch s mng. Khi ta cth to nn kiu mng T vi cc thnh phn l ca mng l cc gi tr thuc Tiv c ch s ho bi tp hu hn, c th t i.

  • 7/31/2019 Ctdl&Gt Manh

    10/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1100

    b) Kiu record (bn ghi)Mt phng php khc to nn cc cu trc d liu mi, l kt hp cc

    thnh phn d liu (cc thnh phn c th c kiu khc nhau) thnhbn ghi(record). Cc thnh phn ca bn ghi gi l cc trng. Cc bn ghi n ltli c s dng to nn cc kiu d liu khc, chng hn nh mng cc

    bn ghi.

    Gi s T1, T2,...,Tn l cc kiu cho, v F1, F2,..., Fn l cc tn trng.Khi ta c th thnh lp kiu bn ghi T vi n trng, trng th i c tn lFi v cc gi tr ca n c kiu Ti vi i = 1, 2,..., n.

    Mi gi tr ca kiu bn ghi T l mt b n gi tr (t1, t2,..., tn), trong ti Ti (i = 1, 2, ..., n).

    c) Kiu con tr

    Mt phng php quan trng na kin to cc cu trc d liu, l sdng con tr. Trong phng php ny mi thnh phn l mt bn ghi gm haitrng INFOR v LINK, trng INFORc th c mt hay nhiu trng dliu, cn trng LINKc th cha mt hay nhiu con tr tr n cc thnh

    phn khc c quan h vi thnh phn (kiu con tr ta s nghin cu k

    trong phn danh sch lin kt). T kiu ny ta c th xy dng nn cu trcd liu biu din cy, m hnh d liu quan trng bc nht.

    Gi s T l mt kiu con tr cho. Khi ta c th to nn kiu con trTp.

    Cc gi tr ca Tpl a ch trong b nh ca my tnh lu gi cc itng thuc kiu T.

    d) Kiu set(tp hp)

    TTyyppee TT ==aarrrraayy[[ii]]ooff

    TTyyppeeTT == rreeccoorrdd

    FF11 :: TT11;;

    FF22 :: TT22;;

    ......................

    FFnn:: TTnn;;

    eenndd;

    TTyyppee TTpp ==^ TT

  • 7/31/2019 Ctdl&Gt Manh

    11/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1111

    Gi s T0l mt kiu cho. T0phi l kiu c th t m c " nh",chng hn kiu on con (gii hn ph thuc vo chng trnh dch). Khi ,ta c th xc nh kiu tp T

    Mi i tng ca kiu T s l mt tp con ca T0.

    e) Kiu file(tp)

    Gi s T0l mt kiu no (tr kiu file), khi

    s xc nh mt kiu file vi cc phn t l cc i tng thuc kiu T0

    V d : sau y l nh ngha mt s kiu d liu

    Type mau = (white, red, blue, yellow, green);

    mang = array[1..10] of integer;

    Rec = record

    infor : mau;

    ptr : ^mang;

    end;

    Reccar = array[1..5] of Rec;

    Sau y l biu din hnh hc ca mt i tng thuc kiu Reccar ccho trong Hnh 1.1

    Hnh 1.1 Cu trc d liu Reccar

    TTyyppee TT ==sseett ooff TT00

    TTyyppee TT ==ffiillee ooff TT00

    red

    yellow

    green

    4 blue

    blue

    1 2 3 10

    9 0 9 ... 11

    1 2 3 10

    5 3 8 ... 15

    1 2 3 10

    3 4 10 ... 14

  • 7/31/2019 Ctdl&Gt Manh

    12/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1122

    11..44..nnhh ggii pphhcc ttpp ggiiii tthhuutt

    C hai cch tip cn nh gi thi gian thc hin ca mt gii thut

    Phng php th nghim: Chng ta vit chng trnh v cho chy chngtrnh vi cc d liu vo khc nhau trn mt my tnh no . Thi gian chychng trnh ph thuc vo cc nhnt sau y:

    1. Cc d liu vo

    2. Chng trnh dch chuyn chng trnh ngun thnh chngtrnh m my.

    3. Tc thc hin cc php ton ca my tnh c s dng chychng trnh.

    V thi gian chy chng trnh ph thuc vo nhiu nhn t, nn ta khngth biu din chnh xc thi gian chy l bao nhiu n v thi gian chun,chng hn n l bao nhiu giy.

    Phng php l thuyt: ta s coi thi gian thc hin ca thut ton nh lhm s ca c d liu vo. C ca d liu vo l mt tham s c trng chod liu vo, n c nh hng quyt nh n thi gian thc hin chngtrnh. Ci m chng ta chn lm c ca d liu vo ph thuc vo cc thutton c th. Chng hn, i vi cc thut ton sp xp mng, th c ca d

    liu vo l s thnhphn ca mng; i vi thut ton gii h n phng trnhtuyn tnh vi n n, ta chn n l c. Thng thng d liu vo l mt snguyn dng n. Ta s s dng hm s T(n), trong n l c d liu vo,

    biu din thi gian thc hin ca mt thut ton.

    Ta c th xc nh thi gian thc hin T(n) l s php ton s cp cn phitin hnh khi thc hin thut ton. Cc php ton s cp l cc php ton mthi gian thc hin b chn trn bi mt hng s ch ph thuc vo cch cit c s dng(Ngn nglp trnh, my tnh). Chng hn cc php tons hc +, -, *, /, cc php ton so snh =, ... l cc php ton s cp.

    11..44..11.. pphhcc ttpp ttnnhh ttoonn ccaa ggiiii tthhuuttKhi nh gi thi gian thc hin bng phng php ton hc, chng ta s

    b qua nhn t ph thuc vo cch ci t, ch tp trung vo xc nh lnca thi gian thc hin T(n). K hiu ton hc O (c l ln) c s dng m t ln ca hm T(n).

    Gi s n l s nguyn khng m, T(n) v f(n) l cc hm thc khng m.Ta vit T(n) = O(f(n)) (c : T(n) l ln ca f(n)), nu v ch nu tn ti cchng s dng c v n0 sao cho T(n) c.f(n), vi n > n0.

  • 7/31/2019 Ctdl&Gt Manh

    13/70

  • 7/31/2019 Ctdl&Gt Manh

    14/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1144

    b) Qui tc nhn:

    Nu tng ng vi P1 v P2 l T1(n) = O(f(n)), T2(n) = O(g(n)) th thi

    gian thc hin P1 v P2 lng nhau s l : T1(n)T2(n) = O(f(n)g(n))Trong sch bo quc t cc thut ton thng c trnh by di dng

    cc th tc hoc hm trong ngn ng ta Pascal. nh gi thi gian thchin thut ton, ta cn bit cch nh gi thi gian thc hin cc cu lnh caPascal. Cc cu lnh trong Pascal c nh ngha qui nh sau:

    1. Cc php gn, c, vit, goto l cc cu lnh. Cc lnh ny gi l lnhn

    2. Nu S1, S2,..., Snl cc cu lnh th

    begin S1, S2,..., Sn endl cu lnh. Lnh ny gi l hp thnh (hoc khi).

    3. Nu S1 v S2l cc cu lnh v E l biu thc logic th

    if E then S1 else S2

    l cu lnh, v

    if E then S1

    l cu lnh. Cc lnh ny gi l lnh if.

    4. Nu S1, S2,..., Sn + 1 l cc cu lnh, E l biu thc c kiu th t mc, v v1, v2, ..., vnl cc gi trcng kiu vi E th

    case E of

    v1 : S1 ;

    v2 : S2 ;

    ...........

    vn : Sn ;[else Sn + 1]

    end;

    l cu lnh. Lnh ny c gi l lnh case.

    5. Nu S l cu lnh v E l biu thc logic th

    while E do S

    l cu lnh. Lnh ny c gi l lnh while.

  • 7/31/2019 Ctdl&Gt Manh

    15/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1155

    6. Nu S1, S2,..., Sn l cc cu lnh, E l biu thc logic th

    repeat S1, S2,..., Sn until E

    l cu lnh. Lnh ny c gi l lnh repeat7. Vi S l cu lnh, E1 v E2 l cc biu thc c cng mt kiu th t

    m c, th

    for i:= E1 to E2 do S

    l cu lnh, v

    for i:= E2 downto E1 do S

    l cu lnh. Lnh ny c gi l lnh for.

    Gi s rng, cc lnh gn khng cha cc li gi hm. Khi nh githi gian thc hin mt chng trnh, ta c th p dng phng php quisau

    1. Thi gian thc hin cc lnh n : gn, c, vit l O(1)

    2. Lnh hp thnh : thi gian thc hin lnh hp thnh c xc nhbi lut tng.

    3. Lnh if : Gi s thi gian thc hin cc lnh S1, S2 l O(f(n)) vO(g(n)) tng ng. Khi thi gian thc hin lnh if l O(max (f(n), g(n)))

    4. Lnh case: Lnh ny c nh gi nh lnh if5. Lnh while : Gi s thi gian thc hin lnh S (thn ca while) l

    O(f(n)) . Gi s g(n) l s ti a cc ln thc hin lnh while l O(f(n)g(n)).

    6. Lnh repeat :Gi s thi gian thc hin khi begin S1, S2, ...,Sn endl O(f(n)). Gi s g(n) l s ln ti a cc ln lp. Khi thi gian thc hinlnh repeat l O(f(n)g(n)).

    7. Lnh for : Lnh ny c nh gi tng t nh lnh repeat vwhile.

    *) nh gi th tc (hoc hm) qui

    Trc ht chng ta xt mt v d c th. Ta s nh gi thi gian thc hinca hm qui sau

    Function Fact (n: integer) : integer;

    Begin

    if n

  • 7/31/2019 Ctdl&Gt Manh

    16/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1166

    Trong hm ny c ca d liu vo l n. Gi s thi gian thc hin hm l

    T(n). Vi n =1, ch cn thc hin lnh gn fact := 1, do T(1) = O(1).Vi n> 1. cn thc hin lnh gn fact := n*fact(n - 1). Do thi gian T(n) lO(1) ( thc hin php nhn v php gn) cng vi T(n -1) ( thc hin ligi qui fact(n - 1)). Tm li, ta c quan h qui sau:

    T(1) = O(1)

    T(n) = O(1) + T(n - 1)

    Thay cc O(1) bi cc hng no , ta nhn c quan h qui sau

    T(1) = C1

    T(n) = C2 + T(n - 1) gii phng trnh qui, tm T(n), chng ta p dng phng php th lp.Ta c phng trnh qui

    T(m) = C2 + T(m - 1), vi m > 1

    Thay m ln lt bi 2, 3,..., n - 1, n, ta nhn c cc quan h sauT(2) = C2 + T(1)

    T(3) = C2 + T(2)

    ..........................T(n -1) = C2 + T(n -2)

    T(n) = C2 + T(n - 1)

    Bng cc php th lin tip, ta nhn c

    T(n) = (n - 1) C2 + T(1)Hay T(n) = (n - 1) C2 + C1, trong C1 v C2 l cc hng no . Do ,T(n) = O(n).

    T v d trn, ta suy ra phng php tng qut sau y nh gi thigian thc hin th tc (hm) qui. n gin, ta gi thit rng cc th tc(hm) l qui trc tip. iu c ngha l cc th tc (hm) ch ch aa ccli gi qui n chnh n. Gi s thi gian thc hin th tc l T(n), vi n lc d liu u vo. Khi thi gian thc hin cc li gi qui c nh

    gi thng qua cc bc sau :

  • 7/31/2019 Ctdl&Gt Manh

    17/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1177

    - nh gi thi gian thc hin T(n0), vi n0l c d liu vo nh nhtc th c (trong v d trn, l T(1)).

    - nh gi thn ca th tc theo qui tc 1-7 (qui tc nh gi thi gianthc hin cc cu lnh) ta s nhn c quan h qui sau y

    T(n) =F(T(m1), T(m2),..., T(mk))

    Trong m1, m2,..., mk < n. Gii phng trnh qui ny, ta s nhn c snh gi ca T(n).

    c) Phn tch mt s thut ton

    V d 1: Phn tch thut ton Euclid

    Function Euclid (m, n : integer) :integer;

    var r : integer ;

    begin

    r := m mod n; (1)

    while r 0 do (2)

    begin

    m := n; (3)

    n :=r; (4)r := m mod n; (5)

    end;

    Euclid := n; (6)

    end;

    Thi gian thc hin thut ton ph thuc vo s nh nht trong hai s mv n. Gi s m n > 0, khi c ca d liu vo l n. Cc lnh (1) v (6) cthi gian thc hin l O(1) v chng l cc cu lnh gn. Do thi gian thchin thut ton l thi gian thc hin cc lnh while, ta nh gi thi gianthc hin cu lnh (2). Thn ca lnh ny, l khi gm ba lnh (3), (4) v (5).Mi lnh c thi gian thc hin l O(1). Do khi c thi gian thc hin lO(1). Ta cn phi nh gi s ln nht cc ln thc hin lp khi.

    Ta c

    m = n.q1 + r1 , 0 r1 < n

    n = r1.q2 + r2 , 0 r2 < r1

    Nu r1 n/2 th r2 < r1 n/2, do r2 < n/2

  • 7/31/2019 Ctdl&Gt Manh

    18/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1188

    Nu r1 > n/2 th q2 = 1, tc l n = r1 + r2, do r2 < n/2.

    Tm li, ta lun c r2 < n/2.

    Nh vy c hai ln thc hin khi lnh th phn d r gim i cn mt naca n. Gi k l s nguyn ln nht sao cho 2k n. Suy ra s ln lp ti a l2k + 1 2log2n + 1. Do thi gian thc hin lnh while l O(log2n). cng l thi gian thc hin ca thut ton.

    V d 2: Gii thut tnh gi tr ca ex tnh theo cng thc gn ng

    ex = 1 + x/1! + x2/2! +...+xn/ n!, vi x v n cho trc

    Function Exp1 (n : integer, x :real) :real;

    {Tnh tng s hng sau cng dn li}

    var s, p :real;i, j :integer;

    begin

    s := 1; (1)

    for i : =1 to n do (2)

    begin

    p := 1; (3)

    for j :=1 to i do (4)

    p := p*x/j; (5)

    s := s + p; (6)end;

    exp1 := s; (7)

    end;

    end;

    Ta thy cu lnh (1) v (7) l cc cu lnh gn nn chng c thi gian thchin l O(1). Do thi gian thc hin ca gii thut ph thuc vo cu lnh(2). Ta nh gi thi gian thc hin cu lnh ny. Trong thn ca cu lnhny bao gm cc lnh (3), (4), (5) v (6). Hai cu lnh (3) v (6) c thi gian

    thc hin l O(n) v mi cu lnh c thc hin n ln. Ring cu lnh (5) ththi gian thc hin n cn ph thuc vo cu lnh (4) nn ta cn phi nhgi thi gian thc hin cu lnh (5).

    Vi i = 1 th cu lnh (5) c thc hin 1 ln

    Vi i = 2 th cu lnh ny c thc hin 2 ln

    ............................................................................

    Vi i = n th cu lnh ny c thc hin n ln

    Suy ra tng s ln thc hin cu lnh (5) l

    1 + 2 + ... + n = n(n + 1)/2 ln

  • 7/31/2019 Ctdl&Gt Manh

    19/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 1199

    Do thi gian thc hin cu lnh ny l O(n2) v y cng l thi gianthc hin ca gii thut.

    Ta c th vit gii thut ny theo cch khc : Da vo s hng trc tnh s hng sau

    2.!12!

    2x xx ,...,

    n

    x

    n

    nx

    n

    n

    .)!1(

    1

    !

    x

    Function Exp2 (n : integer, x :real) :real;

    Var s, p :real;

    i :integer;

    Begin

    s := 1; (1)p := 1; (2)

    for i : =1 to n do (3)

    begin

    p := p*x/i;; (4)

    s := s + p; (5)

    end;

    exp2 := s; (6)

    end;

    End;Tng t nh gii thut trc cccu lnh (1), (2), (6) c thi gian thc

    hin l O(1). Do thi gian thc hin gii thut ph thuc vo cu lnh (3).V hai cu lnh (4) v (5) u c thi gian thc hin l O(n) nn thi gianthc hin ca gii thut l O(n)

    Nh vy t hai gii thuttrn ta c th ni rng gii thut th hai tt hngii thut th nht vi n ln (vi n nh th thi gian thc hin hai giithut ny tng ng nhau).

    V d 3: Tm trong dy s s1, s2,..., snmt phn t c gi tr bng x cho

    trcVo: Dy s1, s2,..., snv kho cn tm x

    Ra: V tr phn t c kho x hoc l n + 1 nu khng tm thy.

    Function linear_search(s : day; n :integer ; x : kdl ) :integer;{Trong dy, kdl l dy cc phn t v kiu d liu c nh

    ngha t trc}Var i : integer;Begin

    i := 0;

  • 7/31/2019 Ctdl&Gt Manh

    20/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2200

    repeati := i + 1;

    until (i > n) or (s[i] = x);

    linear_search := i;End;

    Trong v d ny ta khng th nh gi nh hai v d trn. Do qu trnh tmkim khng nhng ph thuc vo kch thc ca d liu vo, m cn phthuc vo tnh trng ca d liu. Tc l thi gian thc hin gii thut cn phthuc vo v tr ca phn t trong dy bng x. Qu trnh tm kim ch dngkhi tm thy phn t bng x, hoc duyt ht dy m khng tm thy. V vy,trong nhng trng hp nh trn ta cn phi nh gi thi gian tnh tt nht,ti nht v trung bnh ca thut ton vi di u vo n. R rng thi gian

    tnh ca thut ton c th c nh gi bi s ln thc hin cu lnhi := i + 1

    Nu s[1] = x th cu lnh i := i + 1 trong thn vng lp repeat thc hin1ln. Do thi gian tnh tt nht ca thut ton l O(1).

    Nu x khng xut hin trong dy kho cho, th cu lnh i := i + 1cthc hin n ln. V th thi gian tnh ti nht l O(n).

    Cui cng ta tnh thi gian tnh trung bnh ca thut ton. Nu x c tmthy v tr th i ca dy th cu lnh i := i + 1 phi thc hin i ln (i = 1, 2,..., n), cn nu x khng xut hin trong dy th cu lnh i := i + 1phi thchin n ln.

    T suy ra s ln trungbnh phi thc hin cu lnh i := i + 1 l

    [(1 + 2 + ... + n) + n] /(n + 1)

    Ta c

    [(1 + 2 + ... + n) + n] /(n + 1) (n2 + n)/(n + 1) = n

    Vy thi gian tnh trung bnh ca thut ton l O(n).

    Nhn xt: Vic xc nh T(n) trong trng hp trung bnh thng gpnhiu kh khn v s phi dng ti cng c ton c bit, hn na tnh trung

    bnh c nhiu cch quan nim. Trong cc trng hp m T(n) trung bnhthng kh xc nh ngi ta thng nh gi gii thut qua gi tr xu nhtca T(n). Hn na, trong mt s lp thut ton, vic xc nh trng hp xunht l rt quan trng.

  • 7/31/2019 Ctdl&Gt Manh

    21/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2211

    CHNG2: QUY V GII THUT QUY

    22..11.. KKhhii nniimm qquuyy..

    Ta ni mt i tng l quy nu n bao gm chnh n nh mt b phnhoc n c nh ngha di dng ca chnh n.

    V d: Trong ton hc ta gp cc nh ngha quy sau:

    + S t nhin:

    - 1 l s t nhin.

    - n l s t nhin nu n-1 l s t nhin.

    + Hm n giai tha: n!

    - 0! = 1

    -Nu n>0 th N! = n(n-1)!

    22..22.. GGiiii tthhuutt qquuyy vv tthh ttcc qquuyy ..

    2.2.1. Gii thut quy

    Nu li gii ca ca mt bi ton T c gii bng li gii ca mt biton T1, c dng ging nh T, th li gii c gi l li gii quy. Gii

    thut tng ng vi li gii quy gi l gii thut quy. y T1c dng ging T nhng theo mt ngha no T1phi nh hn

    T.

    Chng hn vi bi ton tnh n! th n! l bi ton T cn (n-1)! l bi ton T1ta thy T1cng dng vi T nhng nh hn (n-1 < n).

    Xt bi ton tm mt t trong quyn t in. C th nu gii thut nh sau:

    If t in l mt trang then

    tm t trong trang ny

    else begin

    M t in vo trang gia

    Xc nh xem na no ca t in cha t cn tm;

    if t nm na trc then

    tm t na trc

    else tm t na sau.

    end;

  • 7/31/2019 Ctdl&Gt Manh

    22/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2222

    Gii thut ny c gi l gii thut quy. Vic tm t trong quyn tin c c gii quyt bng bi ton nh hn l vic tm t trong mtna thch hp ca quyn t in.

    Ta thy c hai im chnh cn lu :

    - Sau mi ln t in c tch lm i th mt na thch hp s li ctm bng mt chin thut nh dng trc (na ny li c tch i).

    - C mt trng hp c bit, l sau nhiu ln tch i t in ch cnmt trang. Khi vic tch i ngng li v bi ton tr thnh nh tac th tm t mong mun bng cch tm tun t. Trng hp ny gi ltrng hp suy bin.

    2.2.2. Th tc quyVi gii thut tm kim nh trn ta vit mt th tc tng ng nh sau:

    Procedure SEARCH(dict, word);

    {Tm t word trong t in dict}

    Begin

    if t in ch cn l mt trang then

    tm t word trong trang ny

    else beginm t in vo trang gia

    xc nh xem na no ca t in cha t word

    if t word nm na trc ca t in then

    call SEARCH(dict 1, word)

    else call SEARCH(dict 2, word)

    end;

    End;

    Th tc trn c gi l th thc quy. N c nhng c im c bnsau:

    - Trong th tc quy c li gi n chnh th tc . y trong th tcSEARCH c li gi call SEARCH (li gi ny c gi l li gi quy).

    - Sau mi ln c li gi quy th kch thc ca bi ton c thu nhhn trc. y khi c li gi call SEARCH th kch t in ch cn bngmt na so vi trc .

  • 7/31/2019 Ctdl&Gt Manh

    23/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2233

    - C mt trng hp c bit, trng hp suy bin l khi li gi callSEARCH vi t in dict ch cn l mt trang. Khi trng hp ny xy ra th

    bi ton cn li s c gii quyt theo mt cch khc hn (tm t word trong

    trang bng cch tm kim tun t) v vic gi quy cng kt thc. Chnhtnh trng kch thc bi ton gim dn sau mi ln gi quy s m bodn ti trng hp suy bin.

    Mt s ngn ng cp cao nh: Pascal, C, Algol v.v... cho php vit cc thtc quy. Nu th tc quy cha li gi n chnh n th gi l quytrc tip. Cng c trng hp th cha li gi n th tc khc m th tcny li cha li gi n n. Trng hp ny gi l quy gin tip.

    2.3. u v nhc im ca gii thut quy

    Qua cc v d trn ta c th thy: quy l mt cng c gii quyt ccbi ton. C nhng bi ton, bn cnh gii thut quy vn c nhng giithut lp kh n gin v hu hiu. Chng hn gii thut lp tnh n! c thvit:

    Function Factorial(n)

    Begin

    if (n=0) or (n=1) then gt:=1

    else begin

    gt:=1;

    for i:=2 to n do

    gt := gt*i;

    end;

    Factorial := gt;

    End;

    Hoc ta xt gii thut lp tnh s Fibonacci th n:Function Fibonacci(n)

    Begin

    if n

  • 7/31/2019 Ctdl&Gt Manh

    24/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2244

    Tuy vy, quy vn c vai tr xng ng ca n. C nhng bi ton vicngh ra gii thut quy thun li hn nhiu so vi gii thut lp v c nhnggii thut quythc s c hiu lc cao, chng hn gii thut sp xp kiu

    phn on (Quick Sort) hoc cc gii thut duyt cy nh phn m ta s c dpxt ti trong mn hc ny.

    Mt iu na cn ni thm l: v mt nh ngha, cng c quy chophp xc nh mt tp v hn cc i tng bng mt pht biu hu hn. Tas thy vai tr ca cng c ny trong nh ngha vn phm, nh ngha c

    php ngn ng, nh ngha mt s cu trc d liu v.v...

    Ch thch: khi thay cc gii thut quy bng cc gii thut lp tng ngta gi l kh quy. Tuy nhin c nhng bi ton vic kh quy tng i

    n gin (v d: gii thut tnh n!, tnh s fibonacci ...), nhng c nhng biton vic kh quy l rt phc tp (v d: bi ton thp h ni, gii thut spxp phnon...).

    C mt mi quan h khng kht gia quy v quy np ton hc. Cchgii quy mt bi ton da trn vic nh r li gii cho trng hp khngsuy bin ri thit k lm sao li gii ca bi ton c suy t li gii ca

    bi ton nh hn, cng loi.

    Tng t nh vy, quy np ton hc chng minh mt tnh cht no ngvi s t nhin cng bng chng minh tnh cht y ng i vi mt trnghp c s (thng ng vi t/h N = 1) v ri chng minh tnh cht y ngvi N bt k, nu n ng vi cc s t nhin nh hn N.

    Do , quy np ton hc thng c dng chng minh cc tnh chtc lin quan n gii thut quy. V d: dng quy np chng minh giithut quy N! v Fibonacci.

    22..44.. CCcc bbii ttoonn qquuyy ccnn bbnn..

    Khi bi ton ang xt hoc d liu ang x l c nh ngha di dng

    quy th vic thit k cc gii thut quy t ra rt thun li. Hu nh nphn nh rt st ni dung ca nh ngha .Ta xt mt s bi ton sau:

    2.4.1. Hm n!

    Hm ny c nh ngha nh sau:

    0nnu1)-nFactorial(*n

    0nnu1)(nFactorial

    Gii thut quy c vit di dng hm di y:

  • 7/31/2019 Ctdl&Gt Manh

    25/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2255

    Function Factorial(n)

    Begin

    if n=0 then Factorial:=1

    else Factorial := n*Factorial(n-1);End;

    Trong hm trn li gi n n nm cu lnh gn sau else.

    Mi ln gi quy n Factorial, th gi tr ca n gim i 1. V d,Factorial(4) gi n Factorial(3), gi n Factorial(2), gi n Factorial(1),gi n Factorial(0) y l trng hp suy bin, n c tnh theo cch c

    bit Factorial(0) = 1.

    2.4.2. Bi ton dy s FIBONACCI.

    Dy s Fibonacci bt ngun t bi ton c v vic sinh sn ca cc cpth. Bi ton c t ra nh sau:

    - Cc con th khng bao gi cht.

    - Hai thng sau khi ra i mt cp th mi s sinh ra mt cp th con.

    - Khi sinh con ri th c mi thng tip theo chng li sinh cmt cp con mi.

    Gi s bt u t mt cp th mi ra i th n thng th n s c baonhiu cp?

    V d vi n = 6, ta thy.

    Thng th 1: 1 cp (cp ban u)

    Thng th 2: 1 cp (cp ban u vn cha )

    Thng th 3: 2 cp ( c thm 1 cp con)

    Thng th 4: 3 cp (cp u vn thm)

    Thng th 5: 5 cp (cp con bt u )

    Thng th 6: 8 cp (cp con vn tip)t F(n) l s cp th thng th n. Ta thy ch nhng cp th c

    thng th n-2 mi sinh con thng th n do s cp th thng th n l:

    F(n) = f(n-2) + F(n-1) v vy F(n) c th c tnh nh sau:

    2nnu1)-F(n2)-F(n

    2nnu1)(nF

    Dy s th hin F(n) ng vi cc gi tr ca n = 1, 2, 3, 4..., c dng

    1 1 2 3 5 8 13 21 34 55....

  • 7/31/2019 Ctdl&Gt Manh

    26/70

  • 7/31/2019 Ctdl&Gt Manh

    27/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2277

    - Khng khi no c tnh hung a to trn a nh (d l tm thi).

    - c php s dng mt cc trung gian, chng hn cc B t tm

    a (gi l cc trung gian). i ti cch gii tng qut, trc ht ta xt vi trng hp n gin.

    *) Trng hp c 1 a:

    - Chuyn a t cc A sang cc C.

    *) Trng hp 2 a:

    - Chuyn a th nht t cc A sang cc B.

    - Chuyn a th hai t cc A sang cc C.

    - Chuyn a th nht t cc B sang cc C.Ta thy vi trng hp n a (n>2) nu coi n-1 a trn, ng vai tr nh

    a th nht th c th x l ging nh trng hp 2 a c, ngha l:

    - Chuyn n-1 a trn t A sang B.

    - Chuyn a th n t A sang C.

    - Chuyn n-1 a t B sang C.

    Nh vy, bi ton Thp H Ni tng qut vi n a c dn n biton tng t vi kch thc nh hn, chng hn t ch chuyn n a t cc

  • 7/31/2019 Ctdl&Gt Manh

    28/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2288

    A sang cc C nay l chuyn n-1 a t cc A sang cc B v mc ny thgii thut li l:

    - Chuyn n-2 a t cc A sang cc C.- Chuyn 1 a t cc A sang cc B.

    - Chuyn n-2 a t cc B sang cc C.

    v c nh th cho ti khi trng hp suy bin xy ra, l trng hp ngvi bi ton chuyn 1 a.

    Vy th ccc im ca quy trong gii thut c xc nh v ta cthvit gii thut quy ca bi ton Thp H N nh sau:

    Procedure Chuyen(n, A, B, C)

    Beginif n=1 then chuyn a t A sang Celse begin

    call Chuyen(n-1, a, C, B);

    call Chuyen(1, A, B, C);

    call Chuyen(n-1, B, A, C) ;

    end;

    End;

  • 7/31/2019 Ctdl&Gt Manh

    29/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 2299

    CHNG 3: DANH SCH

    3.1. Khi nim danh sch

    a) nh ngha :V mt ton hc, danh sch l mt dy hu hn cc phn t thuc cng

    mt lp i tng no . Chng hn, danh sch sinh vin ca mt lp, danhsch cc s nguyn, danh sch cc bo xut bn hang ngy th

    Gi s L l mt danh sch c n phn t (n >= 0)

    L = (a1, a2, , an)

    Ta gi n l di ca danh sch. Nu n >=1 th a1c gi l phn t utin, anc gi l phn t cui cng ca danh sch L. Nu n = 0 th danh

    sch L c gi l danh sch rng.Mt tnh cht quan trng ca danh sch l cc phn t ca n c sp

    tuyn tnh : nu n>1 th phn t a ii trc phn t ai+1. Ta gi ai (i=1, 2,, n) l phnt v tr th i ca danh sch.

    b) Cc php ton trn danh sch

    Ty thuc vo c im, tnh cht ca tng loi danh sch m mi loidanh sch c th c hoc ch cn thit c mt s php ton (thao tc) nhtnh no . Ni chung trn danh sch thng c cc php ton nh sau :

    - To mi mt danh sch

    - Thm mt phn t vo danh sch

    - Tm kim mt phn t trong danh sch

    - Loi b bt mt phn t khi danh sch

    - Cp nht gi tr cho 1 phn t trong danh sch

    - Sp xp th t cc phn t trong danh sch

    - Tch mt danh sch thnh nhiu danh sch-Nhp nhiu danh sch thnh mt danh sch

    - Sao chp mt danh sch

    - Hy danh sch

    Sau y ta s xt mt s loi danh sch v ng dng ca chng.

    3.2. Danh sch lin kt:

    3.2.1. nh ngha

  • 7/31/2019 Ctdl&Gt Manh

    30/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3300

    Danh sch lin kt l tp hp cc phn t m gia chng c mt s ni ktvi nhau thng qua vng lin kt ca chng.

    S ni kt gia cc phn t trong danh sch lin kt l s qun l, rangbuc ln nhau v ni dung ca phn t ny v a ch nh vphn t kia. Tythuc vo mc v cch thc ni kt m danh sch lin kt c th chiathnh nhiu loi khc nhau :

    - Danh sch lin kt n

    - Danh sch lin kt kp

    - Danh sch a lin kt

    - Danh sch lin kt vng (vng n, vng i)

    Mi loi danh sch s c cch biu din cc phn t (cu trc d liu)ring v cc thao tc trn . Trong gio trnh ny chng ta ch trnh by 02loi danh sch lin kt c bn l : Danh sch lin kt n v danh sch linkt kp

    3.2.2. Danh sch lin kt n

    a) Khi nimDanh sch lin kt n (singly linked list) l danh sch m mi phn t

    ca danh sch c lu tr trong 1 phn t nh, gi l nt (node). Mi nt

    bao gm 1 s nh k tip. Cc nt ny c th nm bt k ch no trong bnh. Trong mi nt, ngoi phn thng tin ng vi 1 phn t, cn c cha ach ca phn t ng sau n trong danh sch.

    C th hnh dung nt l 1 bn ghi (record), gm 2 trng:

    - Trng th nht Data cha gi tr lu trong nt .

    - Trng th hai Link cha lin kt (contr) ti nt k tip, tc l cha 1thng tin bit nt k tip nt trong danh sch l nt no. Trong t/h lnt cui cng (khng c nt k tip), trng ny c gn 1 gi tr c bit,

    k hiu l NULL.b) M t danh sch lin kt n

    Cu trc nt ca danh sch lin kt n

    Hnh 3.1: Cu trc nt ca danh sch lin kt n

  • 7/31/2019 Ctdl&Gt Manh

    31/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3311

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

    Hnh 3.2 : Danh sch lin kt n

    Quy c: Nu danh sch rng th Head = NULL

    c) Cc thao tc c bn trn danh sch lin kt n

    Mt s php ton thng c tc ng vodanh sch lin kt n:

    - Php b sung

    - Php loi b

    - Ghp 2 danh sch lin kt n (SV t xy dng).

    - Tch 1 danh sch lin kt n thnh 2 danh sch lin kt n (sinhvin t xy dng)

    Quy c: Vi 1 nt c a ch l P (c tr bi P), th:

    P^.Data ch trng Data ca nt P

    P^.Link ch trng Link ca nt P

    *Gii thut b sung

    T danh sch ban u

    mun chn thm 1 nt cha gi tr V vo v tr ca nt p, ta phi:

    1. To 1 nt mi NewNode cha gi tr V:

    New(NewNode); NewNode^.Data := V;

    2. Tm nt q l nt ng trc nt p trong DS.

  • 7/31/2019 Ctdl&Gt Manh

    32/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3322

    2.1. Nu tm thy th chnh li lin kt: q lin kt ti NewNode, NewNodelin kt ti p.

    NewNode^.Link := p;q^.Link := NewNode;

    2.2. Nu khng tm thy, ngha l p = Head, ta chnh li lin kt:NewNode lin kt ti Head (c) v t li Head = NewNode.

    NewNode^.Link := Head; Head := NewNode;Chng trnh

    Procedure Push(V: Integer, p: PNode);

    Var {Chn V vo trc v tr p ca DS}q, NewNode: PNode;

    Begin {To ra 1 nt mi NewNode}New(NewNode); NewNode^.Data := V;

    If p = Head Then

    BeginNewNode^.Link := Head;

    Head := NewNode;

    End

    Else

    Begin {Tm n nt q ng lin trc nt p}q := Head;While q^.Link p do q := q^.Link;

    NewNode^.Link := q^.Link;

    q^.Link := NewNode;

    End;

    End;

    *Gii thut loi b

    T danh sch ban u

    Mun loi b nt p khi danh sch lin kt n, ta phi tm nt q l nt

    ng lin trc nt p trong danh sch: q^.Link = p

  • 7/31/2019 Ctdl&Gt Manh

    33/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3333

    1. Nu tm thy th chnh li lin kt: q lin kt thng ti nt lin sau p(khi qu trnh duyt danh sch bt u t Head khi duyt ti q s nhy quakhng duyt p na). Gii phng b nh cp cho nt p.

    Q^.Link := p^.Link;

    Dispose(p);

    2. Nu khng tm thy, ngha l p = Head, ta ch vic: t li Head bngnt ng k tip Head (c) trong DS. Gii phng b nh cp cho nt p (Head

    c).Head := Link(Head); Dispose(p);

    Chng trnh

    Procedure Pop(p: PNode);

    Var {Loi b phn t v tr p ca danh sch}q: PNode;

    Begin

    If Head = NIL Then writeln(Danh sach rong)

    Else If p = Head ThenBegin

    Head := p^.Link;

    Dispose(p);

    End

    Else

    Begin {Tm n nt q ng lin trc nt p}q := Head;

    While q^.Link p do q := q^.Link;

    q^.Link := p^.Link;Dispose(p);

    End;

    End;

    3.2.3. Danh sch lin kt kp

    a) Khi nim

    Cc kiu danh sch nu ch c th duyt qua danh sch theo 1 chiu.Trong 1 s ng dng i khi xut hin yu cu i ngc li. c c c 2kh nng, cn phi xy dng 1 loi danh sch khc, l danh sch lin kt

    kp.

  • 7/31/2019 Ctdl&Gt Manh

    34/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3344

    Khi nim: Danh sch lin kt kp (Doubly linked list) l danh sch m mi nt t 2 con tr, 1 tr ti nt ng trc n, 1 tr ti nt ng saun.C th hnh dung mi nt trong DSLK kp l 1 bn ghi (record), gm 3

    trng:

    - Trng th nht(Data) cha gi tr lu trong nt

    - Trng th hai (Next) cha lin kt (con tr) ti nt k tip.

    - Trng th ba (Prev) cha lin kt (con tr) ti nt lin trc

    b) M t danh sch lin kt kp

    Cu trc nt ca DSLK kp:

    Hnh 3.4 : Cu trc lin kt kpKhc vi DSLK n, DSLK kp c hai cht: Nt u tin trong DS gi l

    First, nt cui cng trong DS gi l Last

    C 2 cch duyt DSLK kp:

    - T First, da vo lin kt Next i sang nt k tip, n khi gp gi trc bit NULL (duyt qua nt cui) th dng li.

    - T Last, da vo lin kt Prev i sang nt lin trc, n khi gp gitr c bit (duyt qua nt u) th dng li.

    Hnh 3.5 : Danh sch lin kt kp

    c) Cc thao tc c bn trn danh sch lin kt kpGing nh danh sch lin kt n chng ta cng ch xt ti 2 thao tc b

    sung v loi b

    *Gii thut b sung

    Cho hai con tr First v Last ln lt tr ti nt u v nt cui ca mtdanh sch lin kt kp, M l con tr tr ti mt nt trong danh sch ny. Giithut ny thc hin b sung mt nt mi, m d liu cha X, vo trc nt

    tr bi M

  • 7/31/2019 Ctdl&Gt Manh

    35/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3355

    PPrroocceedduurree BBoo__ssuunngg((VVaarr FFiirrsstt,, LLaasstt :: TTRROO;; MM:: TTRROO;; XX:: IItteemm));;VVaarr PP :: TTRROO;;

    BBeeggiinn

    {{11.. TToo nntt mmii}}NNeeww((PP));; PP^..iinnffoorr ::== XX;;

    {{TTrrnngg hhpp ddaannhh sscchh rrnngg}}iiff((LLaasstt == NNIILL)) tthheenn

    bbeeggiinn

    PP^..NNeexxttFFiirrsstt ::== NNIILL;; PP^..NNeexxttLLaasstt ::== NNIILL;;

    FFiirrsstt ::== PP;; LLaasstt ::== PP;;

    EEnndd

    EEllssee{{TTrrnngg hhpp MMttrr ttii nnttuu ttiinn}}

    iiff((MM== FFiirrsstt)) tthheenn

    bbeeggiinn

    PP^..NNeexxttFFiirrsstt ::== NNIILL;;

    PP^..NNeexxttLLaasstt::== MM

    MM ..NNeexxttFFiirrsstt ::== PP;;

    LLeefftt ::== PP;;

    eenndd

    eellssee {{BBssuunngg vvoo ggiiaa}}bbeeggiinnPP^..NNeexxttFFiirrsstt::== MM ..NNeexxttFFiirrsstt;;PP^..NNeexxttLLaasstt ::== MM;;

    MM ..NNeexxttFFiirrsstt ::== PP;;

    PP^..NNeexxttFFiirrsstt ^..NNeexxttLLaasstt ::== PP;;

    eenndd;;

    EEnndd;;

    *Gii thut loi bCho hai con tr First v Last ln lt tr ti nt u v nt cui ca mtdanh sch lin kt kp, M l con tr tr ti mt nt trong danh sch ny. Giithut ny thc hin loi b M ra khi danh sch :

    PPrroocceedduurree LLooaaii__bboo((VVaarr FFiirrsstt,, LLaasstt :: TTRROO;; MM:: TTRROO));;

    BBeeggiinn

    iiffRR == NNIILL tthheenn

    wwrriittee((''DDaannhh ssaacchh rroonngg''))

    eellssee

  • 7/31/2019 Ctdl&Gt Manh

    36/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3366

    iiffFFiirrsstt == LLaasstt tthheenn

    bbeeggiinnFFiirrsstt ::== NNIILL;; LLaasstt ::== NNIILL;;

    eenndd

    eellssee

    iiffMM== FFiirrsstt tthheenn

    bbeeggiinn

    FFiirrsstt ::== FFiirrsstt^..NNeexxttLLaasstt;;

    FFiirrsstt^..NNeexxttFFiirrsstt ::== NNIILL;;

    eenndd

    eellssee iiffMM== LLaasstt tthheenn

    bbeeggiinn

    LLaasstt::== LLaasstt^..NNeexxttFFiirrsstt;;LLaasstt^..NNeexxttLLaasstt ::== NNIILL;;

    eenndd

    eellssee bbeeggiinn

    MM ..NNeexxttFFiirrsstt ^..NNeexxttLLaasstt ::== MM ..NNeexxttLLaasstt;;

    MM ..NNeexxttLLaasstt ^..NNeexxttFFiirrsstt ::== MM ..NNeexxttFFiirrsstt;;

    eenndd;;

    EEnndd;;

    3.3. Ngn xp (Stack)3.3.1. nh ngha

    Stack l mt vt cha (container) cc i tng lm vic theo c ch LIFO(Last In First Out) ngha l vic thm mti tng vo stack hoc ly mti tng ra khi stack c thc hin theo c ch "Vo sau ra trc".

    Cc i tng c th c thm vo stack bt k lc no nhng ch c itng thm vo sau cng mi c php ly ra khi stack.

    Thao tc thm 1 itng vo stack thng c gi l "Push". Thao tc

    ly 1 i tng ra khi stack gi l "Pop".Trong tin hc, CTDL stack c nhiu ng dng: kh qui, t chc lu vt

    cc qu trnh tm kim theo chiu su v quay lui, vt cn, ng dng trong ccbi ton tnh ton biu thc.

    3.3.2. Cc thao tc trn stack

    Ta c th nh ngha CTDL stack nh sau: stack l mt CTDL tru tng(ADT) tuyn tnh h tr 2 thao tc chnh:

    - Push(o): Thm i tng o vo u stack

  • 7/31/2019 Ctdl&Gt Manh

    37/70

  • 7/31/2019 Ctdl&Gt Manh

    38/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3388

    LIST * S;

    Lnh S.pHead=l.pTail= NULL s to ra mt Stack S rng.

    - Kim tra stack rng :char IsEmpty(LIST &S)

    {

    if (S.pHead == NULL) // stack rngreturn 1;

    else return 0;

    }

    - Thm mt phn t p vo stack S

    void Push(LIST &S, Data x)

    {

    InsertHead(S, x);

    }

    - Trch hu phn t nh stack S

    Data Pop(LIST &S)

    {

    Data x;

    if(isEmpty(S)) return NULLDATA;

    x = RemoveFirst(S);return x;

    }

    - Xem thng tin ca phn t nh stack S

    Data Top(LIST &S)

    {

    if(isEmpty(S)) return NULLDATA;

    return l.Head->Info;

    }

    3.3.5. ng dng ca Stack

    Cu trc Stack thch hp lu tr cc loi d liu m trnh t truy xutngc vi trnh t lu tr, do vy mt s ng dng sau thng cn n stack:

    - Trong trnh bin dch (thng dch), khi thc hin cc th tc, Stackc s dng lu mi trng ca cc th tc.

    - Trong mt s bi ton ca l thuyt th (nh tm ng i), Stackcng thng c s dng lu d liu khi gii cc bi ton ny.

  • 7/31/2019 Ctdl&Gt Manh

    39/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 3399

    -Ngoi ra, Stack cng cn c s dng trong trng hp kh quiui.

    33..44.. HHnngg

    ii ((QQuueeuuee))..3.4.1. nh ngha

    Hng i l mt vt cha (container) cc i tng lm vic theo c chFIFO (First In First Out) ngha l vic thm mt i tng vo hng ihoc ly mt i tng ra khi hng i c thc hin theo c ch "Votrc ra trc".

    Cc i tng c th c thm vo hng i bt k lc no nhng ch ci tng thm vo u tin mi c php ly ra khi hng i.

    Thao tc thm mt i tng vo hng i v ly mt i tng ra khihng i ln lt c gi l "enqueue" v "dequeue".

    Vic thm mt i tng vo hng i lun din ra cui hng i vmt phn t lun c ly ra t u hng i.

    Trong tin hc, CTDL hng i c nhiu ng dng: kh qui, t chc luvt cc qu trnh tm kim theo chiu rng v quay lui, vt cn, t chc qunl v phn phi tin trnh trong cc h iu hnh, t chc b m bn phm, .

    Ta c th nh ngha CTDL hng i nh sau: hng i l mt CTDL trutng (ADT) tuyn tnh.

    3.4.2. Cc thao tc trn trn hng iEnQueue(o): Thm i tng o vo cui hng i

    DeQueue(): Ly i tng u queue ra khi hng i v tr v gi trca n. Nu hng i rng th li s xy ra.

    IsEmpty(): Kim tra xem hng i c rng khng.

    Front(): Tr v gi tr ca phn t nm u hng i m khng hy n.Nu hng i rng th li s xy ra.

    Cc thao tc thm, trch v hu mt phn t phi c thc hin 2 phakhc nhau ca hng i do hot ng ca hng i c thc hin theonguyn tc FIFO (First In First Out - vo trc ra trc).

  • 7/31/2019 Ctdl&Gt Manh

    40/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4400

    Cng nh stack, ta c th dng cu trc mng 1 chiu hoc cu trc danhsch lin kt biu din cu trc hng i.

    3.4.3. Biu din hng i dng mngTa c th to mt hng i bng cch s dng mt mng 1 chiu vi kch

    thc ti a l N (v d, N c th bng 1000) theo kiu xoay vng (coi phnt an-1k vi phn t a0).

    Nh vy hng i c th cha ti a N phn t. Phn t nm u hngi (front element) s c ch s f. Phn t nm cui hng i (rear element)s c ch s r (xem hnh).

    khai bo mt hng i, ta cn mt mng mt chiu Q, hai bin nguyn

    f, r cho bit ch s ca u v cui ca hng i v hng s N cho bit kchthc ti a ca hng i. Ngoi ra, khi dng mng biu din hng i, tacng cn mt gi tr c bit gn cho nhng cn trng trnhng i. Gitr ny l mt gi tr nm ngoi min xc nh ca d liu lu trong hng i.Ta k hiu n l NULLDATA nh nhng phn trc.

    Trng thi hng i lc bnh thng:

    Trng thi hng i lc xoay vng:

    Cu hi t ra: khi gi tr f=r cho ta iu g ? Ta thy rng, lc ny hngi ch c th mt trong hai trng thi l rng hoc y. Coi nh mt bitp cc bn hy t suy ngh tm cu tr li trc khi c tip kim tra ktqu.

    Hng i c th c khai bo c th nh sau:

    Data Q[N] ;

    int f, r;

    Cng nh stack, do khi ci t bng mng mt chiu, hng i c kchthc ti a nn ta cn xy dng thm mt thao tc ph cho hng i:

    IsFull(): Kim tra xem hng i c y cha.

  • 7/31/2019 Ctdl&Gt Manh

    41/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4411

    3.4.4. Biu din hng i dng danh sch lin kt

    Ta c th to mt hng i bng cch s dng mt DSLK n.

    Phn t u DSKL (head) s l phn t u hng i, phn t cui DSKL(tail) s l phn t cui hng i.

    Sau y l cc thao tc tng ng cho array-queue:

    - To hng i rng:

    Lnh Q.pHead = Q.pTail = NULL s to ra mt hng i rng.- Kim tra hng i rng :

    char IsEmpty(LIST Q)

    {

    if (Q.pHead == NULL) // stack rngreturn 1;

    else return 0;

    }

    - Thm mt phn tp vo cui hng i

    void EnQueue(LIST Q, Data x)

    {

    InsertTail(Q, x);

    }

    - Trch/Hy phn t u hng i

    Data DeQueue(LIST Q)

    {

    Data x;

    if (IsEmpty(Q)) return NULLDATA;x = RemoveFirst(Q);

    return x;

    }

    - Xem thng tin ca phn t u hng i

    Data Front(LIST Q)

    {

    if (IsEmpty(Q)) return NULLDATA;

    return Q.pHead->Info;

    }

  • 7/31/2019 Ctdl&Gt Manh

    42/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4422

    Cc thao tc trn u lm vic vi chi ph O(1).

    Lu , nu khng qun l phn t cui xu, thao tc dequeue s c

    phc tp O(n).3.4.5. ng dng ca hng i

    - Trong cc hiu hnh:

    +Hng i cc cng vic hoc cc tin trnh angic thc hin

    + Hng i cc tin trnh chcc tn hiut cc thitb IO

    + Cc file c giti my in

    - Mphng cc hthng hng ithi trong thc t.+ Cc khch hng trong cc ca hng tp ha, trong cc hthng ngn

    hng

    + Cc nt hng camt cng ty

    + Phng cp cu

    +Cc cuc giinthoihoc cc t hng v my bay, cc t hngca khch hng

  • 7/31/2019 Ctdl&Gt Manh

    43/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4433

    CHNG 4 : CC PHNG PHP SP XP C BN

    4.1. nh ngha bi ton sp xp

    Sp xp l qu trnh x l mt danh sch cc phn t (hoc cc mu tin) t chng theo mt th t tha mn mt tiu chun no da trn nidung thng tin lu gi ti mi phn t.

    Ti sao cn phi sp xp cc phn t thay v n dng t nhin (chac th t) vn c? V d ca bi ton tm kim vi phng php tm kim nh

    phn v tun t tr li cu hi ny.

    Khi kho st bi ton sp xp, ta s phi lm vic nhiu vi mt khi nimgi lnghch th.

    Khi nim nghch th:Xt mt mng cc s a0, a1, . an.

    Nu c i aj, th ta gi l mt nghch th.

    Mng cha sp xp s c nghch th.

    Mng c th t s khng cha nghch th. Khi a0s l phn t nhnht ri n a1, a2, .

    a0 < a1 aki-1. M quyt nh c nhng tnh hung cn thayi v tr cc phn t trong dy, cn da vo kt qu ca mt lot php sosnh. Chnh v vy, hai thao tc so snh v gn l cc thao tc c bn ca huht cc thut ton sp xp.

    Khi xy dng mt thut ton sp xp cn ch tm cch gim thiu nhngphp so snh v i ch khng cn thit tng hiu qu ca thut ton. ivi cc dy s c lu tr trong b nh chnh, nhu cu tit kim b nhc t nng, do vy nhng thut ton sp xp i hi cp pht thm vngnh lu tr dy kt qu ngoi vngnh lu tr dy s ban u thng t

    c quan tm. Thay vo , cc thut ton sp xp trc tip trn dy s ban

  • 7/31/2019 Ctdl&Gt Manh

    44/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4444

    u gi l cc thut ton sp xp ti ch li c u t pht trin. Phnny gii thiumt s gii thut sp xp t n gin n phc tpc th pdng thch hp cho vic sp xp ni.

    4.2. Phng php sp xp chn trc tip (Selection sort)

    4.2.1. Nguyn tc sp xp

    Ta thy rng, nu mng c th t, phn t a i lun l min(ai, ai+1, ., an-1). tng ca thut ton chn trc tip m phng mt trong nhng cch sp xpt nhin nht trong thc t: chn phn t nh nht trong N phn t ban u,a phn t ny v v tr ng l u dy hin hnh; sau khng quan tmn n na, xem dy hin hnh ch cn N-1 phn t ca dy ban u, bt ut v tr th 2; lp li qu trnh trn cho dy hin hnh... n khi dy hin

    hnh ch cn 1 phn t. Dy ban u c N phn t, vy tm tt tng thutton l thc hin N-1 lt vic a phn t nh nht trong dy hin hnh vv tr ng u dy.

    4.2.2.Cc bc tin hnhBc 1: i = 1;

    Bc 2: Tm phn t a[min] nh nht trong dy hin hnh ta[i] n a[N]

    Bc 3 :Hon v a[min] v a[i]

    Bc4 : Nu i > N-1 th i = i+1; Lp li Bc 2Ngc li: Dng. //N-1 phn t nm ng v tr.

    V d

    Cho dy s a:12 2 8 5 1 6 4 15

    Ta c

  • 7/31/2019 Ctdl&Gt Manh

    45/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4455

    4.2.3. Ci t v nh gi gii thut

    a) Ci t

    Ci t thut ton sp xp chn trc tip thnh hm SelectionSort

  • 7/31/2019 Ctdl&Gt Manh

    46/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4466

    void SelectionSort(int a[],int N )

    {

    int min;// ch s phn t nh nht trong dy hin hnhfor (int i=0; i

  • 7/31/2019 Ctdl&Gt Manh

    47/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4477

    4.3. Phng php sp xp chn trc tip (Insertion sort)

    4.3.1. Nguyn tc sp xpGi s c mt dy a1, a2,... ,antrong iphn t u tin a1, a2,... ,ai-1

    c th t. tng chnh ca gii thut sp xp bng phng php chn trctip l tm cch chn phn t aivo v tr thch hp ca on c sp c dy mi a1, a2,... ,aitr nn c th t. V tr ny chnh l v tr gia hai

    phn t ak-1v ak tha ak-1

  • 7/31/2019 Ctdl&Gt Manh

    48/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4488

    4.3.3. Ci t v nh gi gii thut

    a) CitCi t thut ton sp xp chn trc tip thnh hm InsertionSort

    void InsertionSort(int a[], int N ){

    int pos, i;

    int x;//lu gi tr a[i] trnh b ghi khi di ch cc phn t.for(int i=1 ; i= 0)&&(a[pos] > x))

    {// kt hp di ch cc phn t s ng sau x trongdy mi

    a[pos+1] = a[pos];

    pos--;

    }

    a[pos+1] = x];// chn x vo dy

    }

    }

  • 7/31/2019 Ctdl&Gt Manh

    49/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 4499

    b)nh gi gii thut

    i vi gii thut chn trc tip, cc php so snh xy ra trong mi vng

    lpwhiletm v tr thch hppos, v mi ln xc nh v tr ang xt khngthch hp, s di ch phn t a[pos]tng ng. Gii thut thc hin tt cN-1 vng lp while , do s lng php so snh v di ch ny ph thuc votnh trng ca dy s ban u, nn ch c th c lc trong tng trng hpnh sau :

    Trnghp

    S php sosnh

    S php gn

    Tt nht

    Xu nht

    c)Bi tp

    Sp xp dy s sau theo phng php chn trc tip. Nu r trnh t ccbc

    a) 23, 12, 3, 2, 5, 7, 24, 65, 23, 54

    b) 45 ,23, 56, 2, 34, 6, 34, 1, 76, 21

    c) 45, 23, 45, 86, 2, 4, 45, 78, 2, 1

    d) 6, 3, 2, 64, 2, 56, 76, 2, 34, 6, 7, 3

    4.4. Phng php sp xp i ch trc tip (Interchange sort)

    44..44..11.. Nguyn tc sp xpNh cp u phn ny, sp xp mt dy s, ta c th xt cc

    nghch thc trong dy v lm trit tiu dn chng i. tng chnh ca giithut l xut pht t u dy, tm tt c nghch thcha phn t ny, trit tiuchng bng cch i ch phn t ny vi phn t tng ng trong cp nghchth. Lp li x l trn vi cc phn t tip theo trong dy. Cc bc tin hnhnh sau:

    4.4.2. Cc bc tin hnh

    Bc 1: i = 1; // bt u t u dy

    Bc 2: j = i+1; //tm cc phn t a[j] < a[i], j>i

  • 7/31/2019 Ctdl&Gt Manh

    50/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5500

    Bc 3 :

    Trong khi j < N thc hin

    xt cp a[i], a[j]j = j+1;

    Bc 4 : i = i+1;

    Nu i< n: Lp li Bc 2.

    Ngc li: Dng.

    V d

    Cho dy s a:

    12 2 8 5 1 6 4 15

    TTaa cc ::

  • 7/31/2019 Ctdl&Gt Manh

    51/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5511

    4.4.3. Ci t v nh gi gii thuta) Ci t

  • 7/31/2019 Ctdl&Gt Manh

    52/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5522

    Ci t thut ton sp xp theo kiu i ch trc tip thnh hmInterchangeSort:

    void InterchangeSort(int a[], int N ){

    int i, j;

    for (i = 0 ; i

  • 7/31/2019 Ctdl&Gt Manh

    53/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5533

    Bc 2 : j = N; //Duyt t cui dy ngc v v tr i

    Trong khi (j > i) thc hin:

    Nu a[j]N-1: Ht dy. Dng

    Ngc li : Lp li Bc 2.

    V d

    Cho dy s a: 2 12 8 5 1 6 4 15

  • 7/31/2019 Ctdl&Gt Manh

    54/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5544

    4.5.3. Ci t v nh gi gii thuta) Ci t

    Ci t thut ton sp xp theo kiu ni bt thnh hm BubbleSort:

    void BubleSort(int a[], int N )

    {

    int i, j;

    for (i = 0 ; ii ; j--)

    if(a[j]< a[j-1]) // nu sai v tr th i chHoanvi(a[j],a[j-1]);

    }

  • 7/31/2019 Ctdl&Gt Manh

    55/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5555

    b) nh gi gii thut

    i vi gii thut ni bt, s lng cc php so snh xy ra khng ph

    thuc vo tnh trng ca dy s ban u, nhng s lng php hon v thchin ty thuc vo kt qa so snh, c th c lc trong tng trng hpnh sau :

    Trng hp S ln so snh S ln hon v

    Tt nht 0

    Xu nht

    Nhn xt:BubbleSort c cc khuyt im sau: khng nhn din c tnh trng

    dy c th t hay c th t tng phn. Cc phn t nh c a v v trng rt nhanh, trong khi cc phn t ln li c a v v tr ng rtchm.

    4.6. Phng php sp xp nhanh (Quick sort)

    4.6.1. Nguyn tc sp xp

    sp xp dy a1, a2, ..., an gii thut QuickSort da trn vic phn hochdy ban u thnh hai phn :

    Dy con 1: Gm cc phn t a1.. aic gi tr khng ln hn x

    Dy con 2: Gm cc phn t ai .. anc gi tr khng nh hn x

    Vi x l gi tr ca mt phn t ty trong dy ban u. Sau khi thchin phn hoch, dy ban u c phn thnh 3 phn:

    1. ak < x , vi k = 1..i

    2. ak = x , vi k = i..j

    3. ak > x , vi k = j..N

    ak < x

    ak = x

    ak > x

    Trong dy con th 2 c th t, nu cc dy con 1 v 3 ch c 1 phn

    t th chng cng c th t, khi dy ban u c sp. Ngc li,

  • 7/31/2019 Ctdl&Gt Manh

    56/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5566

    nu cc dy con 1 v 3c nhiu hn 1 phn t th dy ban u ch c th tkhi cc dy con 1, 3 c sp. sp xp dy con 1 v 3, ta ln lt tinhnh vic phn hoch tng dy con theo cng phng php phn hoch dy

    ban u va trnh by.4.6.2. Cc bc tin hnh

    a) Gii thut phn hoch dy al, al+1, ., arthnh 2 dy con:

    Bc 1: Chn ty mt phn t a[k] trong dy l gi tr mc, l < k j: Dng

    NHN XTV nguyn tc, c th chn gi tr mc x lmt phn t ty trong dy,

    nhng n gin, d din t gii thut, phn t c v tr gia thng cchn, khi k = (l +r)/ 2.

    Gi tr mc x c chn s c tc ng n hiu qu thc hin thut tonv n quyt nh s ln phn hoch. S ln phn hoch s t nht nu ta chonc x l phn t median ca dy. Tuy nhin do chi ph xc nh phn tmedian qu cao nn trong thc t ngi ta khng chn phn t ny m chn

    phn t nm chnh gia dy lm mc vi hy vng n c th gn vi gi tr

    medianb) Gii thut phn hoch dy sp xp dy al, al+1, ., ar:

    C th pht biu gii thut sp xp QuickSort mt cch qui nh sau:

    Bc 1: Phn hoch dy al . ar thnh cc dy con :

    - Dy con 1 : al.. aj < x

    - Dy con 2 : aj+1.. ai-1 = x

    - Dy con 1 : ai.. ar x

    Bc 2 :

  • 7/31/2019 Ctdl&Gt Manh

    57/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5577

    Nu ( l < j ) // dy con 1 c nhiu hn 1 phn t

    Phn hoch dy al.. aj

    Nu ( i < r ) // dy con 3 c nhiu hn 1 phn tPhn hoch dy ai.. ar

    V d

    Cho dy s a:

    12 2 8 5 1 6 4 15

    Phn hoch on l =1, r = 8: x = A[4] = 5

    Phn hoch on l =1, r = 3: x = A[2] = 2

    Phn hoch on l = 5, r = 8: x = A[6] = 6

  • 7/31/2019 Ctdl&Gt Manh

    58/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5588

    Phn hoch on l = 7, r = 8: x = A[7] = 6

    Dng.

    4.6.3. Ci t v nh gi gii thuta) Ci t

    Thut ton QuickSort c th c ci t qui nh sau :

    void QuickSort(int a[], int l, int r)

    {

    int i,j;

    int x;

    x = a[(l+r)/2]; // chn phn t gia lm gi tr mci =l; j = r;

    do {while(a[i] < x) i++;

    while(a[j] > x) j--;

    if(i

  • 7/31/2019 Ctdl&Gt Manh

    59/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 5599

    mi ln phn hoch li chn nhm phn t c gi tr cc i (hay cc tiu) lmc, dy s b phn chia thnh 2 phn khng u: mt phn ch c 1 phn t,

    phn cn li gm (n-1) phn t, do vy cn phn hoch n ln mi sp xp

    xong. Ta c bng tng ktTrng hp phc tp

    Tt nht n*log(n)

    Trung bnh n*log(n)

    Xu nht n

    44..77.. PPhhnngg pphhpp sspp xxpp ttrrnn ((MMeerrggee ssoorrtt))4.7.1. Nguyn tc sp xp

    sp xp dy a1, a2, ..., an,gii thut Merge Sort da trn nhn xt sau:

    Mi dy a1, a2, ..., anbt k u c th coi nh l mt tp hp cc dy conlin tip m mi dy con u c th t. V d dy 12, 2, 8, 5, 1, 6, 4, 15 cth coi nh gm 5 dy con khng gim (12); (2, 8); (5); (1, 6); (4, 15).

    Dy c th t coi nh c 1 dy con.

    Nh vy, mt cch tip cn sp xp dy l tm cch lm gim s dycon khng gim ca n. y chnh l hng tip cn ca thut ton sp xptheo phng php trn.

    Trong phng php Merge sort, mu cht ca vn l cch phn hochdy ban u thnh cc dy con. Sau khi phn hoch xong, dy ban u sc tch ra thnh 2 dy ph theo nguyn tc phn phi u lun phin. Trntng cp dy con ca hai dy ph thnh mt dy con ca dy ban u, ta snhn li dy ban u nhng vi s lng dy con t nht gimi mt na.Lp li qui trnh trn sau mt s bc, ta s nhn c 1 dy ch gm 1 dy

    con khng gim. Ngha l dy ban u c sp xp.

    4.7.2. Phng php sp xp trn trc tip (Straight Merge Sort)Gii thut trn trc tip l phng php trn n gin nht. Vic phn

    hoch thnh cc dy con n gin ch l tch dy gm n phn t thnh n dycon. i hi ca thut ton v tnh c th t ca cc dy con lun c thatrong cch phn hoch ny v dy gm mt phn t lun c th t. C miln tch ri trn, chiu di ca cc dy con s c nhn i.

    Cc bc thc hin thut ton nh sau:

    Bc 1: // Chun b

  • 7/31/2019 Ctdl&Gt Manh

    60/70

  • 7/31/2019 Ctdl&Gt Manh

    61/70

  • 7/31/2019 Ctdl&Gt Manh

    62/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6622

    {

    kb = min(k, nb); kc = min(k, nc);

    if(b[pb+ib]

  • 7/31/2019 Ctdl&Gt Manh

    63/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6633

    Khi nim ng chy

    kho st thut ton trn t nhin, trc tin ta cn nh ngha khi

    nim ng chy (run):Mt ng chy ca dy s a l mt dy con khng gim ca cc i ca

    a. Ngha l, ng chy r = (ai, ai+1, ., aj) phi tha iu kin:

    V d: dy 12, 2, 8, 5, 1, 6, 4, 15 c th coi nh gm 5 ng chy (12);

    (2, 8); (5); (1, 6); (4, 15).Thut ton trn t nhin khc thut ton trn trc tip ch thay v luncng nhc phn hoch theo dy con c chiu di k, vic phn hoch s theon v l ng chy. ta ch cn bit s ng chy ca a sau ln phn hochcui cng l c th bit thi im dng ca thut ton v dy c th t ldy chi c mt ng chy.

    Gii thut

    Cc bc thc hin thut ton trn t nhin nh sau:

    Bc 1: // Chun br = 0; // r dng m s dng chy

    Bc 2 :

    Tch dy a1, a2, ., an thnh 2 dy b, c theo nguyn tc lun phin tngng chy:

    Bc 21 :

    Phn phi cho b mt ng chy; r = r+1;

    Nu a cn phn t cha phn phiPhn phi cho c mt ng chy; r = r+1;

    Bc 22 :

    Nu a cn phn t: quay li bc 21;

    Bc 3 :

    Trn tng cp ng chy ca 2 dy b, c vo a.

    Bc 4 :

    Nu r

  • 7/31/2019 Ctdl&Gt Manh

    64/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6644

    Ngc li: Dng;

    Mt nhc im ln na ca thut ton trn l khi ci t thut ton i

    hi thm khng gian b nh lu cc dy ph b, c. Hn ch ny kh chpnhn trong thc t v cc dy cn sp xp thng c kch thc ln. V vythut ton trn thng c dng sp xp cc cu trc d liu khc phhp hn nh danh sch lin kt hoc file.

  • 7/31/2019 Ctdl&Gt Manh

    65/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6655

    CHNG 5 : TM KIM

    55..11..Nhu cu tm kim v sp xp d liu trong h thng thng tin

    Trong hu ht cc h lu tr, qun l d liu, thao tc tm kim thngc thc hin nht khai thc thng tin :

    V du: tra cu t in, tm sch trong th vin...

    Do cc h thng thng tin thngphi lu tr mt khi lng d liung k, nn vic xy dng cc gii thut cho php tm kim nhanh s c ngha rt ln. Nu d liu trong h thng c t chc theo mt trt t no, th vic tm kim s tin hnh nhanh chng v hiu qu hn:

    V d:Cc t trong t in c sp xp theo tng vn, trong mi vn li

    c sp xp theo trnh talphabet; sch trong th vin c xp theo ch...

    V th, khi xy dng mt h qun l thng tin trn my tnh, bn cnh ccthut ton tm kim, cc thut ton sp xp d liu cng l mt trong nhngch c quan tm hng u.

    Hin nay c nhiu gii thut tm kim v sp xp dc xy dng, mc hiu qu ca tng gii thut cn ph thuc vo tnh cht ca cu trc dliu c th m n tc ng n. D liu c lu tr ch yu trong b nhchnh v trn b nh ph, do c im khc nhau ca thit b lu tr, ccthut ton tm kim v sp xp c xy dng cho cc cu trc lu tr trn

    b nh chnh hoc ph cng c nhng c th khc nhau. Chng ny strnh by cc thut ton tm kim d liu c lu tr trn b nh chnh - gil cc gii thut tm kim ni.

    5.2. Cc gii thut tm kim ni

    C 2 gii thut thng c p dng tm kim d liu l tm tuyn tnhv tm nhphn. n gin trong vic trnh by gii thut, bi ton cc t nh sau:

    Tp d liu c lu tr l dy s a1, a2, ... ,aN.Gi s chn cu trc d liu mng lu tr dy s ny trong b nh

    chnh, c khai bo :

    int a[N];

    Lu cc bn ci t trong gio trnh s dng ngn ng C, do ch sca mng mc nh bt u t 0, nn cc gi tr ca cc ch s c chnh lchso vi thut ton, nhng ngha khng i

    Kho cn tm l x, c khai bo nh sau: int x;

  • 7/31/2019 Ctdl&Gt Manh

    66/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6666

    5.2.1. Tm kim tuyn tnh

    a) Gii thut

    Tm tuyn tnh l mt k thut tm kim rt n gin v c in. Thutton tin hnh so snh xln lt vi phn t th nht, th hai, ... ca mng acho n khi gp c phn t c kha cn tm, hoc tm ht mng mkhng thy x.

    b) Cc bc tin hnh

    Bc 1:

    i = 1; // bt u t phn t u tin ca dy

    Bc 2: So snh a[i] vi x, c 2 kh nng :

    a[i] = x : Tm thy. Dng

    a[i] != x : Sang Bc 3.

    Bc 3 :

    i = i+1; // xt tip phn t k trong mng

    Nu i >N: Ht mng,khng tm thy.Dng

    Ngc li: Lp li Bc 2.

    V dCho dy s a:

    12 2 8 5 1 6 4 15

    Nu gi tr cn tm l 8, gii thut c tin hnh nh sau :

    ii == 11

    i = 3

    DDnngg..

    ii==22

  • 7/31/2019 Ctdl&Gt Manh

    67/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6677

    c) Ci t

    T m t trn y ca thut ton tm tuyn tnh , c th ci t hm

    LinearSearch xc nh v tr ca phn t c kho x trong mng a :int LinearSearch(int a[], int N, int x)

    { int i=0;

    while ((i

  • 7/31/2019 Ctdl&Gt Manh

    68/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6688

    NHN XT

    -Gii thut tm tuyn tnh khng ph thuc vo th t ca cc phn t

    mng, do vy y l phng php tng qut nht tm kim trn mt dy sbt k.

    - Mt thut ton c th c ci t theo nhiu cch khc nhau, k thutci t nh hng n tc thc hin ca thut ton.

    5.2.2. Tm kim nh phna) tng gii thut

    i vi nhng dy s c th t ( gi s th t tng ), cc phn t trongdy c quan h ai -1 < ai < ai+1, t kt lun c nu x > a ith x ch c th

    xut hin trong on [ai+1 ,aN] ca dy , ngc li nu x < a ith x ch c thxut hin trong on [a1 ,ai-1] ca dy . Gii thut tm nh phn p dng nhnxt trn y tm cch giihn phm vi tm kim sau mi ln so snh x vimt phn t trong dy. tng ca gii thut l ti mi bc tin hnh sosnh x vi phn t nm v tr gia ca dy tm kim hin hnh, da vo ktqu so snh ny quyt nh gii hn dy tm kim bc k tip l natrn hay na di ca dy tm kim hin hnh. Gi s dy tm kim hin hnh

    bao gm cc phn t aleft .. aright.

    b) Cc bc tin hnh nh sau :

    Bc 1: left = 1; right = N; // tm kim trn tt c cc phn t

    Bc 2:

    mid = (left+right)/2; // ly mc so snh

    So snh a[mid] vi x, c 3 kh nng :

    a[mid] = x: Tm thy. Dng

    a[mid] > x: //tm tip x trong dy con aleft .. amid -1 :

    right =midle - 1;a[mid] < x: //tm tip x trong dy con amid +1 .. aright :

    left = mid + 1;

    Bc 3:

    Nu left > right //cn phn t cha xt ta tm tip.

    Lp li Bc 2.

    Ngc li: Dng; // xt ht tt c cc phn t.

  • 7/31/2019 Ctdl&Gt Manh

    69/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    TTrraanngg 6699

    V d

    Cho dy s a gm 8 phn t:

    1 2 4 5 6 8 12 15

    Nu gi tr cn tm l 8, gii thut c tin hnh nh sau:

    left = 1, right = 8, midle = 4

    left = 5, right = 8, midle = 6

    Dng.

    c) Ci t

    Thut ton tm nh phn c th c ci t thnh hm BinarySearch:

    int BinarySearch(int a[],int N,int x )

    { int left =0; right = N-1;

    int midle;do

    {

    mid = (left + right)/2;

    if (x = a[midle]) return midle;//Thy x ti mid

    else

    if (x < a[midle]) right = midle -1;

    else left = midle +1;

    }while (left

  • 7/31/2019 Ctdl&Gt Manh

    70/70

    Cu trc d liu v gii thut -Dng cho h o to TCN, CN

    Trng hp S ln so snh Gii thch

    Tt nht 1

    Phn t gia ca mng c gi

    tr xXu nht log 2 n Khng c x trong mng

    Trung bnh log 2 n/2Gi s xc sut cc phn ttrong mng nhn gi tr x lnh nhau

    Vy gii thut tm nh phn c phc tp tnh ton cp n:

    T(n) = O(log 2 n)

    NHN XT

    - Gii thut tm nh phn da vo quan h gi tr ca cc phn t mng nh hng trong qu trnh tm kim, do vy ch p dng c cho nhng dy c tht.

    - Gii thut tm nh phn tit kim thi gian hn rt nhiu so vi gii thuttm tuyn tnh do Tnh phn(n) = O(log2n) < Ttuyn tnh(n) = O(n).Tuy nhin khi mun p dng gii thut tm nh phn cn phi xt n thigian sp xp dy s tha iu kin dy s c th t. Thi gian ny khngnh, v khi dy s bin ng cn phi tin hnh sp xp li . Tt c cc nhucu to ra khuyt im chnh cho gii thut tm nh phn. Ta cn cn nhcnhu cu thc t chn mt trong hai gii thut tm kim trn sao cho c linht