Download ppt - Fibonacci Heap(HF)

Transcript

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.


Recommended