La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Heaps.

Presentaciones similares


Presentación del tema: "Heaps."— Transcripción de la presentación:

1 Heaps

2 Alternativamente, Maximum.
resumen Heaps Binary heaps (worst case) Binomial Heaps Fibonnacci Heaps (amortized) Insert log n 1 Minimum Delete-Min Union n Delete Decrease-Key Alternativamente, Maximum.

3 Binary Heap Heaps binary tree completo Min-heap ordenado.
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. Raiz = min 6 14 78 18 81 77 91 45 53 47 64 84 99 83 Height = log2 n.

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

5 Binomial Tree Heaps Bk-1 B0 Bk B4 B3 not binary tree B2 B1 B0

6 Binomial Tree: Propiedad 1
Heaps Binomial tree Bk: #nodos = 2k. Altura(Height) = k. grado raiz = k. borrando raiz, se obtienen binomial tree Bk-1, …, B0. B1 Bk Bk+1 B2 B0 B4 B3 B2 B1 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 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. B4 B0 B1 55 45 32 30 24 23 22 50 48 31 17 44 8 29 10 6 37 3 18 sequence -> ordered

9 Binomial Heap: Propiedad
Heaps 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 B4 B0 B1 55 45 32 30 24 23 22 50 48 31 17 44 8 29 10 6 37 3 18 n = 19 # trees = 3 height = 4 binario = 10011

10 Binomial Heap: Implementacion
Heaps 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. Implementacion: potencia de a 2 Heap 29 6 37 3 18 48 31 50 10 44 17 heap Padre hijo hermano 50 48 31 17 44 10 6 37 3 18 29 Binomial Heap coding with a variable number of links per node would be more painful

11 Binomial Heap: Implementacion
Heaps coding with a variable number of links per node would be more painful

12 Binomial Heap: Implementacion
Heaps coding with a variable number of links per node would be more painful

13 Binomial Heap: Implementacion
Heaps coding with a variable number of links per node would be more painful

14 Binomial Heap: Operaciones
Heaps coding with a variable number of links per node would be more painful

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 6 3 18 8 29 10 44 37 30 23 22 48 31 17 15 7 12 45 32 24 50 28 33 25 + 55 41 1 + Analogia: = 26 amusing to consider "multiplying" binomial heaps or other arithmetic ops. Any uses??? tiempo  #trees: O(log n).

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

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

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

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

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

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

23 Binomial Heap: Delete Min
Heaps 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). H’ 3 6 18 8 29 10 44 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 8 29 10 44 37 Bk has height k and 2k nodes 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'  MakeHeap(x) H  Union(H', H) O(log N)
3 6 18 x 8 29 10 44 37 30 23 22 48 31 17 H H' 45 32 24 50 55

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

28 Resumen de Resultados Heaps Binary heaps (worst case) Binomial Heaps
Fibonnacci Heaps (amortized) Insert log n 1 Minimum Delete-Min Union n Delete Decrease-Key

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

30 Fibonacci Heaps: Implementacion
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. 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

31 Fibonacci Heaps: funcion potencial
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 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

32 Fibonacci Heaps: Insertar
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 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min

33 Fibonacci Heaps: Union
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 39 44

34 Fibonacci Heaps: Union
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 39 44

35 Fibonacci Heaps: Delete-Min
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. 3 min 7 24 23 17 30 26 46 18 52 41 35 39 44

36 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 7 24 23 17 18 52 41 39 44 30 26 46 35

37 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 7 24 23 17 18 52 41 39 44 30 26 46 35

38 Fibonacci Heaps: Delete-Min
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. 1 2 3 min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35

39 Fibonacci Heaps: Delete-Min
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. 1 2 3 min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35 Merge 17 & 23 trees.

40 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 7 24 17 18 52 41 23 39 44 30 26 46 35 Merge 17 & 7 trees.

41 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 24 7 18 52 41 17 30 39 44 26 46 35 23 Merge 7 & 24 trees.

42 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 7 18 52 41 24 17 30 39 44 26 46 23 35

43 Fibonacci Heaps: Delete-Min
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. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 35

44 Fibonacci Heaps: Delete-Min
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. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 35

45 Fibonacci Heaps: Delete-Min
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. 1 2 3 min actual 7 18 52 41 24 17 30 39 44 26 46 23 Merge 41 & 18 trees. 35

46 Fibonacci Heaps: Delete-Min
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. 1 2 3 actual min 7 52 18 24 17 30 41 39 26 46 23 44 35

47 Fibonacci Heaps: Decrease Key
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
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
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
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 5 88

51 Fibonacci Heaps: Decrease Key
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 5 7 18 38 72 24 24 17 23 21 39 41 26 30 52 Decrece 35 a 5. 88

52 Fibonacci Heaps: Decrease Key
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 5 26 7 18 38 72 88 24 24 17 23 21 39 41 Abuelo marcado 30 52 Decrece 35 a 5.

53 Fibonacci Heaps: Decrease Key
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 5 26 24 7 18 38 72 88 17 23 21 39 41 “marcado” = nodo tiene 1 hijo que se mueve a la lista de raices. 30 52 Decrece 35 a 5.


Descargar ppt "Heaps."

Presentaciones similares


Anuncios Google