161
BÀI GING CU TRÚC DLIU VÀ GII THUT (Bn tho) GV: NguynVăn Côn Khoa CNTT 1

BG CTDL_GT_TK

Embed Size (px)

DESCRIPTION

BG CTDL_GT_TK

Citation preview

  • BI GINGCU TRC D LIU V GII THUT

    (Bn tho)

    GV: Nguyn Vn CnKhoa CNTT

    1

  • GII THIU CHNG TRNH

    1. LT: 30t

    2. TH : 30t

    3. T hc: 90t

    4. Tiu lun: 1

    5. KT gia hc phn: 1

    2

  • TI LIU THAM KHO Sch, gio trnh chnh: [1] An Vn Minh, Cu trc d liu v gii thut, i hc Cng

    nghip H Ni, NXB Thng tin v Truyn thng, 2009.

    Ti liu tham kho: [1] Xun Li, Cu trc d liu v gii thut, NXB i hc Quc

    gia H Ni, 2004.

    [2] Nguyn Ng Bo Trn, Gio trnh cu trc d liu v gii thut Trng i hc Bch Khoa TP.HCM, 2005.

    [3] Robert L.Kruse, Alexander J.Ryba, Data Structures And Program Design In C++, Prentice-Hall International Inc., 1999.

    [4] Jesse Liberty, Teach Yourself C++ in 21 days, 1997.

    3

  • Chng 1: Cc nguyn tc lp trnhChng 2: Ngn xp (Stacks)Chng 3: Hng i (Queues)Chng 4: quiChng 5: Danh sch v chuiChng 6: Tm kimChng 7: Sp xpChng 8: Cc bng v bng bmChng 9: Cy

    CU TRC D LIU V GII THUT

    4

  • Chng 1CC NGUYN TC LP TRNH

    1.1 Gii thiu.

    1.2 T bi ton n chng trnh.

    1.3 Phn tch v nh gi gii thut.

    5

  • 1.1 Gii thiu:1.1.1 Gii thut: Khi nim: L phng php gii bi ton bng my tnh in t, bao gm mt dy cc thao tc xc nh v c thc hin trong thi gian hu hn. Cc c trng ca GT: ng n: Cho kt qu ng Hu hn: Gii thut phi kt thc sau mt s hu hn bc. Xc nh: Mi bc ca gii thut phi c xc nh r rng v phi c thc hin chnh xc, nht qun. Hiu qu: Kt qu c a ra cng nhanh cng tt. Ph dng: p dng cho mt lot cc bi ton cng lp. Ngoi ra mt gii thut cn phi c u vo (input) v u ra (output).

    6

  • Biu din gii thut: M t bng ngn ng t nhin: Dng lu : Dng m gi (pseudo code):1.1.2 Cu trc d liu: Kiu d liu: T = , gm: Mt tp V cc gi tr thuc kiu, l tp cc gi tr hp l m i tng kiu T c th nhn v lu tr; Mt tp O cc php ton (hay thao tc x l) xc nh c th thc hin trn cc i tng d liu kiu . Kiu d liu n gin (c s): s nguyn, s thc, k t, xu... vi cc php ton nh mod, div, +, -, * /...

    7

  • Cu trc d liu: Xy dng cc cu trc d liu (hay kiu DL c cu trc) t cc kiu c s biu din cc i tng thc cn x l. V d: bn ghi, mng... Tiu chun ca mt CTDL:

    Phn nh ng thc t Cu trc d liu c xy dng cn ph hp vi cc thao tc trn (c bit l cc thao tc c s dng nhiu nht). Tit kim ti nguyn (tc x l v dung lng b nh).

    1.1.3 Quan h cu trc DL, GT v chng trnh:Cu trc d liu + Gii thut = Chng trnh

    8

  • 1.2 T bi ton n chng trnh:1.2.1 Cc bc gii bi ton trn MTT:

    1) Xy dng bi ton:Xc nh t nhu cu thc t tr li cu hi phi lm g ->

    m hnh ha bi ton bng ton hc.V d: Bi ton t mu bn hnh chnh.M hnh ha bi ton: Dng th: nh l tnh, thnh; 2 tnh

    thnh cnh nhau th c cung ni -> Bi ton t mu th sao cho 2 nh k nhau c mu khc

    nhau, v s mu l t nht. 2) Thit k cu trc d liu v xy dng gii thut.3) Xy dng chng trnh: Vit code, th nghim, hon thin.4) a chng trnh vo s dng v bo bo tr chng trnh.

    9

  • 1.2.2 Phng php thit k gii thut:1) Top-Down:

    Chia bi ton ln thnh nhiu bi ton nh (modul) -> chin lc chia tr.

    -> Dng phng php thit k t trn xung - t khi qut n chi tit. V d: Bi ton qun l o to.

    2) Tinh chnh tng bc: Tinh chnh tng bc l phng php thit k gii thut gn lin vi lp trnh. N phn nh tinh thn ca qu trnh modul ho bi ton v thit k kiu top - down. Cc bc (giai on) thc hin tinh chnh:

    Ban u gii thut c m t bng ngn ng t nhin phn nh tng chnh ca cng vic cn lm.

    10

  • n cc bc sau nhng s c chi tit ho dn dn tng ng vi nhng cng vic nh hn -> cc bc tinh chnh, thc hin chi tit ha t mc lm ci g ti mc lm nh th no. S tinh chnh ny hng v pha lp trnh. Cng cc bc sau, cc thao tc c t cc cng vic x l s c thay th bi m gi, hoc lu hng ti cu lnh ca ngn ng lp trnh.

    V d: Lp chng trnh sp xp mt dy n s nguyn khc nhau theo th t tng dn.

    3) Mt s phng php thit k gii thut khc:Phng php tham n, phng php qui hoch ng, phng

    php quay lui, phng php nhnh v cn.11

  • 1.3 Phn tch v nh gi gii thut1.3.1 Vn : Hai yu cu quan trng i vi gii thut: t nhanh, dng t b nh. -> thng mu thun nhau. nh gi v so snh cc gii thut, ngi ta da trn phn tch thi gian thc hin gii thut.1.3.2 Phn tch thi gian thc hin v phc tp tnh ton:a) Thi gian thc hin gii thut:

    Thi gian ny ph thuc: Kch thc d liu u vo; Cht lng m lnh, tc my tnh, ngn ng lp trnh v chng trnh dch.

    -> Yu t sau ph thuc my tnh v k thut lp trnh => cn c yu t u phn tch thi gian thc hin GT.

    12

  • Gi n l kch thc DL u vo -> thi gian thc hin GT l hm T(n), khng o bng n v thi gian.

    Nu thi gian thc hin GT1 l cn2, GT2 l c.n th ta ni thi gian thc hin GT1 ln hn thi gian thc hin GT2.

    -> Khi nim phc tp tnh ton ca GT.b) phc tp tnh ton ca GT: Nu thi gian thc hin GT l T(n)=cn2 th ta ni GT c phc tp tnh ton cp n2 v k hiu nh sau: T(n)=O(n2). /n: Hm T(n) c xc nh l O(g(n)) nu tn ti cc hng s c v n0 sao cho T(n) c.g(n) khi n n0.

    Khi ta ni T(n) c cp g(n) v vit: T(n)=O(g(n)). Mt s dng hm g(n):

    1 < log2n < n < nlog2n < n2 < < nk < 2 n < n! < nnCc hm log2n, n, nlog2n, n2, n3 l cc hm loi a thc, chp

    nhn tt.13

  • b) Xc nh phc tp tnh ton:Gi s T1(n)=O(g(n), T2(n)=O(h(n)) l thi gian thc hin hai on chng trnh P1, P2. Khi : Qui tc tng:

    Thi gian T(n) thc hin P1, P2 lin tip s l:T(n)=T1(n)+T2(n)=O[max(g(n), h(n)].

    Qui tc nhn:Thi gian T(n) thc hin P1, P2 lng nhau s l: T(n)=T1(n).T2(n)=O(g(n).h(n)).

    V d: x=x+1 -> O(1);for (i=1; i O(n);for (i=1; i

  • Chng 2 NGN XP (STACKS)

    2.1 Khi nim

    2.2 Ci t

    2.3 V d

    15

  • 2.1 Khi nim: Danh sch: DS l mt tp cc phn t c th t. S lng cc phn t ny thng bin ng. DS tuyn tnh: L DS m quan h ln cn ca cc phn t c th c ch ra. V d: DS ngi xp hng khm bnh. Ngn xp (Stack): K/n: L loi DS tuyn tnh m php thm vo v loi b phn t ch c thc hin mt u -> LIFO. V d:

    16

  • Ngn xp gm y v nh. Ngn xp c th rng hoc cha cc phn t. ng dng ca ngn xp: Kh qui; Thc hin thut ton duyt theo chiu su v quay lui; Lu mi trng cc th tc trong chng trnh dch... Cc thao tc: Push: Thm phn t vo nh; Pop: Ly ra phn t nh v hy n; Ngoi ra cn c cc thao tc kim tra ngn xp rng, tr v gi tr phn t nh m khng hy n...

    17

  • 2.2 Ci t:2.2.1 Dng mng:

    a) Cu trc d liu: Mng gm n phn t lin tip, phn t c kiu item. T l a ch phn t nh. Khi thm/loi 1 phn t, T s tng hay gim 1 n v. Khai bo CTDL:

    struct item { ;};//vd: struct item {int dinh; char tendinh[20];}; -> nh ca thitem S[nmax]; //v d: nmax=100 c khai bo trc;

    Hnh v:

    b) Cc thao tc: Khi to ngn xp S c con tr nh l T: void Init(S, T)1. T=0; 2. return;

    18

    s1 s2 s sn

    T

  • B sung phn t x vo ngn xp S c con tr nh l T: void Push(S, T, x)1. if T>n: //Kim tra trn S, nu trn th kt thc:

    1.1 Thng bo Trn NX;1.2 return;

    2. T=T+1; // Dch chuyn con tr3. S[T] = x; // Thm phn t mi4. return; Ly ra phn t nh v loi b n:int Pop(S, T)1. if T

  • 2.2.2 Dng danh sch lin kt: a) Cu trc DL:

    Mi phn t ca DS gm 2 phn: vng DL data v con tr tr ti phn t trc (pre).struct node { datatype data; node *pre; }; // V d: datatype l int typedef node *Stack;- Con tr T lun tr ti phn t cui cng, tc nh NX;

    - S phn t khng b hn ch.b) Cc thao tc:

    20

    Tpre datanull

    data data

  • Khi to NX:void Init(Stack &T)1. T=null; 2. return; B sung phn t:1. p = new node; //To phn t mi2. p->data = x; // Gn d liu cho phn t mi3. if T=null: //Nu l phn t u tin

    3.1 p->pre=null;3.2 T=p;

    4. else:4.1 p->pre=T;4.2 T=p;

    5. return;21

  • Ly ra phn t nh v loi b n:int Pop(Stack &T)1. if T=null:

    1.1 Thng bo NX cn;1.2 return;

    2. else:2.1 y=T->data;2.2 p=T;2.3 T=T->pre;2.4 delete p;

    3. return y;

    22

  • 2.3 V d: 2.3.1 V d 1:

    i s thp phn thnh nh phn: Chia s tp lin tip cho 2, lu cc s d vo NX; Ln lt ly ra cc s d ny s c s np.

    vd: 18 chia lin tip 2 c cc s d [01001], khi 1810=100102. 2.3.2 o ngc xu:

    Nhp tng k t ca xu theo chiu thun vo NX ri ly ra.2.3.3 Tnh gi tr biu thc dng hu t: Duyt biu thc t tri qua phi; Nu gp ton hng th a vo NX; Nu gp ton t, ly ra 2 ton hng t NX, tnh theo ton t trn; a kt qu vo NX. V d: 1 5 + 8 4 1 - - *

    23

  • Chng 3HNG I (QUEUES)

    3.1 Khi nim

    3.2 Ci t

    3.3 V d

    24

  • 3.1 Khi nim H l loi danh sch m php b sung phn t c thc hin mt u v php loi b phn t c thc hin u kia. Vic b sung lun thc hin cui H (rear, back), cn vic loi b c thc hin u (front) -> c ch FIFO. V d: Hng ngi xp hng mua v tu hay khm bnh.

    ng dng: kh qui, ng dng tm kim theo chiurng v quay lui, vt cn, t chc qun l v phn phi tintrnh trong cc h iu hnh, t chc b m bn phm... 25

  • 3.2 Ci t3.2.1 Dng mnga) Cu trc d liu: Dng mng Q c n phn t lu tr H. Dng 2 bin F v R tr vo u v cui Q. Khi Q rng th R=F=0; khi b sung th R tng 1, khi

    ly ra th F tng 1.

    26

    A B C D

    RF

    A B C D E Thm E

    RF

    Loi A B C D E

    RF

  • Khai bo cu trc d liu:typedef datatype mangq[qmax]; //vd datatype = int

    b) B sung phn t:void QAdd(int x) //H l Q, con tr u v cui l f v r1. if r-f+1 = qmax //Q y

    1.1 Thng bo Q y;1.2 return;

    2. else:2.1 r=r+1; // dch chuyn con tr sau

    3. if (r>qmax) && (f>0) // Q cn ch trng3.1 Tnh tin cc phn t li 1 v tr;3.2 r=r-1;3.3 f=f-1;

    4. Q[r] = x; // b sung phn t c gi tr x5. if (f = 0) // b sung ln u

    5.1. f = 1;27

  • c) Xa phn tint QDelete()//Xa phn t u Q1. if f = 0 //Q cn

    1.1 Thng bo Q cn;1.2. return -1;

    2. y = Q[f];3. f = f + 1; 4. if f >r: // Ht phn t th khi to li Q

    4.1 r = 0;4.2 f = 0;

    5. return y;d) Khi to H:void Init() //H l Q, hai con tr l r v f1. r=0; //r, f la con tro sau va con tro truoc khai bao trong main()2. f=0;

    28

  • 3.2.1 Dng danh sch lin kt:a) Cu trc d liu hng i dng DSLK

    struct node{ datatype data; // Th d: datatype l int

    node *next; };typedef node *queue;

    b) Th tc khi to Q:void QInit(queue &f1, queue &r1) //f1, r1 tr vo u v cui Q

    1. f1 = NULL;2. r1 = NULL;3. return; 29

    Fnext datanull

    data data

    R

  • c) Th tc b sung phn t (Q c con tr u f1 v cui r1)void QInsert (queue &f1, queue &r1, int x)

    1. new p; // to mt bin ng mi lm 1 phn t ca Q2. p->data = x; 3. p->next = NULL;4. if r1 = NULL: // B sung ln u khi Q cn rng

    4.1 r1 = p;4.2 r1->next = NULL;

    5. else:5.1 r1->next = p;5.2 r1 = r1->next; 5.3 r1->next = NULL;

    6. if f1 = NULL: // B sung ln u6.1 f1 = r1;

    7. return;

    30

  • d) Th tc xa phn t (Q c con tr u f1)int QDelete (queue &f1)

    1. if f1 = NULL1.1 Thng bo H rng;1.2 return -1;

    2. y = f1->data;3. p = f1;4. f1 = f1->next;5. delete p;6. return y;

    31

  • Chng 4 QUI

    4.1 Gii thiu v quy.

    4.2 Gii thut qui v th tc qui.

    4.3 Hiu lc ca qui.

    4.4 S quay lui (Backtracking).

    32

  • 4.1 Gii thiu v quy4.1.1 Khi nim: i tng qui: L i tng m n bao gm mt phn l chnh n hoc c nh ngha bi chnh n.

    -> C th /n mt tp v hn cc i tng bng hu hn mnh .4.1.2 V d:

    nh ngha s t nhin:(a) 1 l mt STN;(b) S tip theo ca mt STN l mt STN (hoc n l STN nu

    n-1 l STN).

    33

  • 4.2 Gii thut qui v th tc qui 4.2.1 Gii thut qui v th tc qui: Nu li gii ca bi ton T c thc hin qua li gii ca bi ton T ging T nhng qui m nh hn th l li gii qui. Gii thut tng ng vi li gii qui gl gii thut qui. V d: Tnh n!

    Nu n=0 th n!=1Ngc li n!=n.(n-1)!-> To thnh hm GT():int GT(n){ if (n==0) return 1;

    else return n*GT(n-1);}

    34

  • Phn tch gii thut trn: 3 c im.1) Hm GT() c li gi n chnh n;2) Sau mi ln gi hm, n gim i 1 -> bi ton c gii qui m nh hn;3) Trng hp cui cng, khi n=0, khi khng th gi thchin hm c na, th phi c mt cch xc nh gi tr biton -> Trng hp suy bin.

    Th tc qui: Phng tin biu din cc gii thut qui l th tc qui. Nu th tc P c li gi n chnh n th gi l qui trc tip. Nu trong P c li gi Q khc P m trong Q li c li gi P th l qui gin tip.

    35

  • 4.2.2 Thit k gii thut qui:a) Cc c im ca th tc qui:

    1) Trong th tc qui c li gi n chnh n;2) Mi ln gi th tc, kch thc bi ton gim i;3) C 1 trng hp suy bin, ti bi ton c gii quyttheo cch khc hn v qui kt thc.

    b) Thit k gii thut qui: Khi bi ton ang xt c th c /n di dng qui th c th thit k cc GT Q. Nhng vn cn gii quyt khi thit k GT Q:

    1) C th /n bi ton di dng mt bi ton nh th nhng qui m nh hn;2) Nh th no l qui m bi ton gim i mi ln gi Q?3) u l trng hp suy bin?

    36

  • c) V d: Bi ton tm dy s Fibonacci:

    Dy s 1, 1, 2, 3, 5, 8, 13... l dy Fibonacci v c /n Q nh sau:

    Th tc qui cho bi ton trn nh sau:void Fib(int n){ if (n+

    =

    2),2()1(2,1)(

    nnFnFn

    nF

  • 4.3 Hiu lc ca quy Cc bi ton c th gii bng Q vn c th dng GT lp rt n gin v hiu qu. V d th tc tnh s Fibonacci dng lp nh sau:int fibo(int n){ int i, f1=0, f2=1, f=0;

    if (n

  • C nhng bi ton gii bng Q rt tt, nhng ngh ra phng php gii khc rt kh khn. Thm ch c nhng bi ton ch c th gii bng Q (V d cc bt hnh hc Fractal). V d: In ra cc ng Sierpinski

    39

  • 4.4 S quay lui (Backtracking)4.4.1 Vn : Cc GT thng gii cc bi ton n chng c qui lut no . Tuy nhin, c nhng vn khng tun theo qui tc no, v khi phi dng phng php th - sai (Trial and error) gii quyt. Qu trnh th - sai s c thc hin trn cc bi ton nh hn, thng l mt phn ca bi ton ban u. Cng vic trn thng c thc hin dng qui v bao gm vic gii quyt mt s hu hn cc bi ton con.

    40

  • 4.4.2 Gii thut quay lui: Xt bi ton con m i tun:

    Cho bn c kch thc nxn. Mt qun m c t ti xut pht c ta (x0, y0) v c th di chuyn theo lut c vua thng thng.

    Bi ton t ra l hy tm cch sao cho con m i qua c tt c cc ca bn c, mi ng 1 ln -> tm n2-1 nc i. Qu trnh th - sai s c thc hin mc n gin nh sau: Thay v tm kim lot nc i ph ht bn c, ta xem xt vn tm nc i tip theo. Ti mi bc, nu c th tm c nc i tip theo, ta ghi li nc i ny cng vi chui cc nc i trc v li tip tc qu trnh tm kim nc i.

    41

  • Nu ti bc no , nu khng th tm c nc i k tip, ta quay li bc trc, hy b nc lu trc v th sang mt nc i mi. Qu trnh c th s phi th - quay li nhiu ln, cho ti khi tm ra gii php hoc th ht cc nc m khng tm ra c li gii. Thut gii tm nc i tip theo:

    42

  • Void ThuNuocTiepTheoKhi to danh sch cc nc i tip theo;do{ Chn mt nc i tip theo t danh sch;

    Nu nc i hp l{ Ghi li nc i;

    Nu bn c cn trng:ThuNuocTiepTheo;Nu nc i tip theo khng thnh cng:

    Hy nc i ghi bc trc;}

    } while (Nc i khng thnh cng) && (vn cn nc i)

    Thut gii tm nc i tip theo

    43

  • Cu trc d liu: Dng ma trn vung h8x8 biu din bn c. Nu qun m i qua (x, y) nc th i th gn h(x,y)=i (1i n2) -> vi h(x0,y0)=1; nu (x, y) cha c con m i qua th h(x,y)=0; Hai bin x, y l to hin ti ca qun m. T xc nh cc nc i k tip theo lut c vua; Dng mt bin logic q cho bit nc i c thnh cng khng; Nu (u, v) s l nc i tip theo t v tr (x, y) th ta phi c h(u,v)=0 v 1un, 1vn; Bin i cho bit ang th nc i th bao nhiu; nu nc i thnh cng th h(u,v)=i, v nu bn c cn trng th i
  • Void ThuNuocTiepTheo (int i, int x, int y, int &q)int u, v, q1;Khi to danh sch cc nc i tip theo;do{ q1=0;

    Chn mt nc i (u, v) trong danh sch cc nc i tip theo;Nu ((1

  • Xc nh cc nc i tip theo (u, v) t v tr (x, y): u=x+x, v=y+ y.

    -> C 8 nc nh sau: (x+2, y-1); (x+2, y+1); (x-2, y-1); (x-2, y+1); (x+1, y-2); (x+1, y+2); (x-1, y-2); (x-1, y+2);-> Dng 2 mng dx[1..8], dy[1..8] lu cc gi tr x, y.=> Khi , cc nc i k tip s c to ra nh sau: Vi

    i=1..8: u=u+dx[i]; v=v+dy[i]; Cui cng, th tc ThuNuocTiepTheo c dng nh sau:Void ThuNuocTiepTheo (int i, int x, int y, int &q)

    int k, u, v, q1;k=0;

    46

  • do{ k=k+1;q1=0;

    u=x+dx[k]; v=y+dy[k];if ((1

  • Chng 5DANH SCH V CHUI

    5.1 Khi nim danh sch. 5.2 Ci t danh sch. 5.3 Chui

    48

  • 5.1 Khi nim danh sch: 5.1.1 Khi nim: DS l mt tp c th t cc phn t, s lng cc phn t ny thng bin ng. V d: DS ngi xp hng khm bnh -> xp hng v vo khm theo th t, s ngi thng tng gim. DS tuyn tnh: l DS m quan h ln cn ca cc phn t c th c hin th. Tp cng l mt dng DS. Cu trc DS: DS l rng, hoc c dng (a1, a2, ..., an) vi cc ai (1in) l cc d liu nguyn t (thng l bn ghi). Cc loi DSLK: DSLK n, vng, kp.5.1.2 Cc thao tc c bn trn DS: B sung, loi b, cp nht phn t; Ghp, tch, sao chp DS; Sp xp, tm kim, duyt DS... 49

  • 5.2 Ci t danh sch: 5.2.1 Dng mng 1 chiu: C th dng mng 1 chiu lu tr DS tuyn tnh -> phi bit kch thc ln nht ca DS xc nh kch thc mng.

    -> Kh v d gy lng ph b nh. Thao tc b sung/loi b phn t gia DS mt nhiu thi gian v phi dn dch cc phn t.

    -> Dng con tr to DS mc ni.5.2.2 Dng con tr:a) Cu trc d liu: Phn t: Gm vng d liu data v con tr Next. Dng mt con tr First tr ti phn t u tin.

    50

    First NextdataNull

    datadata

  • Khai bo cu trc d liustruct item

    { datatype data; // Th d: datatype l intitem *next;

    };typedef struct item *list;

    b) Th tc khi to DS:void InitList( list &p)

    1. p = NULL;2. return;

    {Nu dng bin First ton cc, c th vit th tc trn nh sau:void InitList()

    1. First = NULL;2. return;

    }51

  • c) Th tc b sung phn t vo u DS:p l phn t mi c thm vo. Khi First tr thnh phn

    t th 2 sau p, ta phi cho First tr vo p.void InsertFirst(list &p, int x) //Con tro First phai lui lai tro vao phan tu moi them

    1. new (p1);2. p1->data = x;3. if p = NULL: //B sung khi DS ang rng

    3.1 p1->next = NULL;3.2 p = p1;

    4. else:4.1. p1->next = p;4.2 p = p1; // p li li tr vo p1

    5. return;52

    NullFirst data

    data

  • d) Chn mt phn t vo cui DSvoid InsertLast(list &p, int x) // Phi tm phn t p2 cui DS cho n tr vo phn t mi thm p11. new(p1); //To phn t mi2. p1->data = x;3. p1->next = NULL;4. if p = NULL: // DS rng

    4.1 p1->next = NULL;4.2 p = p1; //Bo sung khi DS rong

    5. else:5.1 p2 = p;5.2 while p2->next != NULL: // Tm phn t cui l p2

    5.2.1 p2 = p2->next;5.3 p2->next = p1;

    6. return;

    53

    Nulldata

    First dataNulldata ...

  • e) Loi b mt phn t u DS:Ch vic cho First tr vo phn t th 2 v xa phn

    t u tin i.

    void DelFirst(list &p)1. if p = NULL // DS rng

    1.1 Thng bo DS rng;2. else:

    2.1 p1 = p;2.2 p = p1->next; 2.3 delete p1;

    3. return;54

    First NextdataNull

    datadata

  • f) Loi b mt phn t cui DSvoid DelLast(list &p)// Tm phn t cui l p1 v phn t trc cui l p2 thc hin xa

    1. p1 = p;2. if p1 = NULL:

    2.1 Thng bo DS rong;3. else:

    3.1 while p1->next != NULL3.1.1 p2 = p1;3.1.2 p1 = p1->next;}

    3.2 if p->next = NULL:3.2.1 p = NULL; //Truong hop DS chi con 1 phan tu

    3.3 else:3.3.1 p2->next = NULL;

    3.4 delete p1;4. return;

    55

  • 5.2.3 DSLK trong cc mng:a) Khi nim:- DS c ci t bng mt mng. Mi phn t ca mng

    l mt struct gm 2 thnh phn: data (cha d liuchnh) v next (tr n v tr cha phn t tip theo).

    b) Cu trc d liu:typedef datatype ElementType; /*kiu phn t, v d datatype=inttypedef struct{ ElementType data;

    int next; //con nhy tr n phn t k tip } Node; // Khai bo kiu c tn l NodeNode Space[maxlength]; // Khai bo mng cha danh sch

    56

  • - DS cc phn t c qun lbi bin L (kiu int), ng vaitr con tr; trng next cami phn t s tr n v tr phn t tip theo. Phn tcui cng c next bng mtgi tr c bit, th d -1.

    - DS cc ch trng c qunl bi bin A, tng t binL. Trng next ca A tr n v tr trng tip theo. trng cui cng c next = -1; Ta gi A & L l cc con nhy.

    - V d:

    0 100 2

    1 8

    2 75 7

    3 4

    4 6

    5 1

    6 5

    7 90 -1

    8 9

    9 -1

    L

    A

    Ch s mng data next

    57

  • c) Cc thao tc-Khi thm mt phn t vodanh sch, ta ly trng utin ca A cha phn tmi ny. Khi xo mt phn tkhi danh sch ta cho b xoni vo u A.- Thc cht ca vic thm hayxo mt phn t l thc hinvic chuyn mt t A sang Lhay ngc li. Hm Move schuyn c tr bi connhy P vo danh sch c trbi con nhy Q:

    58

  • Hm chuyn mt t danh sch p sang danh sch q:- Dng con nhy temp tr c tr bi Q. - Cho Q tr ti mi. - Cp nht li con nhy P bng cch cho n tr ti k tip. - Ni con nhy trng next ca mi ( m Q ang tr) tr vo m temp ang tr.

    void Move (int &p, int &q)1. if p==Null :

    1.1 return 0; //Khong co o de chuyen 2. else :

    2.1 temp = q; 2.2 q = p; 2.3 p=Space[q].Next; 2.4. Space[q].Next=temp; 2.5 return 1; //Chuyen thanh cong

    59

  • Khi to A v L:- Ban u A gm tt c cc trng ca mng. L rng.- Th tc khi to nh sau:

    void Initialize()1. for i = 0 -> MaxLength 1:

    1.1 Space[i].Next=i+1;2. Space[MaxLength-1].Next = Null; //Phn t cui ca A tr 3. A = 0; //vo Null4. Elem = Null;5. return;

    60

  • Thm phn t vo danh sch:Th tc chn phn t mi vo v tr p ca DS e. p = -1 l chn vo u DS.

    void Insert_List(ElementType x, int p, int &e) //e la con tro DS phan tu1. if p = -1):

    1.1 if Move(A, e):1.1.1 Space[e].Elements = x;

    1.2 else:1.2.1 Thng bo khng cn ch trng;

    2. else: //Chuyen mot o tu A vao vi tri p2.1 if Move(A, Space[p].next): // nhn x l c tr bi

    2.1.1 Space[Space[p].next].Elements = x; // Space[p].Next2.2 else:

    2.2.1 Thng bo khng cn ch trng;

    61

  • Xa phn t khi danh sch:Mun xo mt phn t ti v tr p trong danh sch ta ch cn chuyn cha phn t ti v tr ny vo u A. p= -1 l xo phn t u danh sch.

    void Delete_List(int p, int &e)1. if p = -1)

    1.1 if !Move(e, A)1.1.1 Thng bo li khi xa;

    2. else2.1 if !Move(Space[p].Next, A)

    2.1.1 Thng bo li khi xa;

    62

  • 5.3 Chui Chui (xu k t) l mt kiu d liu c bn. C th coi chui l mt mng cc k t, ch s bt u t 0. Phn t u tin cha k t c m ASCII l s k t c trong xu. Gi s xu S c di n. Khi c th truy cp k t th i (1in) l S[i]. Kt thc xu l k t c ord()=0.

    63

  • Chng 6TM KIM

    6.1 Gii thiu. 6.2 Tm kim tun t. 6.3 Tm kim nh phn.

    64

  • 6.1 Gii thiu Mc ch tm kim: Tm thng tin theo yu cu. Bi ton TK: Cho bng gm n bn ghi a1, a2, ..., an, mi bg ng vi mt kha ki (1in). Hy t bg c kha bng x cho trc. Cng vic TK kt thc khi:o Tm c ai c kha bng x -> php TK tha mn;o Khng tm c bg no c kha bng x -> TK khng tha. T y, thay cho dy bg, ta xt dy kha l s nguyn.6.2 Tm kim tun t 6.2.1 Thut ton: Ln lt so snh x vi cc kha trong dy. Nu c mt kha bng x th a ra ch s ca kha, ngc li th bo khng thy.6.2.2 Biu din TT:

    65

  • Tm kim tun t: u vo:

    x l gi tr cn tm;n s phn t mng;a mng cha cc phn t.

    u ra:v tr cha phn t x (nu c)

    Cc bc thc hin:int LinearSearch(int a[], int n, int x)1. i=1; //Khi to2. while aix and in:

    2.1 i++;3. if i>n:

    3.1 return 0; //Khng thy4. else:

    return i; //V tr tm thy} 66

  • Ci t:int LineSearch(int a[ ], int n, int x)

    {

    int i = 1;

    while ((i n)

    return 0;

    else

    return i;

    }

    phc tp ca thut ton l O(n)

    67

  • 6.3 Tm kim nh phn 6.3.1 T tng ca gii thut: Vi dy kha sp xp tng dn, ta xt xem x c bng kha gia khng? Nu x nh hn kha gia th tip tc tm na bn tri, nu x ln hn kha gia th tip tc tm na bn phi theo cch nh trn.6.2.2 Biu din GT: u vo:

    x: gi tr cn tmn: s phn t mnga: mng cha cc phn t c sp xp tng dn

    u ra:V tr cha phn t x (nu c)

    68

  • Cc bc thc hin:int Binary_Search(int a[], int n, int x) 1. //Khi to

    1.1 left = 1;1.2 right = n;

    2. while l r:2.1 middle = (left + right)/2.2.2 if am=x:

    2.1.1 return middle;2.3 else:

    2.3.1 if am x:2.3.1.1 left= middle +1;

    2.3.2 else:2.3.2.1 right= middle -1;

    3. return 0;69

  • Ci t:

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

    {

    int middle, left = 0, right = n-1;

    while (left

  • 6.2.3 GT qui: u vo: x l kha cn tm, l v r l u v cui danh sch, a l dy SX; u ra: Tr v v tr tm thy nu c.int BSearch(l, r, x)1. if l>r:

    1.1 return 0;2 else:

    2.1 m=(int) (l+r)/2;2.2 if x=am:

    2.2.1 return m;2.3 if xam:

    2.4.1 BSearch(a, m+1, r, x);71

  • Ci t:

    int BSearch(int l, int r, int x)

    {

    int m;

    if (l>r) return 0;

    else {

    m=(l+r)/2;

    if (xA[m]) BSearch(m+1, r, x);

    else return m;

    }

    }

    }

    phc tp ca GT: O(log2n)72

  • Chng 7: SP XP7.1 Gii thiu 7.2 Phng php chn trc tip 7.3 Phng php chn trc tip 7.4 Phng php i ch7.5 Phng php Shell Sort 7.6 Merge Sort 7.7 Quick Sort 7.8 Heap Sort 7.9 Radix sort

    73

  • 7.1 Gii thiu SX l b tr li cc phn t ca mt tp i tng no theo mt trt t nht nh, v d tng (hay gim) dn i vi s, th t t in i vi ch. Mc ch SX:

    o Kt xut thng tin;o Phc v tm kim.

    Qui c: SX tp bn ghi c trng kha kiu s nguyn -> bi ton qui v SX mt bng c n phn t nguyn. Phn loi:

    o SX trong (mng);o SX ngoi (file).Ta ch xt SX trong v qui c SX dy theo th t tng dn.

    74

  • 7.2 Phng php chn trc tip 7.2.1 tng: Ti bc i: Gi s c dy a1, a2,,ai-1 c sp xp; ta s chn thm phn t mi ai vo v tr thch hp ca on a1ai-1 sao cho c dy mi a1ai c sp xp Nguyn tc sp xp nh sau: on gm phn t a1 c sp xp, thm a2 vo c a1, a2 c sp xp, tip tc thm a3 vo c a1, a2, a3 sp xptip tc thm an vo c a1,,an sp xp.->Phi so snh ai ln lt vi cc phn t trc n, khi gp 1 phn t nh hn th s t n sau phn t nh hn ;Nu khng gp phn t no nh hn th n s tin ti c t u dy;

    75

  • Minh ha: Cho dy

    76

  • 7.2.2 Gii thut: u vo: mng a cha n kha cha sp xp u ra: mng a c sp xp tng dnGTvoid Insertion_Sort(int a[], int n)//Coi a[1] c sp xp; tm v tr j thch hp trong on t a[1] // n a[i-1] chn a[i] vo;1. for i=2->n:

    1.1 x=ai;1.2 j=i-1; //V tr trc i1.3 while x

  • 7.2.2 Ci t:

    void Insertion_Sort (int a[ ], int n){ int j, i, x;

    for (i = 1; i < n; i++) //Chi so dau cua mang la 0{ x=a[i];

    j = i - 1;while ((0

  • 7.3 Phng php chn trc tip7.3.1 tng:

    Bt u vi i=1: So snh a[1] vi cc kha sau n ta[i+1] n a[n] chn kha nh nht ri i ch choa[1] -> sau qu trnh ny c a[1] l min trong dy ta[1] n a[n].

    Thc hin cc bc tip theo vi i = 2 n i = n-1: saumi bc i th c phn t a[i] l kha nh nht trongdy t a[i] n a[n] (dy cha sp xp).

    -> lt th i (i=1..n-1), ta s chn trong dy a[i]..a[n] kha nh nht v i ch n vi a[i].

    79

  • 80

  • 7.3.2 Gii thut u vo: mng a cha n kha cha sp xp u ra: mng a c sp xp tng dn Cc bc thc hin GT:void Selection_Sort (int a[ ], int n)1. for i=1->n-1:

    1.1 min=i;1.2 for j=i+1->n: //Tm v tr phn t min ca dy sau ai

    1.2.1 if aj

  • 7.3.3 Ci tvoid Selection_Sort (int a[ ], int n){

    int min, i, j, tg;for (i=0; i < n-1; i++){ min = i;

    for (j=i+1; j

  • 7.4 Phng php i ch (ni bt)7.4.1 tng:

    Bt u vi i=1: duyt t cui dy ln u, nu thy 2 kha lin nhau m ngc th t th i ch -> Sau ltu tin th kha nh nht ni ln trn u.

    Thc hin tng t nh trn cc bc tip theo vi i = 2 n i = n-1: Sau mi bc i th kha nh th i trongton dy s ni ln v tr th i.

    83

  • 84

    127 4 16 1

    127 4 16 1

    127 4 1 16

    127 1 4 16

    121 7 4 16

    121 7 4 16

    161 7 4 12

    161 4 7 12

    161 4 7 12

    161 4 7 12

    161 4 7 12

  • 7.4.2 Gii thut u vo: mng a cha n kha cha sp xp u ra: mng a c sp xp tng dn Cc bc thc hin GTvoid Bubble_Sort (int a[ ], int n)1. for i=1->n-1:

    1.1 for j=n->i+1:1.1.2 if aj

  • 7.4.3 Ci tvoid Bubble_Sort (int a[ ], int n){

    int i, j, tg;for (i = 0; i i; j--) if (a[j]< a[j-1]){ tg = a[ j ];

    a[ j ] = a[ j-1];a[ j-1 ] = tg;

    }}

    86

  • 7.5 Phng php Shell sort7.5.1 tng: Chia dy ban u thnh nhng dy con gm cc phn t cch

    nhau h v tr. Dy ban u : a1, a2, ..., an c xem nh s xen k ca cc dy

    con sau :

    Dy con th nht : a1 ah+1 a2h+1 ... Dy con th hai : a2 ah+2 a2h+2 ... ....

    Dy con th h : ah a2h a3h ... ...

    Tin hnh sp xp cc phn t trong cng dy con.87

  • Gim khong cch h to thnh cc dy con mi di hn rili SX.

    Dng khi h=1.

    Cch chn h: Vi k bc sp xp, h phi tha iu kin :hi > hi+1 v hk = 1

    hi = (hi-1 - 1)/3 v hk = 1, k = log3n-1 V d :127, 40, 13, 4, 1

    hi = (hi-1 - 1)/2 v hk = 1, k = log2n-1V d : 15, 7, 3, 1

    h c dng 3i+1: 364, 121, 40, 13, 4, 1 Dy fibonaci: 34, 21, 13, 8, 5, 3, 2, 1 h l dy cc s nguyn t gim dn n 1: 13, 11, 7, 5, 3, 1.

    88

  • 7.5.2 Gii thut u vo: mng a cha n kha cha sp xp u ra: mng a c sp xp tng dn Cc bc thc hin GTBc 1: Chn k khong cch h[1], h[2], ..., h[k];

    i =1;Bc 2: Phn chia dy ban u thnh cc dy con

    cch nhau h[i] khong cch. Sp xp tng dy con bng phng phpchn trc tip; -> SX Chn vi bc gim dn

    Bc 3: i = i+1;Nu i > k : DngNgc li : Lp li Bc 2.

    V d SX dy {44, 55, 12, 42, 94, 18, 6, 67} vi k= 4, 2, 1

    89

  • 90

    94 18 6 6744 55 12 42

    94 55 12 6744 18 6 42

    94 55 12 6744 18 6 42

    44 55 94 676 18 12 42

    K=4

    44 55 94 676 18 12 42

    44 55 67 946 12 18 42

    K=2

    K=1

  • 7.5.3 Ci tvoid ShellSort (int a[], int N, int h[], int k)

    { int step, i, j;int x, len;for (step = 0; step < k, step++){ len = h[step];

    for (i = len; i < N; i++){ x = a[i];

    j = i - len;while (x < a[j]) && (j >- 1){ a[j+len] = a[j];

    j = j - len;}a[ j + len] = x;

    }}

    }91

  • 7.6 Phng php trn (Merge Sort)7.6.1 Php ha nhp 2 ng: Gi s 2 dy kha A (c r phn t) v B (c s phn t) l 2 dy c sp xp (ta gi mt dy nh vy l mt mch). Php hp nht hai mch nh trn thnh 1 mch C gm n=r+sphn t c sp xp c gi l php ha nhp 2 ng. tng: o Chn ra kha nh nht trong 2 mch A, B a kha ra

    mt min sp xp (mt mng c kch thc n), loi b kha khi mch cha n.

    o Tip tc qu trnh trn cho ti khi mt trong hai mch ht. Chuyn ton b phn cn li ca mch kia (nu c) ra minsp xp l xong.

    Minh ha vi A={17, 42, 50, 75}, B={8, 34, 85, 90, 100}

    92

  • Gii thut ha nhp 2 ng:void Merge (int A[], int b, int m, int n, int B[])// A l dy kha cho trc, B l mng dng lm min sp xp. Th tc ny ha nhp 2 dy con lin nhau v c sp xp l A[b]..A[m] v A[m+1]..A[n]1. //Khi to

    i = b; j = m+1; k = b; 2. //Qu trnh chn phn t nh hn a ra min sp xp

    while (i

  • 7.6.2 Sp xp kiu ha nhp 2 ng: tng: Mi kha trong mt dy cho c th coi l mt mch c di l 1. Nu ha nhp 2 mch nh vy ta s c mch c di l 2. Li ha nhp2 mch di 2 s c mt mch di 4... C lm tng t nh vy, cuicng ta c mch c di n, chnh l dy kha c sp xp honton. V d cho dy kha trn. Gii thut: A l dy kha ban u c n phn t. Cc mch trong A l cc dycon c di l, dy cui cng c th c di nh hn l. Mt mch c v tr u l i, mch tip theo s c v tr u l i+l; v trcui mch u l i+l-1, v tr cui mch sau l (i+l-1)+l = i+2l-1. GT MPass ha nhp cc i mch lin nhau, vi mng B dng lmmin sp xp:

    94

  • void MPass (int A[], int n, int l, int B[])1. //Khi to:

    i = 0; // V tr u ca i mch u tin2. // Ha nhp tng cp mch:

    while i+2l-1

  • Th tc sp xp theo kiu ha nhp cho mng nh sau:void MergeSort (int X[], int n, int B[])1. // Khoi tao do dai mach

    l=1;2. while l < n:

    2.1 MPass(X, n, l, Y) //Hoa nhap va chuyen vao Y2.2 Mpass(Y, n, 2*l, X) //Hoa nhap va chuyen vao X2.3 l = 2l;

    3. return;

    96

  • 6.7 Phng php Sp xp nhanh (QuickSort)6.7.1 tng: Gii thut QuickSort sp xp dy a1, a2 ..., x, ..., an da trnvic phn hoch dy ban u thnh 3 phn:

    Phn 1: Gm cc phn t c gi tr b hn x

    Phn 2: Gm cc phn t c gi tr bng x

    Phn 3: Gm cc phn t c gi tr ln hn x

    vi x l mt phn t ty trong dy ban u.

    97

  • Sau khi thc hin phn hoch, dy ban u c phn thnh 3 on nh sau: 1. ak x , vi k = 1 .. j 2. ak = x , vi k = j+1 .. i-1 3. ak x , vi k = i..n

    on th 2 c th t. Nu ta sp xp cc on 1 v 3 th ton b dy ban u c sp.

    Nu cc on 1 v 3 ch gm 1 phn t th chng c sp. Nu chng c nhiu hn 1 phn t, th sp xp, ta ln lt tin

    hnh vic phn hoch tng on theo cng phng php phn hoch dy ban u nh trn cho ti khi mi on cn 1 phn t.

    98

  • 7.7.2 Gii thut Sp xp nhanh: Th tc phandoan thc hin vi mng A, vi cc ch s u vcui l l v r. Chn phn t gia mng lm x.void phandoan (int A[], int l, int r)1. // Khoi tao do dai mach

    1.1 i= l; 1.2 j=r; 1.3 x=A[(l+r)/2]2. Lp li ti khi i>j:

    2.1 while ai < x: 2.1.1 i=i+1; // Tm phn t ln hn x2.2 while aj > x: 2.1.1 j=j-1; // Tm phn t nh hn x2.3 if i

  • 7.7.3 Ci t:void phandoan(int a[], int l, int r)

    { int i, j, x, tg;x = a[(l+r)/2]; i = l; j = r;do{ while(a[i] < x) i++;

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

  • 7.8 Phng php Sp xp ng (HeapSort)7.8.1 Khi nim ng: ng l cy nh phn m trong mi nh trong c ng 2 conv c cc tnh cht sau: 1) kha mi nt ln hn kha hai ntcon ca n; 2) cy c cc l dn sang tri -> Nh vy, mi cycon cng l mt ng.

    Th d vi dy 16, 14, 10, 8, 7, 9, 3, 2, 4, 1

    Biu din ng bng mng: Phn t th i c cc con tng ngl 2(i+1)-1 v 2(i+1); phn t th j c cha tng ng l (j-1)/2. Talun c ai>a2i v ai>a2i+1, do kha gc l ln nht.

    101

  • 102

  • 7.8.2 tng sp xp ng: Vi ng nh trn, nu ly kha gc a ra min sp xp, ri to li ng vi phn cn li; li ly kha gc a ra... cnh vy cho n khi ht th dy kha c sp xp ri.7.8.3 Gii thut:1. To ng t dy ban u;2. i ch kha gc v kha v tr cui cng.3. To li ng vi dy kha cn li. Quay li bc 2 ti khi ht. Minh ha vi ng trn.

    103

  • 104

    1

    14 10

    8 7 9 3

    2 4 16

    14

    8 10

    4 7 9 3

    2 1 16

  • 105

    14

    8 10

    4 7 9 3

    2 1 16

    1

    8 10

    4 7 9 3

    2 14 16

  • 106

    10

    8 9

    4 7 1 3

    2 14 16

    2

    8 9

    4 7 1 3

    10 14 16

  • 7.8.4 Phng php to ng:

    Vi 1 ng, mi cy con ca n cng l mt ng ri. Khi ich phn t gc v 1 nt ca n th phn cy con c nt b ikhng cn l ng na. -> phi c thao tc duy tr li ng.

    Gi s ti cy con c gc l nt th i, kha ti i lm cho cy con ny mt tnh cht ng. duy tr ng, ta s i ch kha i vi kha ln hn trong 2 con ca n.

    Tuy nhin, nt con va i kha c th li b vi phm tnh chtng. Do ta lm li thao tc trn vi cy con ca i

    -> thc hin mt qu trnh qui.

    107

  • Th tc to ng: Duy tr ng cho cy con c nh l i v kch thc dy l n.void taodong (int a[], int i, int n)1. // Khoi tao

    1.1 l=2(i+1)-1;1.2 r=2(i+1); // v tr cc con ca i

    2. if lai: 2.1 temp = l; 3. else: 3.1 temp = i;4. if r atemp: 4.1 temp = r;5. if temp i:

    5.1 i ch (ai, atemp); 5.2 taodong (a, temp, n);

    108

  • Thc hin sp xp bng th tc trn:1. To ng ban u t dy kha x c n phn t:for i = (n-1)/2 to 0:

    1.1 taodong(x, i, n-1);2. for i=n-1 to 1:

    2.1 i ch (a0, ai);2.2 taodong(x, 0, i-1);

    109

  • 7.9 Radix Sort7.9.1 tng: SX dy kha nguyn tng dn theo ch s hng n v bng mtphng php SX no , c dy kha mi.

    SX dy kha mi tng dn theo ch s hng chc theo mt thutton SX n nh, c dy mi.

    Thc hin tng t vi ch s hng trm, hng ngn... cho n chs hng cao nht, ta c dy kha SX.

    {SX n nh: GT SX bo ton th t ban u ca cc bn ghi ckha bng nhau trong dy. Th d: ban u c DS SV xp theo abc,khi xp theo th t gim dn ca im thi, cc SV bng im nhaus cng on nhng vn gi th t abc ban u}

    110

  • 111

    925 817 821 638 639 744 742 563 570 166

    570 821 742 563 744 925 166 817 638 639

    817 821 925 638 639 742 744 563 166 570

    166 563 570 638 639 742 744 817 821 925

  • 7.9.2 Gii thut: Input: dy kha t c n phn t cha SX, c s. Output: dy t SX tng dn. Cc bc thc hin:1. // Khi to

    1.1. ndigit = m; // S ch s ca kha2. Lp li vi p=0 to ndigit-1:

    2.1 sapxep(t, p, 1, n) // p l ch s th p ca kha3. return

    112

  • Th tc sapxep SX dy theo ch s th p ca cc kha nhsau:

    void sapxep(int t1[], int p1, int n1, int n2)// n1, n2 l ch s u v cui ca dy kha t11. for i = n1 to n2-1:

    1.1. for j=n2 downto i+1:1.1.1 if ch s th p1 ca t1[j] < ch s th p1 ca t1[j-

    1] th i ch t1[j] v t1[j-1]; // SX ni bt2. return ng dng SX c s: SX th ti cc bu in, SX th thvin, SX cc bn ghi theo ngy thng...

    113

  • Chng 8CC BNG V BNG BM

    8.1 Cc bng8.2 Bng bm

    114

  • 8.1 Cc bng8.1.1 Cu trc lu tr:

    Cc bng 1 hoc 2 chiu c th lu tr bng cc ma trn 1 hoc 2 chiu.

    a) Mng 1 chiu: Mt vc t A c n phn t, mi phn t ai (0

  • Xc nh v tr ca cc phn t:

    - Th t u tin hng: Loc(aij) = L0 + (im + j)c- Th t u tin ct: Loc(aij) = L0 + (jn + i)cTrong m v n l s hng v s ct, 0

  • Cc kiu d liu tru tng mi Kiu d liu:

    KDL l mt tp hp cc gi tr v mt tp hp cc phpton trn cc gi tr .

    V d kiu Boolean l mt tp hp c 2 gi tr TRUE,FALSE v cc php ton trn n nhAND, OR, NOT.

    Kiu Integer l tp hp cc s nguyn c gi tr t -32768n 32767 cng cc php ton cng, tr, nhn, chia, %

    117

  • Kiu d liu c hai loi l kiu d liu s cp v kiu d liu ccu trc hay cn gi l cu trc d liu.o Kiu d liu s cp l kiu d liu m gi tr d liu ca n l nnht. V d: kiu Boolean, Integer.o Kiu d liu c cu trc hay cn gi l cu trc d liu l kiu dliu m gi tr d liu ca n l s kt hp ca cc gi tr khc. Vd: ARRAY l mt cu trc d liu. Kiu d liu tru tng (ADT): Mt kiu d liu tru tng l mt m hnh ton hc cng vi mttp hp cc php ton trn n. C th ni kiu d liu tru tng l mt kiu d liu do chng tanh ngha mc khi nim (conceptual), n cha c ci t cth bng mt ngn ng lp trnh.

    118

  • Khi ci t mt kiu d liu tru tng trn mt ngn gn lp trnhc th, chng ta phi thc hin hai nhim v:

    1. Biu din kiu d liu tru tng bng mt cu trc d liu hocmt kiu d liu tru tng khc c ci t.

    2. Vit cc chng trnh con thc hin cc php ton trn kiu dliu tru tng m ta thng gi l ci t cc php ton.

    V d v cc kiu d liu tru tng: List, Stack, Queue.

    119

  • 8.2 Bng bm8.2.1 Vn : Cho tp S cc phn t c c trng bi gi tr kha, trn xcnh mt quan h th t. cc PP TK xt, tm mt kha x, taso snh n vi cc kha khc -> c s php TK y l so snh. Ngi ta xy dng mt PP TK khc trong da vo gi trkha xc nh trc tip a ch lu tr n -> PP bin i kha, cngi l bm.8.2.2 T tng ca PP: Nu bng mt qui tc no , t gi tr kha ta tnh c a chlu tr phn t tng ng, tc l TK c phn t .-> Thit lp mt hm h(k) nh x cc kha k ln tp a ch l 1bng A = {0, 1, 2, ..., m-1}. A c gi l bng bm, m l kch thcca n. V h: k -> A nn ta lun c 0
  • Gi tr h(k) c dng lu tr v TK kha k. V d: 0
  • 8.2.5 Phng php nhn:- Vi hng s A (0, 1), ta ly phn phn s ca kA, k hiu l

    k%1.- Ly phn nguyn ca php nhn kt qu trn vi m, khi ta

    c:h(k) = (int) (k%1)m.

    - Thng chn m l ly tha ca 2: m=2p, A 8.2.6 Phng php xch ngn cch: ng :

    - Khi nh x cc kha k vo bng bm, c th xy ra trng hp 2kha k1, k2 khc nhau m c h(k1) = h(k2) -> ng , tc 2 khacng c bm vo 1 khe.

    - T phi c cc k thut gii quyt ng .

    ( 5 1) / 2 0.6180339887...

    122

  • Xch ngn cch:- V d: n=7, U={221, 643, 512, 326, 495, 108, 69}, m=8,h(k)=k%(m-1) = k%7.Nh th, ta c h(k) = {4, 6, 1, 4, 5, 3, 6} -> ng ti cc khe ch(k)=4 v 6.- Trong k thut ny, cc khe ca bng bm khng cha cc kha mch cha cc nt u ca danh sch mc ni ng vi mt a ch ri.- Mi nt mc ni c 2 trng: key- gi tr kha v link- tr ti nttip theo.

    123

  • Thao tc lu tr mt kha vo bng bm:- Th tc thc hin tm kim kha x trong danh sch mc ni, nu

    khng thy th a vo DS ng vi a ch h(x) ca n.- Cu trc d liu:struct item { int key; item *link; };typedef item *pt; // Con tr kiu itemtypedef pt mang[nmax]; // Mng con tr, dng lm bng bm- Gii thut:Trong th tc di y, B l bng bm, m l kch thc bng, h l

    hm bm.

    124

  • void TaoDayChuyen(mang B, int x, int m)1. p=B[h(x)]; //Xac dinh vi tri danh sach2. //Tm x trong DS

    while (p->link != NULL) && (p->key !=x)) p=p->link;3. if p->key=x // Thy x

    3.1 Thng bo c kha x trong bng;3.2 return;

    4. else // Lu tr x4.1 q=new(item);4.2 q->key=y;4.3 q->link=B[h(x)];4.4 B[h(x)]=q; // B[h(x)] la con tro dau danh sach

    5. return125

  • 8.2.7 Phng php thm d tuyn tnh: tng:

    - Khi xy ra ng , ta s xem xt v tr bn cnh v tr bntrong bng. Nu n trng th a phn t ni vo, nu n bn th litip tc tm kim theo kiu tun t.

    - Nu ti cui bng m cha tm c khe trng th quay liu bng, cho ti khi tm c 1 khe trng hoc tr li v tr cm khng tm thy khe trng no (trn bng).

    - V d: U={221, 643, 512, 326, 495, 108, 69}, m=8, h(k)=k%(m-1) = k%7.

    h(k) = {4, 6, 1, 4, 5, 3, 6}Khi khc phc ng ti cc khe s 4 v s 6, cc gi tr 326 v

    69 c a sang cc khe bn cnh l cc s 0

    126

  • Gii thut:- Cu trc d liu:Mi khe ca bng bm gm 2 thnh phn: key cha gi tr kha

    v bit ch trng thi khe: bit=0 th khe cn trng v bit=1 th khe bn.

    struct item { int key; int bit; };typedef item mang[nmax]; // Mng dng lm bng bm- Th tc thc hin thm d tuyn tnh khi xy ra ng . Nu

    xy ra trn bng ti v tr i th thng bo trn, nu c phn t cngkha th b qua (khng lu trng).

    69 512 108 221 326 643 495

    0 1 2 3 4 5 6 7

    127

  • void BamTT (mang B, int x, int m)1 1.1 i = h(x); 1.2 j = i; // Khi to2. while (B[x].bit 0) and (B[x].key x): // Xc nh ch ca x

    2.1 j=(j+1) % m;2.2 if j=i:

    2.2.1 Thng bo trn bng;2.2.2 return;

    3. if B[j].bit = 0: // Xt 2 trng hp: j trng hoc c x (bc 4)3.1 B[j].bit = 1;3.2 B[j].key=x; // Lu tr x vo v tr j3.3. return;

    4. else: 4.1 Thng bo c x; 4.2 return;

    128

  • Chng 9CY

    9.1 Khi nim. 9.2 Cy nh phn. 9.3 Cy nh phn tm kim.9.4 Cy cn bng.9.5 B- Cy.

    129

  • 9.1. Cc loi cy nh phn

    Khi nim: Cy NP l cy rng hoc cy mmi nt c nhiu nht 2 nt con. Mt s tnh cht:- Cy c phn bit nt tri v ntphi-> cy c th t.- S lng ti a cc nt trn mci l 2i-1 (i>=1).- S lng ti a cc nt trn cyc chiu cao h l 2h-1 (h>=1). V d:

    130

  • Cc loi cy NP: Cy NP hon chnh: Cy NP m cc nt mc < h-1c ng 2 con. Cy NP y : Cy NP m cc nt mc
  • Biu din cy NP: Dng mng: nh s ccnt nh hnh v v lu trtng ng bng mng. Dng DSLK:Mi nt c biu din bng1 con tr c CTDL nh sau:struct node{

    datatype Info;node *L,*R;

    };typedef node *tree

    132

  • 9.2 Cy nh phn tm kim Khi nim:BST l cy nh phn m kho timi nt ca cy ln hn kho catt c cc nt thuc cy con bntri v nh hn kho ca tt c ccnt thuc cy con bn phi.V d:

    Tm kim trn BST: Cu trc d liu:typedef struct Node{ KeyType key; Node* Left, Right; } // V d: KeyType=inttypedef Node* Tree;

    133

  • Th tc TK 1 nt c kha l x trn BST:Tin hnh t nt gc bng cch so snh kho ca gc vi kho x: Nu nt gc bng NULL th khng c kho x trn cy. Nu x bng kho ca nt gc th gii thut dng v ta tm cnt cha kho x. Nu x ln hn kho ca nt gc th ta tin hnh ( qui) vic tmkho x trn cy con bn phi. Nu x nh hn kho ca nt gc th ta tin hnh ( qui) vic tmkho x trn cy con bn tri.

    134

  • Tree Loc (Tree p, int x) // p l gc cy// Nu thy x th tr v v tr phn t cha x, ngc li tr v NULL1. if p=NULL:

    1.1 return NULL2. else:

    2.1 if p->key=x:2.1.1 return p;

    2.2 else:2.2.1 if p->key > x:

    2.2.1.1 return Loc(p->Left, x);2.2.2 else:

    2.2.2.1 return Loc(p->Right, x);135

  • B sung trn BST: GT sau tm kha x trn BST, nu khng c x th b sung vo:void LocAdd (Tree &p, int x) // p l gc cy1. if p = NULL //Bo sung khoa x vao vi tri hien thoi

    1.1 new (p);1.2 p->key = k;1.3 p->Left = NULL;1.4 p->Right = NULL;

    2. else:2.1 if k < p->key: 2.1.1 LocAdd(p->Left, k);2.2 else:

    2.2.1 if (k > p->key): 2.1.1.1 LocAdd(p->Right, k);

    136

  • Loi b trn BST: Mt nt b xa c th ng vi cc trng hp sau:1) Nt l: Khng cn tm nt thay th.2) Nt na l: Nt thay th s l nt con duy nht ca n.3) Nt c c cy con tri v phi: Nt thay th l nt c kha nhhn ngay trc n (nt l cc phi ca cy con tri)hoc nt c kha ln hn ngay sau n (nt cc tri ca cy conphi) -> Dng mt th tc ly ra v xa nt ny.

    137

  • Th tc ly ra v xa nt cc tri ca cy con phi ca mt nt:int DeleteMin (tree &Root )1. if Root->Left = NULL

    1.1 k=Root->key;1.2 Root = Root->Right;1.3 return k;

    2. else:2.1 return DeleteMin(Root->Left);

    Th tc xa mt nt trong BST:void DeleteNode(tree &Root, int x)1. if Root = NULL:

    1.1 Thng bo khng c x; 1.2 return;

    138

  • 2. else:2.1 if x < Root->key: 2.1.1 DeleteNode(Root->Left, x);2.2 else if x > Root->key: 2.2.1 DeleteNode(Root->Right, x);2.3 else: // Tim thay x

    2.3.1 if (Root-> Left =NULL) && (Root->Right=NULL)://nt l2.3.1.1 Root =NULL;

    2.3.2 else: // Khng phi nt l2.3.2.1 if (Root-> Left = NULL): // Chi co con phai

    2.3.2.1.1 Root = Root->Right; 2.3.2.2 else:

    2.3.2.2.1 if Root->Right=NULL://Chi co con traiRoot = Root-> Left;

    2.3.3 else: // C c 2 con2.3.3.1 Root->key = DeleteMin(Root->Right);

    3. 3. return;

    139

  • 9.3 Cy cn bng AVL Khi nim: Cy nh phn tm kim cn bng(AVL) l cy m ti mi nt caoca cy con tri v ca cy conphi chnh lch khng qu 1.V d:

    Ch s cn bng ca mt nt: L hiu s ca chiu cao cy con phi v cy con tri ca n.

    140

  • Vi nt p:CSCB(p) = 0 cao cy phi (p) = cao cy tri (p)CSCB(p) = 1 cao cy phi (p) > cao cy tri (p)CSCB(p) = -1 cao cy phi (p) < cao cy tri (p)V d:

    1

    -1

    0

    0 0

    0

    -1

    -1

    1 0

    10

    0

    10

    40

    30 45

    20 35

    25

    60

    7

    3 8

    1 5

    141

  • Cu trc d liu: Ch s cn bng:

    #define RH 1#define EH 0#define LH -1

    Cu trc nt:struct AVLNode{

    char balFactor; // Ch s cn bngDataType key; // V d DataType = intAVLNode* pLeft;AVLNode* pRight;

    };typedef AVLNode* AVLTree;

    142

  • Cc thao tc c bn: Thm mt phn t; Hy mt phn t; Cn bng li mt cy va b mt cn bng.Khi thm hay hy mt phn t trong cy AVL, cy c th b mt cn bng, do ta s phi thc hin cn bng li cy.

    143

  • Cc trng hp mt cnbng:1) Cy con tri lch tri (LL)2) Cy con tri lch phi (LR)3) Cy con phi lch phi (RR)4) Cy con phi lch tri (RL)

    144

  • Cn bng li cy:1) Trng hp 1 (LL):- Nt mt cn bng l D- Thc hin 1 php quay phi ti nt D.

    145

  • 2) Trng hp 2 (LR):- Nt mt cn bng l D- Thc hin 1 php quay kp tri phi: Quay tri ti nt con tri B a v trng hp 1 ri quay phi ti nt D.

    146

  • 3) Trng hp 3 (RR):- Thc hin 1 php quay tri ti nt ti nt mt cn bng.

    147

  • 4) Trng hp 4 (RL):- Quay kp phi tri: Thc hin 1 php quay phi ti con phi nt mt cn bng a v trng hp 3 ri quay tri ti nt mt cn bng.

    148

  • Cc th tc: void rotateLL(AVLTree &T); void rotateRR (AVLTree &T); void rotateLR(AVLTree &T); void rotateRL(AVLTree &T); int balanceLeft(AVLTree &T); int balanceRight(AVLTree &T ); int insertNode(AVLTree &T, DataType X); int delNode(AVLTree &T, DataType X); int searchStandFor(AVLTree &p, AVLTree &q);

    149

  • Chng 10CY NHIU NHNH

    10.1 B - Cy10.2 Cy en (Red-Black Tree)

    150

  • 10.1 B - cy Cy m nhnh: Cy m mi nt c nhiu nht m nt con.V d: Cy cp 5 y

    Mt cy cp m y c chiu cao logmN Cy tm kim cp m: L cy cp m tng t cy NPTK, trong mi nt c m-1 kha tm.V d: Cy TK bc 3

    151

  • B - Cy: Mt CTDL B-cy cp n c cc c trng sau:1. Mi nt cha nhiu nht 2n kha (phn t).2. Mi nt, tr nt gc, cha t nht n kha.3. Mi nt hoc l nt l, hoc c m+1 con, vi m l s kha ca nt .4. Mi nt l u nm cng mt mc.

    152

  • Trong B-cy trn:- Mi nt u cha 2-4 phn t , tr nt gc c php ch cha 1 pt.- Tt c cc nt l u mc 3.- Nu dn B-cy li cn duy nht 1 mc bng cch chn cc nt con vo gia cc kha ca nt cha ca chng, th ta c dy kha SX.

    V d: Mt B-cy cp 2 c 3 mc:

    153

  • Cu trc d liu B-cy: Mi nt gm cc thnh phn sau:

    o m: S phn t thc c trong nt;

    o po: Con tr tr ti con tri nht ca nt;

    o 2n cp phn t (ki, pi), mi cp gm kha ki v con tr pi(1

  • {Khai bo trong ngun}#define MAX 4

    #define MIN 2

    struct btnode

    {int count ;

    intvalue[MAX + 1] ;struct btnode *child[MAX + 1] ;

    } ;

    155

  • Cc thao tc c bn trn B-cy: Thm phn t; Xa phn t; Tm kim phn t. Thm phn t vo B-cy: Khi thm mt kha x vo B-cy, nu kha cha c, ta phi xc nh nt l m kha c thm vo, gi s l nt C. Sau khi thm x, c th nt C b trn (c 2n+1 kha). Khi :o Tch nt l ra lm i -> cp pht thm mt nt mi D.o 2n kha hai u s c phn b u ln C v D.o Kha gia c chuyn ln nt cha ca C v D, gi s l nt A. oA c th li b trn -> Tch gc (->Tch lan truyn).o Nu gc b tch, cy s tng mc.

    156

  • V d:C B-cy nh hnh bn:Thm kha 22 vo B-cy:

    157

  • Xa phn t trn B-cy: Khi xa phn t x, c th xy ra 2 tnh hung:1) x nm nt l: Vic loi b rt n gin.2) x khng nm nt l: v tr b xa s c thay bi 1 trong 2 phn t k n (v mt gi tr), m 1 trong 2 phn tr ny c th thuc nt l v nt ny c th b loi b. trng hp 2, vic tm kha thay th tng t nh trong BST. Minh ha: Trong cc hnh di, ta loi b cc kha 25, 45, 24

    158

  • Loi tip cc kha 38, 32:

    159

  • Tm kim trn B-cy: Xt 1 nt nh di y:

    Gi s phi tm 1 kha x:1) Nu ki

  • Nguyn Vn Cn0904 412 23616, 14, 10, 8, 7, 9, 3, 2, 4, 1

    161

    16

    14 10

    8 7 9 3

    2 4 1