77
Repaso Heaps Heapsort Algoritmos y Estructuras de Datos II Heaps 4 de mayo de 2015 Heaps Algoritmos y Estructuras de Datos II

Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

  • Upload
    others

  • View
    20

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Algoritmos y Estructuras de Datos II

Heaps

4 de mayo de 2015

Heaps Algoritmos y Estructuras de Datos II

Page 2: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Clase de hoy

1 RepasoÁrboles binariosABBsTAD conjunto

2 HeapsEjemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

3 Heapsort

Heaps Algoritmos y Estructuras de Datos II

Page 3: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Árboles binariosABBsTAD conjunto

Repaso

3 partes1 análisis de algoritmos

algoritmos de ordenaciónnotación O, Ω y Θ.recurrencias

2 tipos de datostipos concretostipos abstractosimplementacionesárboles binarios: de búsqueda (ABBs) y heaps

3 técnicas de resolución de problemas

Heaps Algoritmos y Estructuras de Datos II

Page 4: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Árboles binariosABBsTAD conjunto

Intuición

ii(((((((((((iih

iPPPP

P

iih iSS h

ihhhhhhhh

hhh

iiQQ

h

iPPPP

P

ih iQQ

h

raíz'

&

$

%subárbol izquierdo

'

&

$

%subárbolderecho

Todos los árboles pueden construirse con los constructores<>, que construye un árbol vacío< _,_,_ >, que construye un árbol no vacío a partir de un elemento y dossubárboles

Heaps Algoritmos y Estructuras de Datos II

Page 5: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Árboles binariosABBsTAD conjunto

Sobre los niveles

En el nivel 0 hay a lo sumo 1 nodo.En el nivel 1 hay a lo sumo 2 nodos.En el nivel 2 hay a lo sumo 4 nodos.En el nivel 3 hay a lo sumo 8 nodos.En el nivel i hay a lo sumo 2i nodos.En un árbol de altura n hay a lo sumo20 + 21 + . . .+ 2n = 2n+1 − 1 nodos.En un árbol “balanceado” la altura es del orden del log2 kdonde k es el número de nodos.

Heaps Algoritmos y Estructuras de Datos II

Page 6: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Árboles binariosABBsTAD conjunto

Árboles binarios de búsqueda

Decimos que t es un árbol binario de búsqueda o ABB,cuando se cumplen las siguientes condiciones:

los valores alojados en el subárbol izquierdo de t sonmenores que el alojado en la raíz de t ,los valores alojados en el subárbol derecho de t sonmayores que el alojado en la raíz de t ,las dos condiciones anteriores se cumplen para todos lossubárboles de t .

Heaps Algoritmos y Estructuras de Datos II

Page 7: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Árboles binariosABBsTAD conjunto

TAD conjunto

Usando árboles binarios de búsqueda, hemosimplementado el TAD conjunto con operaciones:

search (implementación de la operación está) de ordenlog n,insert (implementación de la operación agregar) de ordenlog n,delete (implementación de la operación borrar) de ordenlog n,las otras dos operaciones (empty, is_empty) sonconstantes.

(asumiendo que el árbol binario de búsqueda estábalanceado)

Heaps Algoritmos y Estructuras de Datos II

Page 8: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Heaps

Los heaps se asemejan a los ABBs enque son árboles binarioscon una manera particular de organizar la información desus nodos

y se diferencia de los ABBs enque admite repeticionesla forma de organizar la información

en cada nodo del heap, la información es mayor o igual a lade sus descendientes

el heap se implementa muy convenientemente en arreglos

Heaps Algoritmos y Estructuras de Datos II

Page 9: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

45

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

¿Es un heap?Supongamos que queremos agregar el 72. ¿Dónde lo agregamos?

Heaps Algoritmos y Estructuras de Datos II

Page 10: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

45

72

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Heaps Algoritmos y Estructuras de Datos II

Page 11: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

45

72SS

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Heaps Algoritmos y Estructuras de Datos II

Page 12: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

45

72Q

Q71PP

PPP

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Heaps Algoritmos y Estructuras de Datos II

Page 13: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71((((((

(((((

62

45

71PPPP

P

69

62

67SS

76hhhhhhhh

hhh

76

72

62Q

Q62PP

PPP

50

60Q

Q

Éste es el único caso en que sigue siendo un heap.Pero en general, puede que no exista esta posibilidad, porejemplo, si el número a insertar es el 80.

Heaps Algoritmos y Estructuras de Datos II

Page 14: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71((((((

(((((

62

45

72

71PPPP

P

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

Probemos entonces insertar el 72 en “cualquier lado”.No es un heap porque el 72 es mayor que su padre, el 45.Los intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 15: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

72

45

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Sigue sin ser un heap porque el 72 es mayor que su padre, el 62.Lo intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 16: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

72

62

45

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Sigue sin ser un heap porque el 72 es mayor que su padre, el 71.Lo intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 17: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

72((((((

(((((

71

62

45

71PPPP

P

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

Ahora sí es un heap.

Heaps Algoritmos y Estructuras de Datos II

Page 18: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71((((((

(((((

62

45

72SS

71PPPP

P

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

¿Qué pasaba si lo insertábamos acá?No es un heap porque el 72 es mayor que su padre, el 45.Los intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 19: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

62

72

45SS

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Sigue sin ser un heap porque el 72 es mayor que su padre, el 62.Lo intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 20: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

72

62

45SS

71PPPP

P

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Sigue sin ser un heap porque el 72 es mayor que su padre, el 71.Lo intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 21: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

72((((((

(((((

71

62

45SS

71PPPP

P

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

Ahora sí es un heap.

Heaps Algoritmos y Estructuras de Datos II

Page 22: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71((((((

(((((

62

45

72Q

Q71PP

PPP

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

¿Qué pasaba si lo insertábamos acá?No es un heap porque el 72 es mayor que su padre, el 62.Los intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 23: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

71(((((((

((((

72

45

62Q

Q71PP

PPP

69

62

67SS

76hhhhhhh

hhhh

76

62Q

Q62PP

PPP

50

60Q

Q

Sigue sin ser un heap porque el 72 es mayor que su padre, el 71.Lo intercambiamos.

Heaps Algoritmos y Estructuras de Datos II

Page 24: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

72((((((

(((((

71

45

62Q

Q71PP

PPP

69

62

67SS

76hhhhhhhh

hhh

76

62Q

Q62PP

PPP

50

60Q

Q

Ahora sí es un heap.

Heaps Algoritmos y Estructuras de Datos II

Page 25: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Conclusión

En todos los casos se logra restablecer la condición deheap en log n intercambios.Se puede elegir libremente donde comenzar.Eso determina la forma del heap resultante.Luego hay que hacer flotar el nuevo elemento realizandolos intercambios que sean necesarios, la forma del heapya no cambia.Idea: elegir de modo de que se mantenga balanceado,llenando nivel por nivel.

Heaps Algoritmos y Estructuras de Datos II

Page 26: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

A continuación mostraremos con un ejemplo cómo sepuede ir llenando nivel por nivel.Sea la siguiente secuencia de números que se insertan enun heap inicialmente vacío.76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 27: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 28: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

45(((((((

((((

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 29: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

45(((((((

((((

80hhhhhhh

hhhh

Heaps Algoritmos y Estructuras de Datos II

Page 30: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

45(((((((

((((

76hhhhhhh

hhhh

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 31: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

45(((((((

((((

60

76hhhhhhh

hhhh

Heaps Algoritmos y Estructuras de Datos II

Page 32: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

60(((((((

((((

45

76hhhhhhh

hhhh

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 33: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

60(((((((

((((

45

69PPPP

P76hhhh

hhhhhhh

Heaps Algoritmos y Estructuras de Datos II

Page 34: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

45

60PPPP

P76hhhh

hhhhhhh

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 35: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

45

60PPPP

P76hhhh

hhhhhhh

78

Heaps Algoritmos y Estructuras de Datos II

Page 36: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

45

60PPPP

P78hhhh

hhhhhhh

76

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 37: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

45

60PPPP

P78hhhh

hhhhhhh

76

40PPPP

P

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 38: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

45

78

60PPPP

P78hhhh

hhhhhhh

76

40PPPP

P

Heaps Algoritmos y Estructuras de Datos II

Page 39: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

69(((((((

((((

78

45

60PPPP

P78hhhh

hhhhhhh

76

40PPPP

P

Heaps Algoritmos y Estructuras de Datos II

Page 40: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78(((((((

((((

69

45

60PPPP

P78hhhh

hhhhhhh

76

40PPPP

P

76, 45, 80, 60, 69, 78, 40, 78, 73

Heaps Algoritmos y Estructuras de Datos II

Page 41: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78(((((((

((((

69

45

73Q

Q60PP

PPP

78hhhhhhh

hhhh

76

40PPPP

P

Heaps Algoritmos y Estructuras de Datos II

Page 42: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78(((((((

((((

73

45

69Q

Q60PP

PPP

78hhhhhhh

hhhh

76

40PPPP

P

Heaps Algoritmos y Estructuras de Datos II

Page 43: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Conclusión

Tenemos una forma de ir insertando elementos de modoque el árbol quede perfectamente balanceado.El algoritmo de inserción de cada elemento es log n.

Heaps Algoritmos y Estructuras de Datos II

Page 44: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Implementando cola de prioridades

Esto mejora las implementaciones anteriores de colas deprioridades.

inserción era constantever el primero y eliminar el primero eran linealeso viceversa

ahora inserción es log nver el primero es constante¿y borrar el primero?

veremos que se puede hacer log n

Heaps Algoritmos y Estructuras de Datos II

Page 45: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78(((((((

((((

73

45

69Q

Q60PP

PPP

78hhhhhhh

hhhh

76

40PPPP

P

borremos el primero, o sea el 80

Heaps Algoritmos y Estructuras de Datos II

Page 46: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78((((((

(((((

73

45

69Q

Q60PP

PPP

78hhhhhhhh

hhh

76

40PPPP

P

¿cómo hacemos para que nos quede un heap?llevamos una hoja arriba

Heaps Algoritmos y Estructuras de Datos II

Page 47: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

69

78((((((

(((((

73

45

60PPPP

P78hhhh

hhhhhhh

76

40PPPP

P

¿cómo hacemos para que nos quede un heap?la hundimos intercambiandola con el mayor de sus hijos

Heaps Algoritmos y Estructuras de Datos II

Page 48: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78

78(((((((

((((

73

45

60PPPP

P69hhhh

hhhhhhh

76

40PPPP

P

la hundimos intercambiandola con el mayor de sus hijos

Heaps Algoritmos y Estructuras de Datos II

Page 49: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78

78(((((((

((((

73

45

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

¡listo!hundir es log nel primero ahora es 78, borrémoslo

Heaps Algoritmos y Estructuras de Datos II

Page 50: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78((((((

(((((

73

45

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

¿cómo hacemos para que nos quede un heap?llevamos una hoja arriba

Heaps Algoritmos y Estructuras de Datos II

Page 51: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

45

78((((((

(((((

73

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

¿cómo hacemos para que nos quede un heap?la hundimos intercambiandola con el mayor de sus hijos

Heaps Algoritmos y Estructuras de Datos II

Page 52: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78

45(((((((

((((

73

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

la hundimos intercambiandola con el mayor de sus hijos

Heaps Algoritmos y Estructuras de Datos II

Page 53: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

78

73(((((((

((((

45

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

¡listo!

Heaps Algoritmos y Estructuras de Datos II

Page 54: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

73(((((((

((((

45

60PPPP

P76hhhh

hhhhhhh

69

40PPPP

P

Heaps Algoritmos y Estructuras de Datos II

Page 55: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

40

73(((((((

((((

45

60PPPP

P76hhhh

hhhhhhh

69

Heaps Algoritmos y Estructuras de Datos II

Page 56: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

73(((((((

((((

45

60PPPP

P40hhhh

hhhhhhh

69

Heaps Algoritmos y Estructuras de Datos II

Page 57: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

76

73(((((((

((((

45

60PPPP

P69hhhh

hhhhhhh

40

etcétera

Heaps Algoritmos y Estructuras de Datos II

Page 58: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Implementación en un arreglo

Tener tanto control sobre la forma del heap,podemos asegurarnos de que se va llenando nivel pornivel,y se van borrando exactamente en orden inverso.Por ello, en todo momento se tienen los primeros i − 1niveles llenos,y el nivel i llenándose de izquierda a derecha.

Esto permite implementar el heap en un arreglo.

Heaps Algoritmos y Estructuras de Datos II

Page 59: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78((((((

(((((

73

45

69Q

Q60PP

PPP

78hhhhhhh

hhhh

76

40PPPP

P

Se implementa en un arreglo de la siguiente manera:

1 2 3 4 5 6 7 8 9 10 11 12 13 14

80 78 78 73 60 76 40 45 69

y hace falta un natural que informe el tamaño del heap.

Heaps Algoritmos y Estructuras de Datos II

Page 60: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ejemplo

80

78(((((((

((((

73

45

69Q

Q60PP

PPP

78hhhhhhh

hhhh

76

40PPPP

P

1 2 3 4 5 6 7 8 9 10 11 12 13 14

80 78 78 73 60 76 40 45 69

Observar que los hijos del elemento que se encuentra en la posición i del arreglo, seencuentran en las posiciones 2i y 2i + 1.El padre del elemento que se encuentra en la posición i , se encuentra en la posicióni ÷ 2.

Heaps Algoritmos y Estructuras de Datos II

Page 61: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Implementación de heap

type heap = tupleelems: array[1..n] of elemsize: nat

end

Heaps Algoritmos y Estructuras de Datos II

Page 62: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Funciones para encontrar los hijos

fun left(i:nat) ret j:natj:= 2*i

end

fun right(i:nat) ret j:natj:= 2*i+1

end

Heaps Algoritmos y Estructuras de Datos II

Page 63: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Función para encontrar el padre

fun parent(i:nat) ret j:natj:= i ÷ 2

end

Heaps Algoritmos y Estructuras de Datos II

Page 64: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Funciones booleanas

Pre: 1 ≤i≤ h.sizefun has_children(h:heap, i:nat) ret b:bool

b:= (left(i) ≤ h.size)endPost: b = i tiene hijos en h

fun has_parent(i:nat) ret b:boolb:= (i 6= 1)

end

Heaps Algoritmos y Estructuras de Datos II

Page 65: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Máximo de los hijos

Pre: 1 ≤ i ≤ h.size ∧ has_children(h,i)fun max_child(h:heap, i:nat) ret j:nat

if right(i) ≤ h.size ∧ h.elems[left(i)] ≤ h.elems[right(i)] then j:= right(i)else j:= left(i)fi

endPost: j = posición donde se encuentra el mayor de los hijos de i en h

Heaps Algoritmos y Estructuras de Datos II

Page 66: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Ascenso de un elemento

Pre: 1 ≤ i ≤ h.size ∧ has_parent(i)proc lift(in/out h:heap,in i:nat)

swap(h.elems,i,parent(i))end

Pre: 1 ≤ i ≤ h.size ∧ has_parent(i)fun must_lift(h:heap, i:nat) ret b:bool

b:= (h.elems[i] > h.elems[parent(i)])endPost: b = i es mayor que su padre

Heaps Algoritmos y Estructuras de Datos II

Page 67: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Flotar un elemento

Pre: h (= H) es heap excepto tal vez porque el elem en h.elems[h.size] es grandeproc float(in/out h:heap)

var c: natc:= h.sizewhile has_parent(c) ∧ must_lift(h,c) do

lift(h,c)c:= parent(c)

odendPost: h es un heap con los mismos elementos que H

Heaps Algoritmos y Estructuras de Datos II

Page 68: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Hundir un elemento

Pre: h (= H) es heap excepto tal vez porque el elem en 1 es chicoproc sink(in/out h:heap)

var p: natp:= 1while has_children(h,p) ∧ must_lift(h,max_child(h,p)) do

p:= max_child(h,p)lift(h,p)

odendPost: h es un heap con los mismos elementos que H

Heaps Algoritmos y Estructuras de Datos II

Page 69: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Implementación de cola de prioridades

type pqueue = heap

proc empty(out q:pqueue)q.size:= 0

endPost: q ∼ Vacía

Pre: q ∼ Qfun is_empty(q:pqueue) ret b:bool

b:= (q.size = 0)endPost: b ∼ es_vacía Q

Heaps Algoritmos y Estructuras de Datos II

Page 70: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Encolar

Pre: q ∼ Q ∧ q.size < nproc enqueue(in/out q:pqueue,in e:elem)

q.size:= q.size+1q.elems[q.size]:= efloat(q)

endPost: q ∼ encolar Q e

Heaps Algoritmos y Estructuras de Datos II

Page 71: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Primero

Pre: q ∼ Q ∧¬is_empty(q)fun first(q:pqueue) ret e:elem

e:= q.elems[1]endPost: e ∼ primero Q

Heaps Algoritmos y Estructuras de Datos II

Page 72: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Decolar

Pre: q ∼ Q ∧¬is_empty(q)proc dequeue(in/out q:pqueue)

q.elems[1]:= q.elems[q.size]q.size:= q.size-1sink(q)

endPost: q ∼ decolar Q

Heaps Algoritmos y Estructuras de Datos II

Page 73: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Ejemplos y definicionesImplementación en un arregloOperaciones de heapImplementación de cola de prioridades usando heaps

Conclusiones

Hemos implementado cola de prioridades con heaps:Vacía es constante,Encolar es log n,es_vacía es constante,primero es constante, ydecolar es log n.

Heaps Algoritmos y Estructuras de Datos II

Page 74: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Heapsort

Ya vimos un algoritmo de ordenación que llamamospqueue_sortutilizaba una cola de prioridades para ordenar delsiguiente modo

una primera fase en que todos los elementos del arreglo seintroducen en la cola de prioridadesuna segunda fase en que todos los elementos van saliendode la cola y ubicándose en la celda correcta del arreglo

ahora sabemos que una cola de prioridades seimplementa eficientemente con un heapmás aun, el heap_sort utiliza el propio arreglo a ordenarpara ir guardando los elementos del heappor ello, no necesita espacio auxiliar.

Heaps Algoritmos y Estructuras de Datos II

Page 75: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

HeapsortPreliminares

Separamos el heap en sus dos componentes: arreglo a ytamaño i (ó i-1).Por ello, los procedimientos float y sink recibirán las doscomponentes por separado.No se usan arreglos auxiliares: se utiliza el mismo arregloa ordenar como heap.

Heaps Algoritmos y Estructuras de Datos II

Page 76: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Heapsort: el algoritmo

proc heap_sort(in/out a:array[1..n] of elem)for i:= 1 to n do

float(a,i)odfor i:= n downto 1 do

swap(a,1,i) a[i]:= firstsink(a,i-1)

odend

El heapsort suele presentarse sin funciones y procedimientosauxiliares, como en la filmina que sigue.

Heaps Algoritmos y Estructuras de Datos II

Page 77: Algoritmos y Estructuras de Datos II Ejemplos y definiciones Implementación en un arreglo Operaciones de heap Implementación de cola de prioridades usando heaps 3 Heapsort Heaps

RepasoHeaps

Heapsort

Heapsort

proc heap_sort(in/out a:array[1..n] of elem)var p,c,r: nat p = parent, c = (left) child, r = right childfor i:= 1 to n do

c:= i comienza enqueue(a[i])p:= i ÷ 2while c 6= 1 ∧ a[c] > a[p] do

swap(a,c,p)c:= pp:= p÷2

od termina enqueue(a[i])odfor i:= n downto 1 do

swap(a,1,i) a[i]:= first, comienza dequeuep:= 1c:= 2r:= min(3,i-1)while c < i ∧ (a[p] < max(a[c],a[r])) do

if a[c] ≤ a[r] then swap(a,r,p)p:= r

else swap(a,c,p)p:= c

fic:= 2∗pr:= min(2∗p+1,i-1)

odod

end

Heaps Algoritmos y Estructuras de Datos II