1 / 53

Heaps

Heaps. resumen. Heaps. Alternativamente, Maximum. Binary Heap. Heaps. Raiz = min. 6. 14. 45. Height = log 2 n. 78. 18. 47. 53. 83. 91. 81. 77. 84. 99. 64. binary tree completo Todos los niveles estan llenos salvo el último, llenado por niveles es decir de izq. a der.

Download Presentation

Heaps

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. Heaps

  2. resumen Heaps Alternativamente, Maximum.

  3. Binary Heap Heaps Raiz = min 6 14 45 Height = log2 n. 78 18 47 53 83 91 81 77 84 99 64 binary tree completo • Todos los niveles estan llenos salvo el último, llenado por niveles es decir de izq. a der. Min-heap ordenado. • Hijos mayores que o iguales a sus padres.

  4. Binary Heaps Heaps 6 1 14 45 2 3 78 18 47 53 4 5 6 7 83 91 81 77 84 99 64 8 9 10 11 12 13 14 Use array: no necesita explicitamente punteros. Padre(i) = i/2 izq(i) = 2i der(i) = 2i + 1

  5. Binomial Tree Heaps Bk B0 Bk-1 Bk-1 B0 B1 B2 B3 B4

  6. Binomial Tree: Propiedad 1 Heaps Bk+1 B1 B2 B0 Bk B0 B1 B2 B3 B4 Binomial tree Bk: • #nodos = 2k. • Altura(Height) = k. • grado raiz = k. • borrando raiz, se obtienen binomial tree Bk-1, …, B0.

  7. Binomial Tree: Propiedad 2 Heaps Bk posee nodos de depth i. depth 0 depth 1 depth 2 depth 3 depth 4 B4

  8. Binomial Heap Heaps 6 3 18 37 8 29 10 44 30 23 22 48 31 17 45 32 24 50 55 B4 B1 B0 Sucesión de binomial trees que satisfacen la propiedad binomial heap: • Todo tree es min-heap ordenado • 0 o 1 binomial tree de orden k Vuillemin, 1978.

  9. Binomial Heap: Propiedad Heaps 6 3 18 37 8 29 10 44 30 23 22 48 31 17 45 32 24 50 55 B4 B1 B0 Binomial heap de n nodos: • Min key = raiz de B0, B1, …, o Bk. • Contiene binomial tree Bi ssi bi = 1. • donde bn…b2b1b0 es una representación binaria de n. • #trees ≤log2 n + 1 • Height  log2 n n = 19# trees = 3height = 4binario = 10011

  10. Binomial Heap: Implementacion Heaps heap 6 3 18 6 3 18 Padre 37 29 37 29 10 44 hijo hermano 48 10 48 31 17 50 31 17 44 50 Implementacion: potencia de a 2 Heap Binomial Heap Cada nodo tiene 3 punteros – padre, 1st hijo, sig_hermano. Raiz en una lista simplemente enlazada – desde el más pequeño hasta el más grande.

  11. Binomial Heap: Implementacion Heaps

  12. Binomial Heap: Implementacion Heaps

  13. Binomial Heap: Implementacion Heaps

  14. Binomial Heap: Operaciones Heaps

  15. Binomial Heap: Union – caso especial Heaps Es fácil si todos son k- binomial trees ordenados Escoger la clave más pequeña como nueva raíz. Raíz Conectadas 6 8 29 10 44 30 23 22 48 31 17 45 32 24 50 55 H' H''

  16. Binomial Heap: Union – caso General Heaps 1 1 1 1 0 0 1 1 Analogia: 19 + 7 = 26 + 0 0 1 1 1 1 1 0 1 0 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41 tiempo  #trees: O(log n).

  17. Binomial Heap: Union – Ejemplo Heaps 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41

  18. Heaps 12 18 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41

  19. Heaps 3 12 18 7 37 25 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41 12 18

  20. Heaps 3 3 12 18 15 7 7 37 37 28 33 25 25 41 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41 12 18

  21. Heaps 3 3 12 18 15 7 7 37 37 28 33 25 25 41 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41 3 12 15 7 37 18 28 33 25 41

  22. Heaps 3 3 12 18 15 7 7 37 37 28 33 25 25 41 6 3 18 37 8 29 10 44 30 23 22 48 31 17 15 7 12 45 32 24 50 25 28 33 + 55 41 6 3 12 8 29 10 15 7 44 37 18 30 23 22 48 31 17 28 33 25 45 32 24 50 41 55

  23. Binomial Heap: Delete Min Heaps H’ • Hallar en la raíz min key de H, y borrarlo. • H'  hijos de la clave borrda. • H Union(H', H) Cada etapa O(log n). 3 6 18 44 8 29 10 37 H 30 23 22 48 31 17 45 32 24 50 55

  24. Binomial Heap: Decrease Key Heaps Asumir que se da un puntero al nodo. • Cambiar la clave. • Mientras x < padre, swap. O(log N) –  depth del nodo x  log2 n . 3 6 18 44 8 29 10 37 30 23 22 48 31 17 x 32 24 50 55

  25. Binomial Heap: Delete Heaps • Decrease key de x a -. • Delete min. Cada etapa O(log N).

  26. Binomial Heap: Insert Heaps H H' • H'  MakeHeap(x) • H Union(H', H) O(log N) 3 6 18 x 44 8 29 10 37 30 23 22 48 31 17 45 32 24 50 55

  27. Binomial Heap: Secuencia de Inserciones Heaps 3 6 x 37 29 10 44 48 31 17 50 Insertando 1 item puede tomar tiempo (log n). n = .......0 1 etapa. n = ......01 2 etapa. n = .....011 3 etapa. n = ....0111 4 etapa. n = 11...111 log2 n etapas. Insertar una secuencia de n items toma tiempo O(n)! • (n/2)(1) + (n/4)(2) + (n/8)(3) + …  2n

  28. Resumen de Resultados Heaps

  29. Fibonacci Heaps: estructura Heaps min 17 24 23 7 3 30 Algunos nodos “marcados”. 26 46 18 52 41 35 44 H 39 Conjunto de min-heap de trees ordenados.

  30. Fibonacci Heaps: Implementacion Heaps min 17 24 23 7 3 30 26 46 18 52 41 35 44 H 39 Cada nodo tiene 4 punteros: padre, 1st hijo, sigui & previo hermano. • hermanos son punteros en forma circular, lista doubly-linked Raiz en circular, lista doubly-linked. • La union es rapida. Posee punteros a min (una raiz). • Rapidamente encuentra min.

  31. Fibonacci Heaps: funcion potencial Heaps min 17 24 23 7 3 30 26 46 18 52 41 35 44 H 39 Claves cuantitativas: • degree(x) = grado del nodo x. • mark(x) = esta el nodo x marcado? • t(H) = # trees. • m(H) = # nodos marcado. • (H) = t(H) + 2m(H) t(H) = ? m(H) = ? (H) = ? 5 3 11

  32. Fibonacci Heaps: Insertar Heaps min 17 24 23 7 3 30 26 46 18 52 41 35 44 H 39 • Crea un nuevo singleton tree. • Agrega a la izq del puntero min. • Actualiza puntero min. Actual costo = O(1). Cambio en potencial = ? 1 (H) = t(H) + 2m(H) Costo Amortizado = O(1)+1 = O(1). 21

  33. Fibonacci Heaps: Union Heaps • Concatena los heaps. • Considera el puntero minimum de los dos minimos min min 23 24 17 7 3 21 H' H'' 30 26 46 18 52 41 35 44 39

  34. Fibonacci Heaps: Union Heaps • Concatena los heaps. • Considera el puntero minimum de los dos minimos. Actual costo = O(1) Cambio en potencial = 0 Costo Amortizado = O(1) (H) = t(H) + 2m(H) min 23 24 17 7 3 21 H' H'' 30 26 46 18 52 41 35 44 39

  35. Fibonacci Heaps: Delete-Min Heaps min 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. 7 24 23 17 30 26 46 18 52 41 35 39 44

  36. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 7 24 23 17 18 52 41 39 44 30 26 46 35

  37. Fibonacci Heaps: Delete-Min Heaps actual 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. min 7 24 23 17 18 52 41 39 44 30 26 46 35

  38. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35

  39. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35 Merge 17 & 23 trees.

  40. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 7 24 17 18 52 41 23 39 44 30 26 46 35 Merge 17 & 7 trees.

  41. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 24 7 18 52 41 17 30 39 44 26 46 35 23 Merge 7 & 24 trees.

  42. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 7 18 52 41 24 17 30 39 44 26 46 23 35

  43. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 7 18 52 41 24 17 30 39 44 26 46 23 35

  44. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. min actual 7 18 52 41 24 17 30 39 44 26 46 23 35

  45. Fibonacci Heaps: Delete-Min Heaps 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. actual min 7 18 52 41 24 17 30 39 44 26 46 23 Merge 41 & 18 trees. 35

  46. Fibonacci Heaps: Delete-Min Heaps actual 0 1 2 3 • Borra el min, concatena sus hijos en una lista de raices. • Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min. min 7 52 18 24 17 30 41 39 26 46 23 44 35

  47. Fibonacci Heaps: Decrease Key Heaps Caso 0: min-heap propiedad no alterada. • Decrecer la clave. • Cambiar el puntero min si es necesario. min 7 18 38 24 17 23 21 39 41 26 46 45 30 52 Decrece 46 a 45. 35 88 72

  48. Fibonacci Heaps: Decrease Key Heaps Caso 1: padre de x no esta marcado. • Decrecer la clave. • Remover el link a el padre. • Marcar el padre. • Agregar x’s del tree a la lista de root, actualizando el puntero. min 7 18 38 24 24 17 23 21 39 41 26 45 15 30 52 Decrece 45 a 15. 35 88 72

  49. Fibonacci Heaps: Decrease Key Heaps Caso 1: padre de x no esta marcado. • Decrecer la clave. • Remover el link a el padre. • Marcar el padre. • Agregar x’s del tree a la lista de root, actualizando el puntero. min 15 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 45 a 15. 35 88

  50. Fibonacci Heaps: Decrease Key Heaps Case 2: padre de x esta marcado. • Decrece la clave. • Mover el nodo a la lista de raices. • Mover el padre a la lista de raices. • Si el abuelo no esta marcado, entonces lo marca. • Si el abuelo esta marcado, mover a la lista de raices, no marcado y repetir. min 15 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 35 a 5. 35 88 5

More Related