Heaps

53
Heaps

description

Heaps. resumen. Heaps. Alternativamente, Maximum. Binary Heap. Heaps. Raiz = min. 6. 14. 45. Height = log 2 n. 78. 18. 47. 53. 83. 91. 81. 77. 84. 99. 64. binary tree completo Todos los niveles estan llenos salvo el último, llenado por niveles es decir de izq. a der. - PowerPoint PPT Presentation

Transcript of Heaps

Heaps

2

resumen

Binary heaps

(worst case)

Binomial Heaps

(worst case)

Fibonnacci Heaps

(amortized)

Insert log n log n 1

Minimum 1 log n 1

Delete-Min log n log n log n

Union n log n 1

Delete log n log n log n

Decrease-Key

log n log n log n

Alternativamente, Maximum.

Heaps

3

Binary Heap

binary tree completo– Todos los niveles estan llenos salvo el último, llenado por niveles es

decir de izq. a der.

Min-heap ordenado.– Hijos mayores que o iguales a sus padres.

6

14

78 18

81 7791

45

5347

6484 9983

Raiz = min

Height = log2 n.

Heaps

4

Binary Heaps

Use array: no necesita explicitamente punteros.

Padre(i) = i/2 izq(i) = 2i der(i) = 2i + 1

1

2 3

4 5 6 7

8 9 10 11 12 13 14

6

14

78 18

81 7791

45

5347

6484 9983

Heaps

5

Binomial Tree

Bk-1

Bk-1

B0 Bk

B0 B1 B2 B3 B4

Heaps

6

Binomial Tree: Propiedad 1

Binomial tree Bk:– #nodos = 2k.– Altura(Height) = k.– grado raiz = k.– borrando raiz, se obtienen

binomial tree Bk-1, …, B0.

B1

Bk

Bk+1

B2B0

B0 B1 B2 B3 B4

Heaps

7

Binomial Tree: Propiedad 2

B4

depth 2

depth 3

depth 4

depth 0

depth 1

4= 6

2

i

kBk posee nodos de depth i.

Heaps

8

Binomial Heap

Sucesión de binomial trees que satisfacen la propiedad binomial heap:– Todo tree es min-heap ordenado– 0 o 1 binomial tree de orden k

Vuillemin, 1978.

B4 B0B1

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

Heaps

9

Binomial Heap: Propiedad

Binomial heap de n nodos:– Min key = raiz de B0, B1, …, o Bk.

– Contiene binomial tree Bi ssi bi = 1.

• donde bn…b2b1b0 es una representación binaria de n.

– #trees ≤ log2 n + 1

– Height log2 n

n = 19# trees = 3height = 4binario = 10011

B4 B0B1

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

Heaps

10

Binomial Heap: Implementacion

Cada nodo tiene 3 punteros – padre, 1st hijo, sig_hermano.

Raiz en una lista simplemente enlazada – desde el más pequeño hasta el más grande.

50

48 31 17

4410

6

37

3 18

29

Binomial Heap Implementacion: potencia de a 2 Heap

29

6

37

3 18

48

3150

10

4417

heap

Padre

hijo

hermano

Heaps

11

Binomial Heap: Implementacion Heaps

12

Binomial Heap: Implementacion Heaps

13

Binomial Heap: Implementacion Heaps

14

Binomial Heap: Operaciones Heaps

15

Binomial Heap: Union – caso especial

Es fácil si todos son k- binomial trees ordenados

H''55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

H'

Escoger la clave más pequeña como nueva

raíz.Raíz Conectadas

Heaps

16

Binomial Heap: Union – caso General

001 1

100 1+

011 1

11

1

1

0

1

Analogia:

19 + 7 = 26

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

+

tiempo #trees:

O(log n).

Heaps

17

Binomial Heap: Union – Ejemplo

+55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

Heaps

18

+

12

18

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

Heaps

19

+

12

18

25

377

3

18

12

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

Heaps

20

12

+

18

25

377

3

41

28 33 25

3715 7

3

18

12

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

Heaps

21

+

18

12

41

28 33 25

3715 7

3

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

12

18

25

377

3

41

28 33 25

3715 7

3Heaps

22

+

18

12

41

28 33 25

3715 7

3

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

55

45 32

30

24

23 22

50

48 31 17

448 29 10

6

37

3 18

41

3328

15

25

7 12

12

18

25

377

3

41

28 33 25

3715 7

3 Heaps

23H’

3

37

6 18

55

45 32

30

24

23 22

50

48 31 17

448 29 10

H

Binomial Heap: Delete Min

1. Hallar en la raíz min key de H, y borrarlo.

2. H' hijos de la clave borrda.

3. H Union(H', H)

Cada etapa O(log n).

Heaps

24

3

37

6 18

55

x 32

30

24

23 22

50

48 31 17

448 29 10

Binomial Heap: Decrease Key

Asumir que se da un puntero al nodo.

1. Cambiar la clave.

2. Mientras x < padre, swap.

O(log N) – depth del nodo x log2 n .

Heaps

25

Binomial Heap: Delete

1. Decrease key de x a -.

2. Delete min.

Cada etapa O(log N).

Heaps

26

Binomial Heap: Insert

1. H' MakeHeap(x)

2. H Union(H', H)

O(log N)

3

37

6 18

55

45 32

30

24

23 22

50

48 31 17

448 29 10

x

H H'

Heaps

27

Binomial Heap: Secuencia de Inserciones

Insertando 1 item puede tomar tiempo (log n).n = .......0 1 etapa.

n = ......01 2 etapa.

n = .....011 3 etapa.

n = ....0111 4 etapa.

n = 11...111 log2 n etapas.

Insertar una secuencia de n items toma tiempo O(n)!– (n/2)(1) + (n/4)(2) + (n/8)(3) + … 2n

50

48 31 17

4429 10

3

37

6 x

n

i n n-1i=1

i n 1= 2- - 2

2 2 2

Heaps

28

Resumen de Resultados

Binary heaps

(worst case)

Binomial Heaps

(worst case)

Fibonnacci Heaps

(amortized)

Insert log n log n 1

Minimum 1 log n 1

Delete-Min log n log n log n

Union n log n 1

Delete log n log n log n

Decrease-Key

log n log n log n

Heaps

29

Fibonacci Heaps: estructura

Conjunto de min-heap de trees ordenados.

723

30

17

35

26 46

24

H 39

4118 52

3

44

min

Algunos nodos

“marcados”.

Heaps

30

Fibonacci Heaps: Implementacion

Cada nodo tiene 4 punteros: padre, 1st hijo, sigui & previo hermano.– hermanos son punteros en forma circular, lista doubly-linked

Raiz en circular, lista doubly-linked.– La union es rapida.

Posee punteros a min (una raiz).– Rapidamente encuentra min.

723

30

17

35

26 46

24

H 39

4118 52

3

44

min

Heaps

31

Fibonacci Heaps: funcion potencial

Claves cuantitativas:– degree(x) = grado del nodo x.– mark(x) = esta el nodo x marcado?– t(H) = # trees.– m(H) = # nodos marcado. (H) = t(H) + 2m(H)

723

30

17

35

26 46

24

H 39

4118 52

3

44

min

t(H) = ?

m(H) = ?

(H) = ?

5

3

11

Heaps

32

Fibonacci Heaps: Insertar

1. Crea un nuevo singleton tree.

2. Agrega a la izq del puntero min.

3. Actualiza puntero min.

723

30

17

35

26 46

24

H 39

4118 52

3

44

min21

Actual costo = O(1).

Cambio en potencial = ?1

Costo Amortizado = O(1)+1 = O(1).

(H) = t(H) + 2m(H)

Heaps

33

Fibonacci Heaps: Union

1. Concatena los heaps.

2. Considera el puntero minimum de los dos minimos

39

41

717

18 52

3

30

23

35

26 46

24

44

min

H' H''

21

min

Heaps

34

Fibonacci Heaps: Union

1. Concatena los heaps.

2. Considera el puntero minimum de los dos minimos.

Actual costo = O(1)

Cambio en potencial = 0

Costo Amortizado = O(1)

39

41

717

18 52

3

30

23

35

26 46

24

44

min

H' H''

21

(H) = t(H) + 2m(H)

Heaps

35

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

4118 52

44

3

min

1723

30

7

35

26 46

24

Heaps

36

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

411723 18 52

30

7

35

26 46

24

44

min

0 1 2 3

actual

Heaps

37

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

411723 18 52

30

7

35

26 46

24

44

min

0 1 2 3

actual

Heaps

38

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

411723 18 52

30

7

35

26 46

24

44

min

0 1 2 3

actual

Heaps

39

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

411723 18 52

30

7

35

26 46

24

44

min

0 1 2 3

actual

Merge 17 & 23 trees.

Heaps

40

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

4118 52

30

7

35

26 46

24

44

min

0 1 2 3

actual

Merge 17 & 7 trees.

17

23

Heaps

41

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

4118 52

35

26 46

24

44

min

0 1 2 3

actual

Merge 7 & 24 trees.

7

3017

23

Heaps

42

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

417

30

18 52

23

17

35

26 46

24 44

actual

0 1 2 3

min

Heaps

43

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

417

30

18 52

23

17

35

26 46

24 44

0 1 2 3

min actual

Heaps

44

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

417

30

18 52

23

17

35

26 46

24 44

0 1 2 3

min actual

Heaps

45

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

39

417

30

18 52

23

17

35

26 46

24 44

0 1 2 3

min actual

Merge 41 & 18 trees.

Heaps

46

Fibonacci Heaps: Delete-Min

1. Borra el min, concatena sus hijos en una lista de raices.

2. Consolida los trees, de manera que ninguna raíz tenga el mismo grado, y encontrando un nuevo min.

7

30

52

23

17

35

26 46

24

min

3941

18

44

0 1 2 3

actual

Heaps

47

Fibonacci Heaps: Decrease Key

Caso 0: min-heap propiedad no alterada.1. Decrecer la clave.

2. Cambiar el puntero min si es necesario.

24

46

17

30

23

7

88

26

21

52

39

18

41

38

Decrece 46 a 45.72

45

35

min

Heaps

48

Caso 1: padre de x no esta marcado.1. Decrecer la clave.

2. Remover el link a el padre.

3. Marcar el padre.

4. Agregar x’s del tree a la lista de root, actualizando el puntero.

24

45

17

30

23

7

88

26

21

52

39

18

41

38

Decrece 45 a 15.72

Fibonacci Heaps: Decrease Key

15

35

min

24

Heaps

49

Caso 1: padre de x no esta marcado.1. Decrecer la clave.

2. Remover el link a el padre.

3. Marcar el padre.

4. Agregar x’s del tree a la lista de root, actualizando el puntero.

24 17

30

23

7

88

26

21

52

39

18

41

38

24

Fibonacci Heaps: Decrease Key

35

min15

72

Decrece 45 a 15.

Heaps

5035

Case 2: padre de x esta marcado.1. Decrece la clave.

2. Mover el nodo a la lista de raices.

3. Mover el padre a la lista de raices.• Si el abuelo no esta marcado, entonces lo marca.• Si el abuelo esta marcado, mover a la lista de raices, no

marcado y repetir.

24

15

17

30

23

7

88

26

21

52

39

18

41

38

Decrece 35 a 5.

72 24

Fibonacci Heaps: Decrease Key

5

min

Heaps

51

Case 2: padre de x esta marcado.1. Decrece la clave.

2. Mover el nodo a la lista de raices.

3. Mover el padre a la lista de raices.• Si el abuelo no esta marcado, entonces lo marca.• Si el abuelo esta marcado, mover a la lista de raices, no

marcado y repetir.

24 17

30

23

7

26

21

52

39

18

41

38

24

5

Fibonacci Heaps: Decrease Key

88

15

72

min

Decrece 35 a 5.

Heaps

52

Case 2: padre de x esta marcado.1. Decrece la clave.

2. Mover el nodo a la lista de raices.

3. Mover el padre a la lista de raices.• Si el abuelo no esta marcado, entonces lo marca.• Si el abuelo esta marcado, mover a la lista de raices, no

marcado y repetir.

24

26

17

30

23

7

21

52

39

18

41

38

88 24

5

Fibonacci Heaps: Decrease Key

15

72

Abuelo marcado

min

Decrece 35 a 5.

Heaps

53

Case 2: padre de x esta marcado.1. Decrece la clave.

2. Mover el nodo a la lista de raices.

3. Mover el padre a la lista de raices.• Si el abuelo no esta marcado, entonces lo marca.• Si el abuelo esta marcado, mover a la lista de raices, no

marcado y repetir.

26

17

30

23

7

21

52

39

18

41

38

88

5

Fibonacci Heaps: Decrease Key

15 24

72

min

Decrece 35 a 5.

“marcado” = nodo tiene 1 hijo que se mueve a la lista de raices.

Heaps