Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 1 Fibonacci Heap(HF) H min marcado 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) 2 Fibonacci Heap(HF) H min marcado 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. t(H) = 5, m(H) = 3, (H) = 11 grado 3
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 3 Fibonacci Heap(HF) H min 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. Insert 21 21
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 4 Fibonacci Heap(HF) H min 21 Insert 2
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 5 Fibonacci Heap(HF) H min 212
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 6 Fibonacci Heap(HF) H min 212
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 7 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, min 417 H H2 min H1+H min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 8 Fibonacci Heap(HF) min min min H1 H2 H1+H2
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 9 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)] min Eliminar 3
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 10 Fibonacci Heap(HF) min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 11 Fibonacci Heap(HF) min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 12 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 13 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 14 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 15 Fibonacci Heap(HF) actual min Merge los arboles con raíz 17 y 23. Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 16 Fibonacci Heap(HF) actual min Merge los arboles con raíz 7 y 17. Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 17 Fibonacci Heap(HF) actual min Merge los arboles con raíz 24 y 17. Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 18 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 19 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 20 Fibonacci Heap(HF) actual min Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 21 Fibonacci Heap(HF) actual min Consolidate(H), Merge los arboles con raíz 18 y 41.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 22 Fibonacci Heap(HF) min 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.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 23 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 Decrementa 46 a * 35 min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 24 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 Decrementa 46 a min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 25 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 Decrementa 45 a min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 26 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 min Decrementa 45 a 15.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 27 Fibonacci Heap(HF) min 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. Decrementa 45 a 15.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 28 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 min Decrementa 35 a 15.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 29 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. n Si p[p[x]] no está marcado, lo marca. n Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso min Decrementa 35 a 5.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 30 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. n Si p[p[x]] no está marcado, lo marca. n Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso min Decrementa 35 a 5.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 31 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. n Si p[p[x]] no está marcado, lo marca. n Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso min Decrementa 35 a 5.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 32 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. n Si p[p[x]] no está marcado, lo marca. n Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso min Decrementa 35 a 5.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004) 33 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. n Si p[p[x]] no está marcado, lo marca. n Si p[p[x]] está marcado, corta p[p[x]] no marcado, y repite el proceso min Decrementa 35 a 5. Eliminar nodo x. n Decrementar x a - . n Eliminar el min elem. del heap.