Dong Nhi Thuc-Thiep

Embed Size (px)

Citation preview

  • 8/4/2019 Dong Nhi Thuc-Thiep

    1/24

    Gi vo th cho mnh: [email protected]

    NG NH THC

    1 Gii thiu chung.............................................................................................2

    2 Cy nh thc v ng nh thc......................................................................2

    2.1 ng nh phn...........................................................................................22.2 Cy nh thc..............................................................................................3

    2.2.1 nh ngha cy nh thc.....................................................................3

    2.2.2 c im cy nh thc.......................................................................4

    2.3 ng nh thc............................................................................................5

    2.3.1 nh ngha.........................................................................................5

    2.3.2 Tnh cht............................................................................................6

    2.3.3 Biu din ng nh thc.....................................................................63 Cc thao tc trn ng nh thc....................................................................8

    3.1 To mt ng nh thc..............................................................................8

    3.2 Tm kha nh nht.....................................................................................8

    3.3 Hp hai ng nh thc...............................................................................9

    3.3.1 Lin kt hai cy nh thc....................................................................9

    3.3.2 Ha nhp (Merge) hai ng nh thc.............................................10

    3.3.3 Hp (Union) hai ng nh thc........................................................123.4 Chn mt nt vo ng nh thc.............................................................17

    3.5 Tch ra nt c kha nh nht..................................................................18

    3.6 Gim kha...............................................................................................20

    3.7 Xa mt kha..........................................................................................23

    4 nh gi v kt lun....................................................................................23

  • 8/4/2019 Dong Nhi Thuc-Thiep

    2/24

    1 Gii thiu chung

    ng nh thc (Binomial heaps) c gii thiu bi Vuillemin [1]. Brown [2,

    3], nghin cu chi tit cc c im ca n c gii thiu trong cun "Introduction

    to Algorithms" [4]. Cu trc d liu ng nh thc c gi l ng hp nht

    (Mergeable heaps) h tr thao tc sau:1 Heap_empty() khi to v tr v mt ng mi rng.

    2. Insert(Hp, x) chn nt x, m key ca n c in vo ng Hp.

    3. Find_min_key(Hp) tr v mt con tr ch n nt trong ng H m trng

    key l nh nht.

    4. Delete_min(Hp) tch ra nt t ng Hp m key l nh nht, tr v mt con

    tr ch vo nt ny.

    5. Merge(Hp1, Hp2) to v tr v mt ng mi c cha tt c cc nt cang Hp1 v Hp2. Cc ng Hp1 v Hp2 c xa b bi thao tc ny.

    Ngoi ra, cu trc d liu ng nh thc c Vuillemin gii thiu nm 1978

    h tr thm hai thao tc sau y:

    1. Decrease_key(Hp, x, k) gn cho nt x trong ng Hp gi tr mi k khng

    ln hn gi tr hin ti ca x.

    2. Delete(Hp, x) xa nt x trong ng Hp.

    Nh vy, ng nh thc l mt ng tng t nh mt ng nh phn v cnh tr mt cch nhanh chng st nhp hai ng. iu ny t c bng cch s

    dng mt cu trc cy c bit.

    2 Cy nh thc v ng nh thc.

    2.1 ng nh phn

    Mt ngnh phn (heap) l mt cu trc cy nh phn vi hai tnh cht sau:

    1) Cy nh phn y hoc gn nh y .

    2). Kha ti mi nt u nh hn hoc bngkha ca cc nt trong hai cycon ca n.

    Hnh 2-1. V d mt ng nh phn Min-heap

    http://translate.googleusercontent.com/translate_c?hl=vi&sl=en&u=http://en.wikipedia.org/wiki/Heap_(data_structure)&prev=/search%3Fq%3DBinomial%2Bheaps%26hl%3Dvi%26biw%3D1024%26bih%3D637%26prmd%3Divns&rurl=translate.google.com.vn&usg=ALkJrhj9cvt1L1Cb-Pl-Vnc0I4J5RZxH1Qhttp://translate.googleusercontent.com/translate_c?hl=vi&sl=en&u=http://en.wikipedia.org/wiki/Heap_(data_structure)&prev=/search%3Fq%3DBinomial%2Bheaps%26hl%3Dvi%26biw%3D1024%26bih%3D637%26prmd%3Divns&rurl=translate.google.com.vn&usg=ALkJrhj9cvt1L1Cb-Pl-Vnc0I4J5RZxH1Q
  • 8/4/2019 Dong Nhi Thuc-Thiep

    3/24

    Chng ta gi heap c nh ngha nh trn l mt Min- heap, phn bit vi

    trng hp Max-heap. Trong min-heap th phn t ti gc l phn t b nht. Max-

    heap s sa iu kin th hai thnh Kha ti mi nt u ln hn hoc bng kha

    ca cc nt trong hai cy con ca n, do phn t ti gc s l phn t ln nht.

    ng nh phn c ng dng rng ri c bit s dng cho hng u tin(Priority queue), ta c th thc hin n gin cc php thm phn t, loi b phn t,

    tm phn t nh(ln) nht, tng gim u tin, nhng thao tc trn cc ng nh

    phn thc hin khng hiu qu v vic i hi lun phi di chuyn cc phn t.

    khc phc hn ch trn ngi ta a ra cc cu trc khc nh:

    - d-heaps: hon ton ging nh ng nh phn ngoi tr mi nt c d tr

    khng phi 2 con, d cng ln th cng li cho php thm vo.

    - Heap lch tri (Leftist heaps): cng ging nh ng nh phn nhngti mi nt chiu di ng i n Null ca con bn tri ln hn hoc bng

    chiu di ng i n Null ca con bn phi, thun li cho php trn vi

    chi ph l O(logN).

    - Skew heap: ging nh heap lch tri nhng khng cha thng tin v ng

    i ti Null v khng c rng buc g v chiu di ng i phi. Nh vy

    trong trng hp xu nht cc tc v chi ph n O(N), khi cy nh phn

    suy bin thnh chui mc xch N nt v bn phi.2.2 Cy nh thc

    2.2.1 nh ngha cy nh thc.

    Cy nh thc Bk vi k = 0, 1, 2, l mt cy c th t c nh ngha quy:

    1). Cy nh thc B0 gm mt nt duy nht.

    2). Cy nh thc Bk gm hai cy nh thc Bk-1 c lin kt vi nhau theo mt

    cch nht nh:

    * Nt gc ca cy ny l con bn tri nht ca nt gc ca cy kia.

    Hnh 2-2. nh ngha quy ca cy nh thc B k

  • 8/4/2019 Dong Nhi Thuc-Thiep

    4/24

    Hnh 2-3. V d biu din cc cy nh thc B 0, B1, B2, B3, B4

    Hnh 2-4. Mt cch nhn khc ca cy nh thc Bk

    2.2.2 c im cy nh thc.

    a). B :

    Cy nh thc Bk c cc tnh cht sau:

    1). c 2k nt,

    2). chiu cao ca cy l k,

    3). c ng Ck

    int ti su i vi i = 0, 1,..., k

    4). bc ca nt gc ca cy l k, n ln hn bc ca mi nt khc; ngoi ra nu

    cc con ca nt gc c nh s t tri sang phi bng k - 1, k - 2,..., 0, th

    nt con i l gc ca cy con Bi .

    Chng minh:

    1) Dng phng php quy np ton hc theo k:

  • 8/4/2019 Dong Nhi Thuc-Thiep

    5/24

    Bc c bn: d dng thy cc tnh cht l ng cho B0 c 1 nt, hin nhin

    ng v 20 =1 nt.

    Bc quy np: gi s b l ng cho Bk-1 tc l c 2k-1 nt, cy nh thc Bk

    gm hai cy Bk-1 nn cy Bk c 2k-1 + 2k-1 = 2k nt.

    2). Do cch lin kt hai cy nh thc Bk-1 vi nhau to nn Bk nn su tia ca nt trong Bk bng su ti a ca nt trong Bk-1 cng thm 1, tc l: (k - 1) +

    1 = k.

    3). Gi D(k,i) l s cc nt ti su i ca cy nh thc B k, khi Bk bao gm

    hai cy Bk-1 kt hp vi nhau, mt nt su i trong Bk-1 xut hin trong Bk mt ln

    su i v mt ln su i+1, ngha l s nt su i trong Bk s bng s nt

    su i trong Bk-1 cng vi s nt su i-1 trong Bk-1 .

    Hnh 2-5. Biu din s nt ti su i ca B k

    CCCk

    i

    k

    i

    k

    iikDikDikD =+=+=

    1

    1

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

    4). T nh ngha cy nh thc v hnh 2-4 ta nhn thy trong cy Bk ch c mt

    nt duy nht cao hn cc nt trong Bk-1 chnh l nt gc, nt gc cy Bk-1 c bc l k-1 th nt gc ca Bk c bc l k. Bng phng php quy np ton hc, t hnh 2-4 t

    tri qua phi cc con ca nt gc cy Bk-1 chnh l gc ca cc cy Bk-2, Bk-3, , B1,

    B0. Khi Bk-1 lin kt vi Bk-1 tao nn Bk khi cc con ca nt gc chnh l gc ca

    Bk-1, Bk-2, , B1, B0.b) H qu:

    Bc ti a ca mt nt bt k trong mt cy nh thc c n nt l l log2(n).

    Chng minh:T tnh cht 4 ca b ta c n=2k vi k l bc ca nt gc (l bc ti a),

    logarit hai v ta c k=log2(n).

    2.3 ng nh thc

    2.3.1 nh ngha.

    Mt ng nh thc H l mt tp cc cy nh thc tha mn cc tnh cht sau:

    1). Mi cy nh thc trong H l mt ng c trt t (heap-ordered): mi nt

    u c kha ln hn hay bng kha ca nt cha ca n.

  • 8/4/2019 Dong Nhi Thuc-Thiep

    6/24

    2). Vi mi s nguyn k 0 cho trc th c nhiu nht mt cy nh thc

    trong H m gc ca n c bc l k.

    iu c ngha l mt ng nh thc khng c php c hai cy c cng

    chiu cao.

    2.3.2 Tnh cht.

    1). Gc ca mt cy trong mt ng nh thc cha kha nh nht trong cy.

    2). Mt ng nh thc H vi n nt gm nhiu nht l log2(n) +1 cy nh

    thc.

    Chng minh:

    1). T tnh cht ca ng (heaps) hin nhin ta c.

    2). n c biu din nh phn duy nht, biu din ny cn log2(n) +1 bits, c

    dng b log2 n , b log2 n -1 ,..., b0 sao cho:

    T b 2.2.2, ta thy cy nh thc Bi xut hin trong H khi v ch khi bi = 1.

    nh vy ng nh thc H cha t nht log2(n) +1. Vi n=10 th trong heap c hai

    cy nh thc l B1 v B3.

    2.3.3 Biu din ng nh thc.

    lu tr cho mi cy nh thc trong mt ng nh thc ta s dng qui tc:

    Biu din theo kiu Bn tri l con, bn phi l anh em (left-child, right-

    sibling representation).

    Mi nt x c cc trng sau:

    - parent[x]: tr con tr n nt cha ca x.

    - key[x]: tr kha ca nt.

    - degree[x]: bc ca x (= s cc con ca x)

    - child[x]: con tr n con bn tri nht ca x.

    Nu x khng c con th child[x] = NIL

    - sibling[x]: con tr n anh em ca x ngay bn phi x.

    Nu x l con bn phi nht ca cha ca n th sibling[x] = NIL.

    parentkey

    degree

    child siblingHnh 2-6. Biu din cc trng ca nt x.

    i

    n

    i

    ibn 2

    2log

    0

    =

    = 10103 2 1 0

    10 =

  • 8/4/2019 Dong Nhi Thuc-Thiep

    7/24

    Hnh 2-7. Biu din mt ng nh thc

    Cc gc ca cc cy nh thc trong mt ng nh thc c t chc thnh mt

    danh sch lin kt, gi l danh sch cc gc ca ng nh thc.

    Khi duyt danh sch cc gc ca mt ng nh thc th cc bc ca cc gc

    theo th t tng dn.

    Nu x l mt gc th sibling[x] ch n gc k n trong danh sch cc gc.

    - truy cp mt heap nh thc H:

    head[H]: con tr ch n gc u tin trong danh sch cc gc ca H.

    head[H] = NIL nu H khng c phn t no.

    - Khai bo ng nh thc:typedef struct heap_node_t {

    int key;unsigned int degree;struct heap_node_t* parent;struct heap_node_t* child;

    struct heap_node_t* sibling;} heap_node;

    Danh sch gc

  • 8/4/2019 Dong Nhi Thuc-Thiep

    8/24

    3 Cc thao tc trn ng nh thc.

    3.1 To mt ng nh thc.

    - Th tc to mt ng nh thc mi:

    Make_Binomial_Heap

    1.To mt i tng H vi head[H] =NULL.

    C thi gian chy l O(1).heap_node* Make_Binomial_Heap()

    {heap_node* h;h = new heap_node_t;

    h = NULL;return h;

    }- Khi to mt nt (node) vi kha l key:void Heap_Node_Init(heap_node *node, int key)

    {node->parent = NULL;node->child = NULL;node->sibling = NULL;node->key = key;node->degree = 0;

    }

    3.2 Tm kha nh nht.

    Th tc tm mt kha nh nht trong mt ng nh thc H c n nt tr v con

    tr ti nt c kha nh nht, gi s rng trong cc nt khng c nt no c gi tr

    kha l . V ng nh thc l tp hp cc cy nh thc c tnh cht ng

    (min_heap), do vy ta ch tm nt kha nh nht trong danh sch gc.

    Binomial_Heap_Min(H)1). y := NIL;

    2). x := head[H];

    3). min := ;

    4). while x NIL do

    a). ifkey[x] < min then

    min := key[x];

    y := x;b). x := sibling[x];

  • 8/4/2019 Dong Nhi Thuc-Thiep

    9/24

    5). return y;

    Thi gian chy ca th tc l O(lg n) v cn kim tra nhiu nht l lg n + 1

    nt gc.

    Th tc ci t di y tr v con tr node tr ti nt kha nh nht v con

    tr prev ng trc con tr node.void Binomial_Heap_Min(BinomialHeap *H, heap_node **prev,

    heap_node **node){

    heap_node *prev_, *cur_;*prev = NULL;if (H->head == NULL)

    {*node = NULL;return;}

    *node = H->head;prev_ = H->head;cur_ = H->head->sibling;while(cur_){

    if(cur_->key < (*node)->key){

    *node = cur_;*prev = prev_;

    }prev_ = cur_;cur_ = cur_->sibling;

    }}

    3.3 Hp hai ng nh thc

    Thao tc hp hai ng nh thc l thao tc c bn nht, c s dng nh mt

    chng trnh con cho hu ht cc thao tc cn li. Trc ht chng ta xem xt vn

    lin kt hai cy nh thc.3.3.1 Lin kt hai cy nh thc.

    Gi s lin kt cy nh thc nh thcBk- 1 c gc ti nty vo cy nh thcBk- 1

    c gc ti ntz to ra cy nh thcBk . Ntz tr thanh gc ca mt cyBk.

    Binomial_Link(y,z)

    1). parent[y] := z;

    2). sibling[y] := child[z];

    3). child[z] := y;4). degree[z] := degree[z] + 1

  • 8/4/2019 Dong Nhi Thuc-Thiep

    10/24

    Thi gian chy ca th tc l O(1).

    Hnh 3-8. Lin kt hai cy nh thc

    Th tc ci t di y tr v cy nh thc khi thc hin lin kt hai cy nh

    thc T1 v T2.heap_node* Binomial_Link(heap_node* T1, heap_node* T2)

    {if(T1->key > T2->key)

    return Binomial_Link(T2,T1);T2->parent = T1;T2->sibling = T1->child;T1->child = T2;T1->degree = T1->degree + 1;return T1;

    }

    3.3.2 Ha nhp (Merge) hai ng nh thc.

    Th tc ha nhp danh sch cc gc ca ng nh thc H1 v danh sch cc

    gc ca heap nh thc H2 thnh mt danh sch cc gc duy nht m th t cc bc l

    tng dn .

    Hnh 3-9. Ha nhp hai danh sch gc H1, H2 theo th t bc tng dn.

    Binomial_Heap_Merge(H1,H2)

    1). a = head[H1]

    2). b = head[H2]

    3). head[H1] = Min-Degree(a, b)

    4). if head[H1] = NULL

    return

    5). if head[H1] = b then b = a

    6). a = head[H1]

  • 8/4/2019 Dong Nhi Thuc-Thiep

    11/24

    7). while b NULL do

    a). if sibling[a] = NULL then

    sibling[a] = b

    return

    b). else if degree[sibling[a]] < degree[b] thena = sibling[a]

    else c = sibling[b]

    sibling[b] = sibling[a]

    sibling[a] = b

    a = sibling[a]

    b = c

    Nu cc danh sch cc gc ca H1 v H2 c tng cng l m gc, th thi gianchy ca th tc l O(m).

    heap_node* Binomial_Heap_Merge( BinomialHeap *H1,BinomialHeap *H2)

    {heap_node* head, *a,*b;a = H1->head;b = H2->head;head = a;

    if(IsEmpty(H1)) // Heap H1 rngreturn b;if(IsEmpty(H2)) // heap H2 rng

    return a;if(a->degree > b->degree)

    return Binomial_Heap_Merge(H2,H1);while(b != NULL)

    {if(a->sibling == NULL) // c mt cy

    {a->sibling = b;break;

    }else if(a->sibling->degree < b->degree)

    a = a->sibling;else{

    heap_node* c = b->sibling;b->sibling = a->sibling;a->sibling = b;b=c;

    }}

    return head;

  • 8/4/2019 Dong Nhi Thuc-Thiep

    12/24

    }

    3.3.3 Hp (Union) hai ng nh thc.

    Th tc hp hai ng nh thc co hai giai on. Giai on th nht thc hin

    bi gi th tc Binomial_Heap_Merge kt hp cc danh sch cc gc ca ng

    nh thc H1 v H2 vo mt danh sch lin kt H duy nht c sp xp theo bc niu tng, nu danh sch H nhn c l rng (do H1 v H2 u rng) th thut ton

    dng ti y.

    Giai on th hai, trn c s danh sch lin kt H (c t nht mt gc) chng ta

    c th thc hin tt c cc thao tc lin kt mt cch nhanh chng H tr thnh mt

    ng nh thc mi. u tin ta khi to ba con tr v c duy tr trong sut th tc:

    x tr vo gc hin ang c xt.

    prev_x tr ti gc ng trc x trong danh sch gc sibling[prev_x] = x vnext_x tr ti gc ng sau x trong danh sch gc sibling [x] = next_x.

    Hnh 3-10. Khi to cc con tr trn danh sch gc.

    Ban u c nhiu nht hai gc c bc bng nhau trong danh sch gc H (v H1

    v H2 u l ng nh thc) v chng k tip nhau trong danh sch. Nhng thc t

    trong qu trnh hp nht c th xut hin ba gc c bc bng nhau k tip, do vy

    vic kt hp x v next_x l ph thuc vo bc ca chng v bc ca sibling [next_x].

    Ta c cc trng hp sau:

    Trng hp 1: th hin trong hnh 3-4 (a), xy ra khi degree[x]

    degree[next_x] co ngha l x l gc ca mt cy Bk v next_x l gc ca cy Bl

    (l>k), chng ta khng lin kt x v next_x do vy chi n gin l cc con tr

    ln mt v tr trong danh sch gc.

    Trng hp 2: th hin trong hnh 3-4 (b), xy ra khi xut hin ba gc c bc

    bng nhau, ngha l degree[x] = degree[next_x] = degree[sibling[next_x]],

    chng ta x l trng hp ny tng t nh trng hp 1.

    Trng hp 3, 4: th hin trong hnh 3-4 (c) v (d) xy ra khi ch degree[x] =

    degree[next_x] degree[sibling[next_x]], chng ta gi th tc

    Binomial_Link lin kt x v next_x ty thuc vo key[x]

    key[next_x]hay key[x] > key[next_x], sau chng ta t li con tr nh hnh minh ha.

  • 8/4/2019 Dong Nhi Thuc-Thiep

    13/24

  • 8/4/2019 Dong Nhi Thuc-Thiep

    14/24

    12head[H]x ne12head[H]x ne

    head[H]

    18

    12

    x

    head[H]

    18

    12

    x

  • 8/4/2019 Dong Nhi Thuc-Thiep

    15/24

    head[H]

    18

    12

    pre

    head[H]

    18

    12

    pre

    head[H]

    18

    12

    prev-xhead[H]

    18

    12

    prev-x

    Hnh 3-13. Cc trng hp khi lin kt danh sch gc H nhn c ng nh thc mi.

  • 8/4/2019 Dong Nhi Thuc-Thiep

    16/24

    Binomial_Heap_Union(H1,H2)

    1). H := Make_Binomial_Heap()

    2). head[H] := Binomial_Heap_Merge(H1,H2)

    /* gii phng H1 v H2 */

    3). if head[H] = NULL thenreturn H

    5). prev_x := NULL

    6). x := head[H]

    7). next_x := sibling[x]

    8). while next_x NULL do

    a). if (sibling[next_x] NULL ) and (degree[x] degree[next_x])

    or degree[sibling[next_x]] = degree[x]) then /* case 1 & 2 */prev_x := x

    x := next_x

    b). else if key[x]

  • 8/4/2019 Dong Nhi Thuc-Thiep

    17/24

    H->head = Binomial_Heap_Merge (H1, H2);if(H->head == NULL)

    return H;prev_x = NULL;x = H->head;next_x = x->sibling;

    while(next_x != NULL){if(((next_x->sibling!=NULL)&&(x->degree==

    next_x->sibling->degree ))||(x->degree != next_x->degree)) // Case 1,2{

    prev_x = x;x = next_x;

    }else if (x->key key) // Case 3

    {x->sibling = next_x->sibling;Binomial_Link(x,next_x);

    }else { if (prev_x == NULL) // Case 4

    H->head = next_x;else

    prev_x->sibling = next_x;Binomial_Link(next_x,x);x = next_x;

    }next_x = x->sibling;

    }return H;

    }

    3.4 Chn mt nt vo ng nh thc

    Th tc chn mt nt x vo mt heap nh thc H, gi s dnh ch cho x

    v kha ca x, key[x], c in vo. Qu trnh thc hin tht n gin, bc u

    ta to mt ng nh thc H' bao gm mt nt x, sau ta thc hin gi th tcBinomial_Heap_Union hp H v H'.

    Binomial_Heap_Insert(H,x)

    1). H' := Make-Binomial-Heap()

    2). parent[x] := NIL

    3). child[x] := NIL

    4). sibling[x] := NIL

    5). degree[x] := 06) head[H'] := x

  • 8/4/2019 Dong Nhi Thuc-Thiep

    18/24

    7). H := Binomial_Heap_Union(H,H')

    Thi gian thc hin to mt ng nh thc H' gm mt nt x l O(1), thi gian

    gi Binomial_Heap_Union hp H' va H c n nt l O(lg n). vy tng thi gian l

    O(lg n).

    void Binomial_Heap_Insert(BinomialHeap **H, heap_node* x){

    BinomialHeap *H1;Make_Binomial_Heap(&H1);x->parent = NULL;x->child = NULL;x->sibling = NULL;x->degree = 0;H1->head = x;*H = Binomial_Heap_Union(*H,H1);

    }3.5 Tch ra nt c kha nh nht

    Th tc tch ra nt c kha nh nht khi heap nh thc: a nt c kha

    nh nht ra khi ng nh thc H v tr v mt con tr ch n nt c tch ra.

    Binomial-Heap-Extract-Min(H)

    1). Tm nt gc x vi kha nh nht trong danh sch gc ca

    V xa x ra khi danh sch gc ca H.

    2). H' := Make_Binomial_Heap()3). o ngc th t ca cc con ca x trong danh sch lin kt ca chng,

    v gn vo head[H] con tr ch n u ca danh sch c c

    4). H := Binomial_Heap_Union(H,H')

    5). return x

    Quy trnh ny hot ng nh th hin trong v d hnh 3-7. u vo l ng

    nh thc H c th hin trong hnh 3-7 (a). Hnh 3-7 (b) cho thy tnh hnh sau khi

    nt gc x vi kha nh nht c g b ra khi danh sch gc ca H. Nu x lgc ca mt Bk, theo tnh cht ng nh thc th cc con ca x t tri sang phi s l

    gc ca cc cy Bk-1, Bk-2, , B1, B0. Hnh 3-7 (c) th hin khi ta o ngc danh sch

    cc con ca x. Khi chng ta s nhn c mt ng nh thc H bao gm phn cn

    li loi b x v ng nh thc H' vi danh sch gc l cc con ca x c o

    ngc. Cui cng l gi th tc Binomial_Heap_Union hp H v H'.

    Thi gian chy ca th tc l O(lg n) v nu H c n nt th mi dng t 1 n 4

    thc thi trong thi gian O(lg n).

  • 8/4/2019 Dong Nhi Thuc-Thiep

    19/24

    V d: Tch ra nt kha nh nht

    head[(a) head[head[(a)

    37

    head[H](c)37

    head[H]37

    head[H](c)Hnh 3-14. Tch ra nt kha nh nht

    Hm di y tr v danh sch cc nt o ngc khi xa b con tr cha.heap_node* Binomial_Heap_Reverse (heap_node* h)

    {heap_node *next;

    heap_node *tail = NULL;if(h == NULL)

    return h;

  • 8/4/2019 Dong Nhi Thuc-Thiep

    20/24

    h->parent = NULL;while(h->sibling != NULL)

    {next = h->sibling;h->sibling = tail;tail = h;

    h = next;h->parent = NULL;}

    h->sibling = tail;return h;

    }

    heap_node* Binomial_Heap_Extract_Min(BinomialHeap **H){

    heap_node *prev, *node;

    BinomialHeap *H1;Binomial_Heap_Min (*H, &prev, &node);if(node == NULL)

    return NULL;if(prev != NULL)

    prev->sibling = node->sibling;else

    (*H)->head = node->sibling;Make_Binomial_Heap(&H1);H1->head = Binomial_Heap_Reverse(node->child);

    (*H) = Binomial_Heap_Union(*H,H1);return node;

    }

    3.6 Gim kha

    Th tc gim kha ca mt nt x trong ng nh thc H n gi tr k mi. u

    tin chng ta kim tra gi tr k mi c ln hn gi tr kha hin hnh khng, nu ln

    hn thng bo li, ngc li chng ta thc hin nh sau:

    - Gn kha mi cho nt x, t con tr y tr ti x v z tr ti cha ca y (z =

    parent[y]).

    - Ta s thc hin kim tra i ngc ln cho n nt gc ca cy nh thc cha

    n th dng: nu gp nt c gi tr kha ln th i kha (key[y] < key[z]) v t li

    cc con tr.

    V d: Gim kha nt c gi tri bng 26 ti 7 trong ng nh thc H.

  • 8/4/2019 Dong Nhi Thuc-Thiep

    21/24

    head[head[

    Hnh 3-15. Cc bc thc hin gim kha t 26 ti 7

  • 8/4/2019 Dong Nhi Thuc-Thiep

    22/24

    Binomial_Heap_Decrease_Key(H,x,k)

    1). if k > key[x] then

    error "kha mi ln hn kha hin hnh"

    2). key[x] := k

    3). y := x4). z := parent[y]

    5). while z NULL and key[y] < key[z] do

    i kha ( key[y], key[z])

    y := z

    z := p[y]

    Thi gian chy ca th tc l O(lg n): v x c su ti a l lg n nn

    vng lp while (dng 5) lp ti a lg n ln.void Node_Swap(heap_node **node1, heap_node **node2)

    {int tg;tg = (*node1)->key;(*node1)->key = (*node2)->key;(*node2)->key = tg;

    }

    void Binomial_Heap_Decrease_Key(BinomialHeap **heap,heap_node *node, int new_key)

    {heap_node *temp, *parent;if( new_key >= node->key)

    {printf("Key moi lon hon");return;}

    Else{node->key = new_key;temp = node;parent = temp->parent;while((parent!=NULL)&&(temp->keykey))

    {Node_Swap(&temp,&parent);temp = parent;parent = temp->parent;}

    }

    }

  • 8/4/2019 Dong Nhi Thuc-Thiep

    23/24

    3.7 Xa mt kha

    Gi nh rng khng c nt no trong ng nh thc c gi tri kha l - .

    xa mt kha trong ng nh thc H chng ta u tin gim kha ti - , sau gi

    th tc tch ra nt kha nh nht. Thi gian chy ca th tc l O(lg n)

    Binomial_Heap_Delete(H,x)1). Binomial_Heap_Decrease-Key(H,x, - )

    2). Binomial_Heap_Extract_Min(H)void Binomial_Heap_Delete(BinomialHeap **heap,

    heap_node *node){Binomial_Heap_Decrease_Key(heap,node,-NOT_IN_HEAP);Binomial_Heap_Extract_Min(heap);

    }4 nh gi v kt lun

    Qua phn tnh trn chng ta c bng nh gi thi gian thc hin cc thao tc

    trn ng nh thc vi mt s cu trc ng khc di bng sau, gi s s nt ca

    ng l n.

    Th tcBinary heap

    (worst-case)

    Binomial heap

    (worst-case)

    Fibonacci heap

    (khu hao)MAKE-HEAP O(1) O (1) O (1)

    INSERT O (lg n) O (lg n) O (1)MINIMUM O (1) O (lg n) O (1)

    EXTRACT-MIN O (lg n) O (lg n) O (lg n)UNION O (n) O (lg n) O (1)

    DECREASE-KEY O (lg n) O (lg n) O (1)Cng vi Fibonacci heap, Binomial heap l cu trc d liu c ng dng trong

    cc bi ton th, c bit l tm cy khung ti thiu. Cc thao tc trn cu trc ny

    u c phc tp O(lg n).

    tng chnh ca cu trc Binomial heap l chia mt cy nh phn y thnh ng cc khi c kch thc 2k v m bo cc khi c chiu cao nh c th

    kt hp vi khi ln hn tip theo. Mi khi l mt cy nh thc gc c kha nh

    nht. Vi cu trc ny, chng ta c th hp hai ng bng vic thm nh phn trn

    danh sch cc khi. Tuy nhin cng c nhiu cch khc biu din Binomial heap.

    Ta c th thay i kch thc chun min l chng ta ch ra cu trc khi v kt hp

    cc khi c kch thc bng nhau thnh mt khi tip theo c kch thc ln hn.

    Ti liu tham kho

  • 8/4/2019 Dong Nhi Thuc-Thiep

    24/24

    [1] Jean Vuillemin. "A data structure for manipulating priority queues",

    Communications of the ACM, 21(4):309-315, 1978

    [2] Mark R. Brown. "The Analysis of a Practical and Nearly Optimal Priority

    Queue", PhD thesis, Computer Science Department, Stanford University, 1977,

    Technical Report STANCS-77-600.[3] Mark R. Brown. "Implementation and analysis of binomial queue algorithms".

    SIAM Journal on Computing, 7(3):298- 319, 1978.

    [4] T.H. Cormen, C.E. Leiserson, R.L.Rivest, C.Stein, "Introduction to Algorithms",

    Second Edition, the MIT Press, McGraw-Hill, 2001

    [5] Peter Brass, Advanced Data Structures, Cambridge University Press, 2008