19
Tema 13: Montículo (Heap) Estructuras de datos (Prof. Edgardo A. Franco) 1 M. en C. Edgardo Adrián Franco Martínez http://www.eafranco.com [email protected] @edfrancom edgardoadrianfrancom

13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Tema 13: Montículo (Heap)

Estructuras de datos (Prof. Edgardo A. Franco)

1M. en C. Edgardo Adrián Franco Martínez http://[email protected]@edfrancom edgardoadrianfrancom

Page 2: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Contenido• Introducción

• Heap o Montículo • Altura

• Prioridades

• Inserción

• Borrar

• Actualizar

• Ordenamiento por montículo

• Implementación de vector como montículo

• Unión de dos montículos

• Construcción de montículo ascendente

Árbol Binario I (Edgardo A. Franco)

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

2

Page 3: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Introducción• El montículo es una estructura de datos que soporta

sólamente 3 operaciones: conocer la cima delmontículo y eliminar el elemento de la cima yagregar un nuevo elemento.

• Puede sonar limitante el hecho de que no se puedesaber si un elemento está o no está dentro de losdatos guardados y muchas veces sí lo es, pero hayalgunos problemas donde lo único que se requierees saber cuál es el elemento mayor, o en otrasocaciones se requiere conocer el menor; por tantolos montículos a veces funcionan mejor que losárboles binarios de búsqueda pero no constituyenun reemplazo.

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

3

Page 4: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Heap o Montículo • Un heap o montículo es un árbol binario completo,

y además parcialmente ordenado.

• Completo: que tiene todos sus niveles completos aexcepción del último. Y el último nivel contiene losnodos agrupados de izquierda a derecha

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

4

Page 5: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

• Parcialmente ordenado: tiene todas y cada una desus ramas, consideradas como listas, totalmenteordenadas, ya sea de forma creciente o decreciente

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

5

Page 6: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Altura del Montículo• Un montículo que almacena n keys tiene una altura O (log n).

• h será la altura de un montículo que almacena n keys.

• Dado que hay 2 keys de profundidad i = 0, ..., h - 1 y al menos una key a profundidad h, tenemos n 1 + 2 + 4 + … + 2h-1 + 1

• Por lo tanto, n 2h , i.e., h log n

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

6

1

2

2h-1

1

0

1

h-1

h

Profundidad keys

Page 7: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Montículos y colas con prioridad• Podemos usar un montículo para implementar una cola de

prioridad.

• Almacenamos un elemento (clave, elemento) en cada nodo interno.

• Hacemos un seguimiento de la posición del último nodo

• Para simplificar, mostramos solo las keys en las imágenes

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

7

(2, Sue)

(6, Mark)(5, Pat)

(9, Jeff) (7, Anna)

Page 8: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Inserción • Método insertItem de la cola

de prioridad ADT correspondea la inserción de una clave ken el montículo.

• El algoritmo de inserciónconsta de tres pasos:

• Encuentre el nodo de inserción z (en el último nodo)

• Almacene k en z

• Restaurar la propiedad de orden acumular.

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

8

2

65

79

inserción nodo

z1

z

Page 9: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Remover

• Método removeMin de la cola de

prioridad ADT corresponde a la

eliminación de la clave raíz del

montículo.

• El algoritmo de eliminación consta

de tres paso:

• Reemplace la key raíz con la key del último nodo w.

• Eliminar w.

• Restaurar la propiedad de orden acumular.

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

9

2

65

79

Ultimo nodo

ww

Nuevo ultimo nodo

7

Page 10: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Upheap• Después de la inserción de una nueva key k, la propiedad de orden

acumular puede ser violada

• El algoritmo upheap restaura la propiedad de orden de pila al intercambiark a lo largo de una ruta ascendente desde el nodo de inserción

• Upheap termina cuando la key k alcanza la raíz o un nodo cuyo padre tieneuna clave menor o igual a k

• Como un montículo tiene una altura O (log n), upheap se ejecuta entiempo O (log n)

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

10

2

15

79

6z

6z

6z

1

2

Page 11: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

Downheap• Después de reemplazar la key raíz con la key k del último nodo, la

propiedad de orden de pila puede ser violada.

• El algoritmo downheap restaura la propiedad de orden de pila al

intercambiar la key k a lo largo de una ruta descendente desde la raíz

• Upheap termina cuando la key k alcanza una hoja o un nodo cuyos hijos

tienen claves mayores o iguales que k

• Como un montículo tiene una altura O (log n), downheap se ejecuta en

O (log n)

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

11

7

65

9

w7

5

Page 12: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

12

Actualizar ultimo nodo• El nodo de inserción se puede encontrar atravesando una ruta de nodos

O (log n)

• Subir hasta que se alcanza un hijo izquierdo o la raíz

• Si se llega a un hijo de la izquierda, vaya al hijo de la derecha

• Bajar a la izquierda hasta que se alcanza una hoja

• Algoritmo similar para actualizar el último nodo después de una eliminación

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 13: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

13

Implementación de un Vector en

un montículo• Podemos representar un montículo

con n keys mediante un vector de longitud n + 1

• Para el nodo en el rango i:

• el hijo izquierdo está en el rango 2i

• el hijo correcto está en el rango 2i + 1

• Los enlaces entre nodos no se almacenan explícitamente

• La celda del rango 0 no se usa• La operación insertar corresponde a

insertar en el rango n + 1• La operación remover corresponde a

eliminar en el rango n

2

65

79

2 5 6 9 7

1 2 3 4 50

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 14: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

14

Combinar dos montículos• Nos dan dos montones y

una key k

• Creamos un nuevo montón con el nodo raíz que almacena k y con los dos montones como subárboles

• Realizamos un downheappara restaurar la propiedad de orden de montículo

3

58

2

64

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

72

74

7

Page 15: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

15

• Podemos construir un montículo y almacenar n keys dadas en el uso de una construcción de abajo hacia arriba con log n fases

• En la fase i, los pares de montones con 2i -1 keys se combinan en montones con 2i+1-

1 keys

Construcción de montículo Bottom-up

2i -1 2i -1

2i+1-1

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 16: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

16

Ejemplo

1516 124 76 2023

25

1516

5

124

11

76

27

2023

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

15

2516

4

125

6

911

23

2027

Page 17: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

17

7

15

2516

4

125

8

6

911

23

2027

4

15

2516

5

127

6

8

911

23

2027

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 18: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

18

4

15

2516

5

127

10

6

8

911

23

2027

5

15

2516

7

1210

4

6

8

911

23

2027

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez

Page 19: 13 Montículo (Heap) - eafranco.com · Introducción •El montículo es una estructura de datos que soporta sólamente 3 operaciones: conocer la cima del montículo y eliminar el

19

Análisis• Visualizamos el peor de los casos de un downheap con una ruta que va

primero a la derecha y luego va repetidamente a la izquierda hasta la parte inferior del montículo (esta ruta puede diferir de la ruta real downheap)

• Como cada nodo está atravesado como máximo por dos rutas, el número total de nodos de las rutas es O (n)

• Por lo tanto, la construcción del montículo de abajo hacia arriba se ejecuta en el tiempo O (n)

• La construcción del montículo ascendente es más rápida que n inserciones sucesivas y acelera la primera fase del ordenamiento del montículo.

Estr

uct

ura

s d

e d

ato

s1

3 M

on

tícu

lo (

He

ap)

Pro

f. Ed

gard

o A

dri

án F

ran

co M

artí

nez