340 likes | 522 Views
Fibonacci Heap(HF). min. H. 17. 24. 23. 7. 3. 30. 26. 46. 18. 52. 41. 35. marcado. 44. 39. Para conocer en detalle de como representar un HF mediante estructuras de datos, vea la pág. 422, CLR. Fibonacci Heap(HF). t(H) = 5, m(H) = 3, (H) = 11. min. H. grado 3. 17.
E N D
Fibonacci Heap(HF) min H 17 24 23 7 3 30 26 46 18 52 41 35 marcado 44 39 Para conocer en detalle de como representar un HF mediante estructuras de datos, vea la pág. 422, CLR. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) t(H) = 5, m(H) = 3, (H) = 11 min H grado 3 17 24 23 7 3 30 26 46 18 52 41 35 marcado 44 39 grado[x] = grado del nodo x (nº de hijos). marca[x] = nodo marcado x (gris). t(H)= # arbol. m(H)= # nodos marcados. (H)= t(H) + 2m(H) , es la función potencial. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Insertar(x): Crea un nuevo árbol con x como raíz, y se situa a la izq. del puntero min. Actualizando el min si corresponde. min H 17 24 23 7 3 30 26 46 18 52 41 35 21 44 39 Insert 21 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min H 17 24 23 7 21 3 30 26 46 18 52 41 35 44 39 Insert 2 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min H 17 24 23 7 21 2 3 30 26 46 18 52 41 35 44 39 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min H 17 24 23 7 21 2 3 30 26 46 18 52 41 35 44 39 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Union. Concatenar dos Fibonacci heaps. Las raices son implementadas a través de listas circulares doblemente enlazadas. Sea H1, el HF que se obtiene luego de insertar y en este orden, los datos: 12, 7, 25, 15, 28, 33, 41. Analog. H2 con 18, 3, 6, 37. min H1 25 15 28 33 41 7 12 min H2 6 37 3 18 min H1+H2 6 37 3 18 25 15 28 33 41 7 12 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min min H2 H1 23 24 17 7 3 21 30 26 46 18 52 41 35 39 min 44 23 24 17 7 3 21 30 26 46 18 52 41 H1+H2 35 44 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 39
Fibonacci Heap(HF) Eliminar Min:Borra el min y concatena sus hijos en la lista de raices. Aplicar Consolidate(H), esto es, ningún par de raíces tienen el mismo grado. Concatena Fibonacci heaps. Las raices son implementadas a través de listas circulares doblemente enlazadas. Se usa un array auxiliar A[0..log(nH)]. Eliminar 3 min 7 24 23 17 3 30 26 46 18 52 41 35 39 44 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min 7 24 23 17 3 30 26 46 18 52 41 35 39 44 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) min Consolidate(H), 7 24 23 17 18 52 41 39 30 26 46 44 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), actual min 7 24 23 17 18 52 41 39 44 30 26 46 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), min 7 24 23 17 18 52 41 actual 39 44 30 26 46 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), Merge los arboles con raíz 17 y 23. min 7 24 23 17 18 52 41 39 44 30 26 46 actual 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), Merge los arboles con raíz 7 y 17. actual min 7 24 17 18 52 41 23 39 44 30 26 46 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), Merge los arboles con raíz 24 y 17. actual min 24 17 18 52 41 7 23 39 44 26 46 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), actual min 17 18 52 41 24 7 23 39 44 26 46 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), actual min 17 18 52 41 24 7 23 39 44 26 46 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), actual min 17 18 52 41 24 7 23 39 44 26 46 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Consolidate(H), Merge los arboles con raíz 18 y 41. actual min 18 17 52 24 41 39 7 23 26 46 44 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Fin de Consolidate(H), Costo de consolidar arboles. O(D(n) + t(H)) . D(n) = grado max de cualquier nodo en HF con n nodos. t(H) = # arboles en heap H. min 18 17 52 24 41 39 7 23 26 46 44 30 35 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 0: propiedades del min-heap no alteradas. • Decrementa la clave de x a k • Cambia el puntero min del heap, si es necesario. min Decrementa 46 a 45. 7 18 38 24 17 23 21 39 41 26 46 46* 30 52 35 88 72 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 0: propiedades del min-heap no alteradas. • Decrementa la clave de x a k • Cambia el puntero min del heap, si es necesario. min Decrementa 46 a 45. 7 18 38 24 17 23 21 39 41 26 46 45 30 52 35 88 72 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 1: padre de x no está marcado. Decrementa clave de x a k; Corta el enlace entre x y su padre; Marca al padre; Agrega el árbol con raíz x a la lista de raíces, actualizando el puntero a min del heap. 7 18 38 min 24 17 23 21 39 41 26 46 15 30 52 Decrementa 45 a 15. 35 88 72 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 1: padre de x no está marcado. Decrementa clave de x a k; Corta el enlace entre x y su padre; Marca al padre; Agrega el árbol con raíz x a la lista de raíces, actualizando el puntero a min del heap. 7 18 38 min 24 17 23 21 39 41 26 15 46 30 52 35 88 72 Decrementa 45 a 15. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 1: padre de x no está marcado. Decrementa clave de x a k; Corta el enlace entre x y su padre;Marca al padre;Agrega el árbol con raíz x a la lista de raíces, actualizando el puntero a min del heap. 7 18 38 min 24 17 23 21 39 41 26 46 15 30 52 Decrementa 45 a 15. 35 88 72 Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 1: padre de x no está marcado. Decrementa clave de x a k; Corta el enlace entre x y su padre;Marca al padre;Agrega el árbol con raíz x a la lista de raíces, actualizando el puntero a min del heap. 7 18 38 46 15 min 24 17 23 21 39 41 72 26 30 52 35 88 Decrementa 35 a 15. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 2: Si padre de x está marcado. Decrementa la clave de x a k; corta el enlace entre x y su padre p[x], y agrega x a la lista de raices; corta el enlace entre p[x] y p[p[x]], agrega p[x] a la lista de raices. • Si p[p[x]] no está marcado, lo marca. • Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso. 7 18 38 46 15 min 24 17 23 21 39 41 72 26 30 52 35 88 Decrementa 35 a 5. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 2: Si padre de x está marcado.Decrementa la clave de x a k; corta el enlace entre x y su padre p[x], y agrega x a la lista de raices; corta el enlace entre p[x] y p[p[x]], agrega p[x] a la lista de raices. • Si p[p[x]] no está marcado, lo marca. • Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso. 7 18 38 46 15 min 24 17 23 21 39 41 72 26 30 52 5 88 Decrementa 35 a 5. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 2: Si padre de x está marcado.Decrementa la clave de x a k; corta el enlace entre x y su padre p[x], y agrega x a la lista de raices; corta el enlace entre p[x] y p[p[x]], agrega p[x] a la lista de raices. • Si p[p[x]] no está marcado, lo marca. • Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso. 7 18 38 46 15 5 min 24 17 23 21 39 41 72 26 30 52 88 Decrementa 35 a 5. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 2: Si padre de x está marcado.Decrementa la clave de x a k; corta el enlace entre x y su padre p[x], y agrega x a la lista de raices; corta el enlace entre p[x] y p[p[x]], agrega p[x] a la lista de raices. • Si p[p[x]] no está marcado, lo marca. • Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso. 7 18 38 46 15 5 26 min 72 88 24 17 23 21 39 41 30 52 Decrementa 35 a 5. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
Fibonacci Heap(HF) Decrementar la clave de un elemento x a k. Caso 2: Si padre de x está marcado.Decrementa la clave de x a k; corta el enlace entre x y su padre p[x], y agrega x a la lista de raices; corta el enlace entre p[x] y p[p[x]], agrega p[x] a la lista de raices. • Si p[p[x]] no está marcado, lo marca. • Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso. 46 15 5 26 24 7 18 38 min 72 88 17 23 21 39 41 Eliminar nodo x. • Decrementar x a -. • Eliminar el min elem. del heap. 52 30 Decrementa 35 a 5. Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)