Post on 23-Jan-2016
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
1
Fibonacci Heap(HF)
723
30
17
35
26 46
24
H
39
4118 52
3
44
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)
723
30
17
35
26 46
24
H
39
4118 52
3
44
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)
723
30
17
35
26 46
24
H
39
4118 52
3
44
minInsertar(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)
723
30
17
35
26 46
24
H
39
4118 52
3
44
min
21
Insert 2
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
5
Fibonacci Heap(HF)
723
30
17
35
26 46
24
H
39
4118 52
3
44
min
21 2
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
6
Fibonacci Heap(HF)
723
30
17
35
26 46
24
H
39
4118 52
3
44
min
21 2
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, 37.
332825 15 12
min
41 7H1
376 3 18H2
min
332825 15 1241 7
H1+H2
376 3 18
min
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
8
Fibonacci Heap(HF)min
39
41
717
18 52
3
30
23
35
26 46
24
44
21
min
39
41
717
18 52
3
30
23
35
26 46
24
44
21
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)].
39
4118 52
3
44
min
1723
30
7
35
26 46
24
Eliminar 3
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
10
Fibonacci Heap(HF)
39
4118 52
3
44
min
1723
30
7
35
26 46
24
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
11
Fibonacci Heap(HF)
39
4118 52
44
min
1723
30
7
35
26 46
24
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
12
Fibonacci Heap(HF)
39
411723 18 52
30
7
35
26 46
24
44
actualmin
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
13
Fibonacci Heap(HF)
39
411723 18 52
30
7
35
26 46
24
44actual
min
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
14
Fibonacci Heap(HF)
39
411723 18 52
30
7
35
26 46
24
44actual
min
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
15
Fibonacci Heap(HF)
39
411723 18 52
30
7
35
26 46
24
44actual
min
0 1 2 3 4Merge los arboles con raíz 17 y 23.
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
16
Fibonacci Heap(HF)
39
4117
23
18 52
30
7
35
26 46
24
44
actualmin
0 1 2 3 4Merge los arboles con raíz 7 y 17.
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
17
Fibonacci Heap(HF)
39
4117
23
18 52
30
7
35
26 46
24
44
actualmin
0 1 2 3 4Merge los arboles con raíz 24 y 17.
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
18
Fibonacci Heap(HF)
39
4117
23
18 52
30
7
35
26 46
24
44
actualmin
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
19
Fibonacci Heap(HF)
39
4117
23
18 52
30
7
35
26 46
24
44
actualmin
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
20
Fibonacci Heap(HF)
39
4117
23
18 52
30
7
35
26 46
24
44
actual
min
0 1 2 3 4
Consolidate(H),
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
21
Fibonacci Heap(HF)
3941
17
23
1852
30
7
35
26 46
24
44
actual
min
0 1 2 3 4
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)
3941
17
23
1852
30
7
35
26 46
24
44
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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38Decrementa 46 a 45.
72
46*
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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38Decrementa 46 a 45.
72
45
35
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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
Decrementa 45 a 15.72
15
35
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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15
35
min
Decrementa 45 a 15.
Dr. Eric Jeltsch F. Ingenieria en Computacion, ULS(DAA_2004)
27
Fibonacci Heap(HF)
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15
35
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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15
35
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.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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15
35
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.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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15
5
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.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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15 5 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.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.
24
46
17
30
23
7
88
26
21
52
39
18
41
38
72
15 5 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.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.
2446
17
30
23
7
88
26
21
52
39
18
41
38
72
15 5
min
Decrementa 35 a 5.
Eliminar nodo x. Decrementar x a -. Eliminar el min elem. del heap.