1 / 32

heap binomiali

heap binomiali. Heap binomiale. Una heap binomiale è un insieme di alberi binomiali. Un albero binomiale B k è un albero ordinato definito ricorsivamente per cui valgono le seguenti proprietà: I nodi dell’albero sono 2 k L’altezza dell’albero è k

aiko
Download Presentation

heap binomiali

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. heap binomiali

  2. Heap binomiale • Una heap binomiale è un insieme di alberi binomiali. • Un albero binomiale Bk è un albero ordinato definito ricorsivamente per cui valgono le seguenti proprietà: • I nodi dell’albero sono 2k • L’altezza dell’albero è k • I nodi a profondità i sono esattamente , con i=0, 1, ... , k • La radice dell’albero ha grado k. Il grado della radice è maggiore del grado di ogni altro nodo. Enumerando con k-1, k-2, ..., o i figli della radice, il figlio numero i è la radice del sottoalbero binomiale Bi.

  3. Alberi Binomiali: esempi B0 Bk-1 Bk-1 Bk

  4. Alberi Binomiali: esempi B0 B1 B2 B3

  5. Alberi Binomiali: esempi B4

  6. Alberi Binomiali: esempi  B0 B1 B2 Bk-2 Bk-1 Bk

  7. Heap Binomiali - Definizione • Una heap binomiale H è un insieme di alberi binomiali che soddisfa le seguenti proprietà: • Ogni albero binomiale è ordinato come una heap, cioè per ogni nodo si ha che la sua chiave è maggiore o uguale alla chiave dei suoi genitori • Non esistono due alberi binomiali in H le cui radici hanno lo stesso grado

  8. Heap Binomiali - Esempio 10 1 6 head[H] 12 25 8 14 29 18 11 17 38 27

  9. Heap Binomiali - Esempio 10 0 1 2 6 3 12 1 25 0 18 0 8 2 14 1 29 0 11 1 17 0 38 0 27 0 head[H] p key deg child sibling

  10. Heap Binomiali - Min Ricerca della chiave minima input: una heap binomiale H con n nodi output: puntatore al nodo con chiave minima (è in una radice!) Binomial-Heap-Minimum(H): y=NIL x=head[H] min=  whilex NIL do ifkey[x] < min thenmin= key[x]; y=x x = sibling[x] returny

  11. Unione Collega tutti gli alberi binomiali le cui radici hanno lo stesso grado. Subroutine Binomial-Link(y,z) che collega gli alberi binomiali y e z le cui radici hanno lo stesso grado: z diventa padre di y. Binomial-Link(y,z) p[y] = z sibling[y] = child[z] child[z] = y degree[z] = degree[z]+1

  12. Binomial-Heap-Union Unisce H1 e H2, distruggendole. Binomial-Heap-Union(H1,H2): H= Make-Binomial-Heap() P= Head[H]; P1= Head[H1]; P2= Head[H2] whileP1 NIL andP2 NIL do ifDeg[P1] < Deg[P2]then Sibling[P]= P1; P1 = Sibling[P1] else Sibling[P] = P2; P2 = Sibling[P2] whileP1 NIL do Sibling[P] = P1; P1 = Sibling[P1] whileP2 NIL do Sibling[P] = P2; P2 = Sibling[P2]

  13. Binomial-Heap-Union (cont.) prev_x=NIL; x = head[H]; next_x = sibling[x] while next_x ≠ NIL do ifdeg[x] ≠ deg[next_x] or (sibling[next_x] ≠ NIL anddeg[sibling[next_x]] == deg[x]) then prev_x = x; x = next_x elseifkey[x] ≤ key[next_x] thensibling[x] = sibling[next_x]; Binomial-Link(next_x,x) elseif prev_x == NIL thenhead[H] = next_x elsesibling[prev_x] = next_x BinomialLink(x,next_x) x = next_x next_x = sibling[x] returnH

  14. Heap binomiale - Unione - Esempio 18 3 6 head[H2] H2 37 8 29 10 44 head[H1] 12 7 15 30 23 22 48 31 17 H1 25 28 33 45 32 24 50 41 55

  15. Heap Binomiali - Unione - esempio head[H] 12 18 7 3 15 6 H1H2 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

  16. Heap Binomiali - Unione - esempio head[H1] H1H2 12 7 3 15 6 18 25 37 28 33 8 29 10 44 41 30 23 22 48 31 17 45 32 24 50 55

  17. Heap Binomiali - Unione - Esempio head[H1] H1H2 12 3 15 6 18 7 37 28 33 8 29 10 44 25 41 30 23 22 48 31 17 45 32 24 50 55

  18. Heap Binomiali - Unione - Esempio head[H1] H1H2 6 12 3 8 29 10 44 18 15 7 37 30 23 22 48 31 17 28 33 25 45 32 24 50 41 55

  19. Heap Binomiali - Inserimento Inserisce un nodo in una heap binomiale Binomial-Heap-Insert(H, x): H’= Make-Binomial-Heap() p[x]= NIL child[x] =NIL sibling[x]= NIL deg[x]= 0 Head[H’]= x H= Binomial-Heap-Union(H,H’)

  20. Heap Binomiali - ExtractMin Elimina da una heap binomiale H il nodo con chiave minima e restituisce il puntatore a quel nodo Binomial-Heap-Extract-Min(H) min= ;MinKey = NIL;MKP = NIL P= Head[H]; PP = Head[H] whileP NIL do ifkey[P] < min thenmin= Key[P]; MinKey = P;MKP = PP PP = P; P = Sibling[P] ifMinKey == NIL then return fail (cont…)

  21. Heap Binomiali - ExtractMin (cont.) (… cont) H1= Make-Binomial-Heap() ifMKP head[H] thensibling[MKP] = sibling[MinKey] elsehead[H] = sibling[MinKey] P = left[MinKey] whileP 0 do S = sibling[P] sibling[P] = head[H1] head[H1] =P p[P] = 0 P = S H= Binomial-Heap-Union(H,H1)

  22. Heap Binomiali - ExtractMin - Esempio head[H] 37 10 1 41 28 13 6 16 12 25 77 8 14 29 26 23 18 11 17 38 42 27

  23. Heap Binomiali - ExtractMin - Esempio head[H] x 37 10 1 41 28 13 6 16 12 25 77 8 14 29 26 23 18 11 17 38 42 27

  24. Heap Binomiali - ExtractMin - Esempio head[H] head[H’] 12 25 37 10 16 6 18 41 28 13 26 23 8 14 29 77 42 11 17 38 27

  25. Heap Binomiali - ExtractMin - Esempio head[H] 12 10 25 37 16 6 18 28 13 41 26 23 8 14 29 77 42 11 17 38 27

  26. Heap Binomiali - ExtractMin - Esempio head[H] 12 25 6 18 37 10 8 14 29 41 28 13 11 17 38 16 27 77 26 23 42

  27. Decremento di una chiave Si assegna un nuovo valore k alla chiave di un nodo x di una heap binomiale H. Errore se k > key[x] Binomial-Heap-Decrease-Key(H,x,k) if k>key[x] then error key[x]=k, y=x; z=p[x] while z NIL and key[y] < key[z] do key[y]  key[z] y = z z = p[y]

  28. Decremento di una chiave - Esempio head[H] 12 25 6 18 37 10 8 14 29 z 41 28 13 11 17 38 16 y 27 77 7 23 42

  29. Decremento di una chiave - Esempio head[H] 12 25 6 18 z 37 10 8 14 29 41 y 28 13 11 17 38 7 27 77 16 23 42

  30. Decremento di una chiave - Esempio head[H] 12 25 z 6 18 37 y 7 8 14 29 41 28 13 11 17 38 10 27 77 16 23 42

  31. Eliminazione di una chiave Elimina un nodo x da uno heap binomiale H Binomial-Heap-Delete(H,x): Binomial-Heap-Decrease-Key(H,x, ) Binomial-Heap-Extract-Min(H)

  32. Heap Binomiali - Sommario

More Related