Hang Doi Uu Tien

download Hang Doi Uu Tien

of 27

Transcript of Hang Doi Uu Tien

  • 8/3/2019 Hang Doi Uu Tien

    1/27

    CHNG 10

    HNG U TIN

    Trong cc chng trc chng ta nghin cu KDLTT t in. T

    in l mt tp i tng d liu, mi i tng c gn vi mt gi tr

    kha, v cc php ton tm kim, xen, loi trn t in c tin hnh khi

    c cung cp mt gi tr kha. Trong chng ny chng ta s a ra

    KDLTT hng u tin. Hng u tin khc vi t in ch, thay cho gi tr

    kha, mi i tng d liu trong hng u tin c gn vi mt gi tr u

    tin, v chng ta ch quan tm ti vic tm kim v loi b i tng c gitr u tin nh nht. Ni dung chnh ca chng ny l:

    c t KDLTT hng u tin.

    Trnh by phng php ci t hng u tin bi cy th t b

    phn (heap).

    a ra mt ng dng ca hng u tin trong nn d liu v xy

    dng m Huffman.

    10.1 KIU D LIU TRU TNG HNG U TIN

    Gi s chng ta cn bo lu mt c s d liu gm cc bn ghi v cc

    bnh nhn n khm v cha bnh ti mt bnh vin. Cc bnh nhn khi n

    bnh vin s c a vo c s d liu ny. Nhng cc bc s khm cho

    bnh nhn s khng phc v ngi bnh theo th t ai n trc s c

    khm trc (nh cch t chc d liu theo hng i). Mi bnh nhn sc cp mt gi tr u tin v cc bc s s gi vo phong khm bnh nhn

    c gi tr u tin nh nht (ngi c u tin trc ht ti thi im ).

    Nhiu hon cnh khc (chng hn, h my tnh phc v nhiu ngi s

    dng) cng i hi chng ta cn phi t chc mt tp i tng d liu theo

    13

  • 8/3/2019 Hang Doi Uu Tien

    2/27

    gi tr u tin sao cho cc thao tc tm i tng v loi i tng c gi tr

    u tin nh nht c thc hin hiu qu. iu dn n s hnh thnh

    KDLTT hng u tin.

    Hng u tin (priority queue) c xem l mt tp cc i tng dliu, mi i tng c mt gi tr u tin. Thng thng cc gi tr u tin

    c th l cc s nguyn, cc s thc, cc k t; iu quan trng l chng

    ta c th so snh c cc gi tr u tin . Trn hng u tin chng ta chi

    quan tm ti cc php ton sau y:

    1. Insert (P,x). Xen vo hng u tin P i tng x.

    2. FindMin(P). Hm tr v i tng trong P c gi tr u tin nh

    nht (i tng c u tin nht). Php ton ny i hi Pkhng rng

    3. DeleteMin(P). Loi b v tr v i tng c gi tr u tin nh

    nht trong P. P cng cn phi khng rng.

    Hng u tin c s dng trong cc hon cnh tng t nh hon

    cnh nu trn, tc l khi ta cn qun l s phc v theo mc u tin.

    Hng u tin cn c s dng thit k cc thut ton trong nhiu ng

    dng. Cui chng ny chng ta s a ra mt ng dng: s dng hng u

    tin thit k thut ton xy dng m Huffman.

    Trong cc mc tip theo chng ta s cp ti cc phng php ci

    t hng u tin.

    10.2 CC PHNG PHP N GIN CI T HNG U TIN

    Trong mc ny chng ta s tho lun cch s dng cc cu trc d

    liu quen bit: danh sch, cy tm kim nh phn ci t hng u tin

    v tho lun v hiu qu ca cc php ton hng u tin trong cc cch ci

    t n gin .

    10.2.1 Ci t hng u tin bi danh sch

    14

  • 8/3/2019 Hang Doi Uu Tien

    3/27

    Ci t hng u tin n gin nht l biu din hng u tin di dng

    mt danh sch c sp hoc khng c sp theo gi tr u tin. ng

    nhin l danh sch c th c lu trong mng hay DSLK.

    Nu chung ta ci t hng u tin bi danh sch cc phn t c spxp theo th t u tin tng dn (hoc gim dn) th phn t c gi tr u

    tin nh nht nm mt u danh sch, v do cc php ton FindMin v

    DeleteMin ch cn thi gian O(1). Nhng thc hin php ton Insert

    chng ta cn tm v tr thch hp trong danh sch t phn t mi sao cho

    tnh cht c sp ca danh sch c bo tn. V vy php ton Insert i

    hi thi gian O(n), trong n l di ca danh sch.

    Nu chng ta ci t hng u tin bi danh sch cc phn t theo mtth t ty , th khi cn xen vo hng u tin mt phn t mi chng ta ch

    cn a n vo ui danh sch, do php ton Insert ch cn thi gian

    O(1). Song tm v loi phn t c gi tr u tin nh nht chng ta cn

    phi duyt ton b danh sch, v v vy cc php ton FindMin v

    DeleteMin cn thi gian O(n).

    10.2.2 Ci t hng u tin bi cy tm kim nh phn

    Trong mc 8.4.3 chng ta ci t KDLTT tp ng bi cy tmkim nh phn. Cn lu rng, c th xem hng u tin nh l mt dng c

    bit ca tp ng khi m ta ly gi tr u tin ca mi phn t lm kha v

    chi quan tm ti cc php ton Insert, FindMin, DeleteMin. V vy ng

    nhin chng ta c th ci t hng u tin bi cy tm kim nh phn. T lp

    BSTree (trong hnh 8.16), bng tha k bn c th a ra lp ci t hng u

    tin. Hiu qu ca cc php ton hng u tin trong cch ci t ny c

    tho lun trong mc 8.5. Trong trng hp tt nht thi gian thc hin ccphp ton hng u tin l O(log n), trng hp xu nht l O(n).

    Trong mc sau y chng ta s a ra mt cch ci t mi: ci t

    hng u tin bi cy th t b phn. Vi cch ci t ny, thi gian thc

    hin ca cc php ton hng u tin lun lun l O(log n).

    15

  • 8/3/2019 Hang Doi Uu Tien

    4/27

    10.3 CY TH T B PHN

    Trong mc 8.4 chng ta nghin cu CTDL cy tm kim nh phn.

    Trong cy tm kim nh phn, cc kha ca d liu cha trong cc nh ca

    cy cn phi tha mn tnh cht th t: kha ca mt nh bt k ln hn

    kha ca cc nh trong cy con tri v nh hn kha ca cc nh trong

    cy con phi. Trong cy th t b phn, ch i hi cc kha cha trong cc

    nh tha mn tnh cht th t b phn: Kha ca mt nh bt k nh hn

    hoc bng kha ca cc nh con ca n. Mc d vy, CTDL cy th t b

    phn cho php ta thc hin hiu qu cc php ton hng u tin.

    Cy th t b phn (partially ordered tree, hoc heap) l mt cy nh

    phn hon ton v tha mn tnh cht th t b phn. V d, cy nh phn

    trong hnh 10.1 l cy th t b phn.

    Hnh 10.1 Cy th t b phn

    16

    2

    2

    15

    4

    13879

    6

    12

    0

    1

    3 6

    7

  • 8/3/2019 Hang Doi Uu Tien

    5/27

    Chng ta cn lu n mt s c im ca cy th t b phn.

    Trc ht, n cn phi l cy nh phn hon ton (xem nh ngha trong mc

    8.3), tc l tt c cc mc ca cy u khng thiu nh no, tr mc thp

    nht c lp y k t bn tri. Tnh cht ny cho php ta ci t cy th

    t b phn bi mng. Mc khc, t tnh cht th t b phn ta rt ra c

    im sau: Cc gi tr kha nm trn ng i t gc ti cc nt l to thnh

    mt dy khng gim. Chng hn, dy cc gii tr kha t gc (nh 0) ti

    nh 8 l 3, 6, 9, 15. iu c ngha l, d liu c kha nh nht c lu

    trong gc ca cy th t b phn.

    cao ca cy th t b phn. Gi s n l s nh ca cy nh phn

    hon ton c cao h. D dng thy rng, 2h-1 < n 12 h v do 2h-1= 0);return data[0];

    }

    28

  • 8/3/2019 Hang Doi Uu Tien

    17/27

    Hm n ShiftDown(int i) thc hin bc hai trong thut ton

    DeleteMin(). Chng ta s dng bin parent ghi li ch s ca nh cha v

    bin child ghi li ch s ca nh con c gi tr u tin nh hn gi tr u tin

    ca nh con kia (nu c). Bin x lu li phn t cha trong nh i. Ban u

    gi tr ca parent l i, mi khi gi tr u tin ca x ln hn gi tr u tin ca

    nh child th phn t cha trong nh child c y ln nh parent v ta i

    xung nh child. n khi gi tr u tin ca x nh hn hoc bng gi tr u

    tin ca nh child hoc khi nh parent l nh l th phn t x c t vo

    nh parent. Hm ShiftDown c ci t nh sau:

    template void PriQueue :: ShiftDown(int i)

    {Item x = data[i];int parent = i;int child = 2*parent+1; //nh con tri.

    while (child

  • 8/3/2019 Hang Doi Uu Tien

    18/27

    assert(last >= 0);data[0] = data[last--]; //chuyn phn t trong nh l ngoi cng

    //bn phi mc thp nht ln gc.ShiftDown(0);

    }

    template PriQueue :: PriQueue(Item* element, int n){

    int i;for (i = 0 ; i < n ; i++)

    data[i] = element[i];last = n-1;for (i = n/2 - 1; i >= 0 ; i--)

    ShiftDown(i);}

    By gi chng ta s ci t hm Insert. Hm Insert c ci t theo

    k thut tng t nh hm ShiftDown. Bin child ban u nhn gi tr l

    last+1. Bin parent c tnh theo bin child, parent=(child-1)/2. Mi khi

    gi tr u tin ca nh cha ln hn gi tr u tin ca i tng cn xen vo

    th phn t trong nh cha c y xung nh con v ta i ln nh cha.

    Khi t ti nh cha c gi tr u tin nh hn hay bng gi tr u tin cai tng cn xen vo th i tng c t vo nh con. Hm Insert c

    ci t nh sau:

    template void PriQueue:: Insert(const Item & object, bool & suc){

    if(last = = SIZE-1)suc = false;

    else {suc = true;int child = ++last;

    while (child > 0){

    int parent = (child-1)/2;if(data[parent].priority > object.priority)

    30

  • 8/3/2019 Hang Doi Uu Tien

    19/27

    {data[child] = data[parent];child = parent;

    }else break;

    }data[child] = object;

    }}

    10.5 NN D LIU V M HUFFMAN

    Nn d liu (data compression) hay cn gi l nn file l k thut rt

    ngn c ca file c lu tr trn a. Nn d liu khng ch nhm tng kh

    nng lu tr ca a m cn tng hiu qu ca vic truyn d liu qua ccng truyn bi modem. Chng ta lun lun gi thit rng, file d liu

    cha cc d liu c biu din nh l mt xu k t c to thnh t cc

    k t trong bng k t ASCII. lu cc d liu di dng file, chng ta

    cn phi m ho cc d liu di dng mt xu nh phn (xu bit), trong

    mi k t c biu din bi mt dy bit no c gi l t m (code

    word). Qu trnh s dng cc t m bin i xu bit tr v xu k t

    ngun c gi l gii m.Trc ht ta ni ti cch m ho n gin: cc t m c i di bng

    nhau. Bi v bng ASCII cha 128 k t, nn ch cn cc t m 8 bit l

    biu din 128 k t. Cn ch rng, nu xu k t c to thnh t p k t

    th mi t m cn t nht plog bit. V d, nu xu k t ngun ch

    cha cc k t a,b,c,d,e v f th ch cn 3 bit cho mi t m, chng han

    ta c th m a = 000, b = 001, c = 010, d = 011, e = 100, v f = 101.

    Phng php m ho s dng cc t m c di bng nhau c u

    im l vic gii m rt n gin, nhng khng tit kim c khng

    gian trn a, chng hn trong v d trn, nu xu ngun c di n th

    31

  • 8/3/2019 Hang Doi Uu Tien

    20/27

    s bt cn thit l 3.n bt k s ln xut hin ca cc k t trong xu

    nhiu hay t.

    Chng ta c th gim s bt cn thit m xu k t ngun bng

    cch s dng cc t m c di thay i, tc l cc k t c mho bi cc t m c di khc nhau. Chng ta s biu din k t c

    tn xut xut hin cao bi t m ngn, cn k t c tn xut xut hin

    thp vi cc t m di hn. Nhng khi m cc t m c di thay i,

    gii m chng ta cn phi c cch xc nh bit bt u v bit kt thc

    mt t m trong xu bit. Nu mt t m c th l on u (tin t) ca

    mt t m khc th khng th gii m c duy nht. Chng hn, khi

    xu ngun cha cc k t a, b, c, d, e v f v ta s dng cc t m: a =00, b = 111, c = 0011, d = 01, e = 0 v f = 1 (t m 00 l tin t ca t

    m 0011, t m 0 l tin t ca t m 01, 00, 0011, t m 1 l tin t

    ca t m 111); khi , xu bit 010001 c th gii m l cc t dad,

    deed, efad, Do , m bo mt xu bit ch c th l m ca mt

    xu ngun duy nht, chng ta c th s dng cc t m sao cho khng

    c t m no l tin t ca mt t m khc.

    Mt h t m m khng c t m no l tin t ca t m khc s

    c gi l m tin t (prefix code). Ngi ta xy dng m tin t da

    trn tn xut ca cc k t trong xu ngun. Phng php m ny cho

    php rt bt ng k s bit cn thit. V d, chng ta li gi thit xu

    ngun c to thnh t cc k t a, b, c, d, e v f, xu c di 10000

    k t, trong k t a xut hin 3000 ln, b xut hin 1000 ln, c xut

    hin 500 ln, d xut hin 500 ln, e xut hin 3000 ln v f xut hin2000 ln. Chng ta c th s dng m tin t nh sau, a = 00, b = 101,

    c = 1000, d = 1001, e = 01 v f = 11, khi s bit cn thit l:

    3000.2+1000.3+500.4+500.4+3000.2+2000.2 = 23000 bit

    32

  • 8/3/2019 Hang Doi Uu Tien

    21/27

    Trong khi , nu s dng cc t m cng di l 3 bit th s bit i

    hi l 10000.3 = 30000 bit.

    Nh vy, vn c t ra by gi l, lm th no t mt xu

    k t ngun, ta xy dng c m tin t sao cho s bit cn thit trongxu m l t nht c th c. M tin t tho mn tnh cht c

    gi l m tin t ti u. Di y chng ta s trnh by phng php

    m c xut bi Huffman.

    Chng ta s biu din m tin t di dng cy nh phn, ti mi

    nh ca cy, nhnh bn tri c gn nhn l 0, nhnh bn phi c

    gn nhn l 1, mi k t c lu trong mt nh l ca cy. Khi , t

    m ca mi k t l xu bit to thnh t cc nhn trn ng i t gc

    ti nh l cha k t . Chng hn, m tin t a ra trn (a=00,

    b=101, c=1000, d=1001, e=01 v f=11) c biu din bi cy nh

    phn trong hnh 10.6.

    33

    0

    1

    10

    10

    b

    fea

    c

    0 1

    0

    1

    d

  • 8/3/2019 Hang Doi Uu Tien

    22/27

    Hnh 10.6. Cy nh phn biu din m tin t.

    Chng ta c nhn xt rng, khi mt m c th biu din bi cy nh

    phn nh m t trn th m s l m tin t, iu c suy ra t tnhcht cc k t ch c cha trong cc nh l ca cy. Mt khc, chng ta

    c th gii m rt n gin nu chng ta biu din m tin t bi cy nh

    phn. Thut ton gii m nh sau: c xu bit bt u t bit u tin, v bt

    u t gc cy ta i theo nhnh tri nu bit c c l 0 v i theo nhnh

    phi nu bit l 1. Tip tc c bit v i nh th cho ti khi gp mt nh l,

    k t c lu trong nh l c vit ra xu kt qu. Li c k t tip

    theo v li bt u t gc i xung, lp li qu trnh cho ti khi ton bxu bit c c qua.

    Thut ton Huffman s dng hng u tin xy dng m tin t

    di dng cy nh phn. Cy kt qu c gi l cy Huffman v m tin t

    ng vi cy c gi l m Huffman. Trc ht xu k t ngun cn

    c c qua tnh tn xut ca mi k t trong xu. Ta k hiu tn xut

    ca k t c l f(c). Vi mi k t xut hin trong xu ngun, ta to ra mt

    nh cha k t , nh ny c xem nh gc ca cy nh phn ch c mtnh. Chng ta k hiu tp nh l . Tp c ly lm u vo ca

    thut ton Huffman. tng ca thut ton Huffman l t tp cc cy ch c

    mt nh, ti mi bc ta kt hp hai cy thnh mt cy, v lp li cho n

    khi nhn c mt cy nh phn kt qu. Ch rng, chng ta cn xy dng

    c cy nh phn sao cho ng i t gc ti nh l cha k t c tn xut

    cao cn phi ngn hn ng i t gc ti nh l cha k t c tn xut

    thp hn. V vy, trong qu trnh xy dng, mi nh gc ca cy nh phnc gn vi mt gi tr u tin c tnh bng tng cc tn xut ca cc k

    t cha trong cc nh l ca n, v ti mi bc ta cn chn hai cy nh

    phn c mc u tin nh nht kt hp thnh mt. Do trong thut ton,

    ta s s dng hng u tin P lu cc nh gc ca cc cy nh phn, gi tr

    u tin ca nh v s c k hiu l f(v), nh con tri ca nh v c k

    34

  • 8/3/2019 Hang Doi Uu Tien

    23/27

    hiu l leftchild(v), nh con phi l rightchild(v). ban u hng u tin P

    c to thnh t cc tp nh ni trn, ta gi s cha n nh.

    Thut ton Huffman gm cc bc sau:

    1. Khi to hng u tin P cha cc nh trong tp 2. Bc lp

    For ( i = 1 ; i

  • 8/3/2019 Hang Doi Uu Tien

    24/27

    (a)

    (b)

    (c)

    (d)

    36

    5 7 10 23 30

    f b d a c e

    d a c e

    f b

    2 3 7 10 23 30

    30231210

    d

    a c e

    bf

    302322

    d

    a

    c e

    bf

  • 8/3/2019 Hang Doi Uu Tien

    25/27

    (e)

    37

    30 22

    d

    a

    c

    e

    bf

  • 8/3/2019 Hang Doi Uu Tien

    26/27

    (f)

    Hnh 10.6. Qu trnh xy dng cy Huffman.

    T cy Huffman trong hnh 10.6, ta thnh lp c cc t m nh sau:

    e = 0, c = 11, a = 100, d = 1011, f = 10100, v b = 10101.

    BI TP

    1. Ta c th biu din hng u tin bi danh sch theo th t bt k hocbi danh sch c sp theo gi tr u tin tng dn (hoc gim dn).Hy ci t lp hng u tin bng cch tha k private t lp c sDlist (hoc Llist) trong cc trng hp sau:

    38

    d

    a

    c

    e

    bf

  • 8/3/2019 Hang Doi Uu Tien

    27/27

    a. Hng u tin c biu din bi danh sch theo th t bt k.b. Hng u tin c biu din bi danh sch c sp theo gi tr

    u tin gim dn (tng dn).

    2. Gi s rng, cc i tng khc nhau ca hng u tin c th c cngmt gi tr u tin. Ly gi tr u tin lm kho, hy a ra cch biudin hng u tin di dng cy tm kim nh phn. Hy thit k vci t lp hng u tin khi hng u tin c biu din bi cy tmkim nh phn theo cch a ra.

    3. Cho mt dy i tng vi cc gi tr u tin l 10, 12, 1, 14, 6, 5, 8,15 v 9.

    a. T cy th t b phn rng, hy xen vo tng i tng theoth t lit k. V ra cy kt qu.

    b. Hy s dng thut ton xy dng cy th t b phn cho dyi tng trn. So snh cy ny vi cy nhn c bng cchxen vo tng i tng cu a