33
Dr. Eric Jeltsch F. Ingen ieria en Computacion, ULS (DAA_2004) 1 Fibonacci Heap(HF) 7 23 30 17 35 26 46 24 H 39 41 18 52 3 44 min marcado Para conocer en detalle de como representar un HF mediante estructuras de datos, vea la pág. 422, CLR.

Fibonacci Heap(HF)

Embed Size (px)

DESCRIPTION

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. - PowerPoint PPT Presentation

Citation preview

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.