530 likes | 667 Vues
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.
E N D
resumen Heaps Alternativamente, Maximum.
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.
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
Binomial Tree Heaps Bk B0 Bk-1 Bk-1 B0 B1 B2 B3 B4
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.
Binomial Tree: Propiedad 2 Heaps Bk posee nodos de depth i. depth 0 depth 1 depth 2 depth 3 depth 4 B4
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.
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
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.
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''
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).
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
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
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
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
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
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
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
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
Binomial Heap: Delete Heaps • Decrease key de x a -. • Delete min. Cada etapa O(log N).
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
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
Resumen de Resultados Heaps
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.
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.
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
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
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
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
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
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
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
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
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.
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.
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.
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
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
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
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
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
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
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
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
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