You are on page 1of 5

Montículo Binario (Binary Heap)

• Un montículo es un árbol binario completo (lleno hasta el penúltimo nivel


y en el último nivel pueden estar vacíos los nodos que están más a la
derecha.) que satisface las siguientes condiciones (Condiciones de
Montículo Binario):

Fig. Árbol binario completo

• cada nodo debe tener mayor o igual prioridad a la de sus hijos (si tiene
alguno).
• el nodo de mayor prioridad es la raíz.
• cualquier subárbol es un montículo binario.

Fig. Nodo padre mayor que nodos hijos

Se puede implementar almacenando los valores de un montículo en un


arreglo. Desde el nivel raíz hasta el último nivel y de izquierda a derecha:
Fig. Ilustraciónes de Montículo Binario.

Si un nodo está en la posición k entonces sus hijos están en las posiciones


2k y 2k+1, si existen.

Los algoritmos operaciones básicos que operan sobre montículos tienen las
siguientes características:

• operan a lo largo de algún "camino" desde la raíz hasta el fondo del


montículo (excepto la unir dos montículos).
• comienzan haciendo una simple modificación estructural que
potencialmente viola las condiciones del montículo, luego lo recorren
y modifican para asegurar que dichas condiciones son reestablecidas.

Operaciones

• Operación de inserción
la operación de insertar un nuevo elemento involucra:

1. agregar el elemento al final del arreglo, lo cual potencialmente viola


la condición de montículo.
2. hacer que el elemento recién agregado suba el montículo de forma
tal que ocupe la posición que le corresponde y en consecuencia,
restaurar la condición de montículo.
{
Objetivo: Añadir un nuevo elemento en el lugar apropiado para que siga siendo
un montículo.
Entrada: H, n, item (nuevo elemento).
Precondiciones: Hay sitio para el nuevo elemento
Salida: H
Postcondiciones: El montículo con el nuevo elemento
}

Procedimiento InsercionMonticulo (H,n,Item )


Inicio
{Insertar el item al final en el arreglo montículo}
n=n+1
H[n]= Item
{Restaurar la propiedad de orden desde el final hasta la raíz}
RestaurarArribaMonticulo (H,n)
Fin

Fig. Implementación de un montículo

• Operación de eliminación

la operación de eliminar el elemento de mayor prioridad consiste en:

1. asignar el primer elemento del arreglo a una variable temporal (item


= a[1]).
2. asignar el último elemento del arreglo a la primera posición y
decrementar el tamaño del arreglo (a[1]=a[N-]), lo cual
potencialmente viola la condición de montículo.
3. hacer que el elemento recién colocado en la primera posición del
arreglo baje el montículo de forma tal que ocupe la posición que le
corresponde y en consecuencia, restaurar la condición de montículo.
4. retornar el elemento asignado a la variable temporal item.

Objetivo: eliminar el mayor elemento del montículo y devolverlo.


Entrada: H, n.

Precondiciones: montículo no vacío.

Salida: H, Item

Postcondiciones: montículo sin elemento mayor y el mayor elemento.

Procedimiento EliminacionMonticulo (H,n,Item)

Inicio

{Elimina raíz del montículo almacenado en el arreglo H}

Item = H[1]

{Quitar el último elemento de H y copiarlo a la raíz}

H[1] = H[n]

n = n -1

{Restaurar propiedad de orden desde la raíz}

RestaurarAbajoMonticulo (H,n)

Fin

• Operación de ordenación

Estrategia

La raíz de un montículo contiene el mayor elemento del montículo. Entonces,


eliminar en forma repetida la raíz del montículo y almacenarlo en el arreglo de
salida.

Fases

Sea A el arreglo de N elementos que contiene la lista a ordenar.

- Construir un montículo H con los elementos de A.

- Eliminar repetidamente la raíz de H.

Procedimiento OrdenacionMonticulo (A,n)

Inicio

{1. Construcción del montículo H}

H[1]=A[1]
Repetir desde j=1 hasta n-1

InsercionMonticulo (H,j,A[j+1])

Fin_repetir

{2. Eliminar repetidamente la raíz de H}

Repetir mientras (n>1)

EliminacionMonticulo (H,n,Item)

A[n+1] = Item

Fin_repetir

Fin

You might also like