Heaps
-
Upload
wang-bradford -
Category
Documents
-
view
19 -
download
0
description
Transcript of 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
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
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
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
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