Está en la página 1de 7

Estructura Heap Algoritmos II curso Calvo

Estructura de datos heap o montculo (Arbol heap)


Una estructura heap es un rbol binario completo o casi completo y parcialmente ordenado.
(No confundir este concepto con el de la ona de memoria dinmica llamada heap!
Completo significa "ue tiene #aspecto triangular$% es decir "ue contiene un nodo en la ra&% dos en el nivel
siguiente% y as& sucesivamente teniendo todos los niveles ocupados totalmente con una cantidad de nodos
"ue debe ser '.
Casi completo significa "ue tiene todos los niveles menos el de las ho(as #saturados$% ocupados con
)%'%*%+%),% etc. Nodos- en el nivel de las ho(as puede no cumplirse esta condici.n% pero los nodos
e/istentes deben estar ubicados #a i"uierda$.
E(emplo0
#1arcialmente ordenado$ significa "ue se cumple% o bien "ue para cada nodo del rbol los valores de sus
nodos hi(os (si los tuviera! son ambos menores o iguales "ue el del nodo padre (y se llama rbol heap de
m&nimo!% o bien "ue los valores de sus hi(os son ambos mayores o iguales "ue los de su nodo padre (y se
llama rbol heap de m/imo!. Entre los hi(os no se e/ige ning2n orden en particular.
E(emplo0
3a estructura "ue hemos representado arriba se almacena en un array% del siguiente modo0
' )4 + )5 )' )) )6 64 '7 '8
Considerando "ue las posiciones del array son 4% )% ...n9)% se verifica "ue las posiciones de los nodos hi(os
con respecto a su nodo padre cumplen 0
1adre en posici.n k :; Hi(os en posiciones 2*k+1 y 2*k+2
Anlogamente% si el hi(o est en posici.n h% su padre estar en posici.n (h-1)/2 , considerando cociente
entero.
En estas estructuras las operaciones bsicas son0
a) Etraer ra!"
Esta operaci.n se lleva a cabo de la siguiente forma0
<e remueve la ra&
<e reemplaa el nodo removido por la 2ltima ho(a
<e restaura el heap o mont&culo% es decir se compara el valor de la nueva ra& con el de su hi(o menor (si
es un mont&culo ordenado de esta forma! y se realia el eventual intercambio% y se prosigue comparando
)=7
Arbol binario completo Arbol binario casi completo
Arbol Heap
Estructura Heap Algoritmos II curso Calvo
hacia aba(o el valor trasladado desde la ra& hasta llegar al nivel de las ho(as o hasta ubicar el dato en su
posici.n definitiva.
E(emplo0
En el mont&culo del e(emplo anterior eliminamos la ra& y la reemplaamos
Ahora se analia la situaci.n de la nueva ra& con respecto a sus hi(os0
>ueda0
Ahora el problema se traslad. al nodo con '8 y sus nuevos hi(os% )) y )6
>ueda finalmente el heap o mont&culo restaurado
'=7
<e reemplaa ' por '8
<e elimina el nodo ho(a con '8
El menor de los hi(os es +% "ue es menor
"ue '8% por lo cual se intercambia con ?l
El menor de los hi(os es ))% "ue es
menor "ue '8.
Entonces% '8 se intercambia con ))
Estructura Heap Algoritmos II curso Calvo
@bservar "ue para restaurar el mont&culo y ubicar el valor "ue se ha colocado en la ra& en su posici.n
definitiva se lleva a cabo% a lo sumo un par de comparaciones y un intercambio hasta llegar al nivel de las
ho(as. Como el rbol est completo o casi completo% su altura es apro/imadamente log
'
N .
As& "ue% en el peor caso% para restaurar el mont&culo% el n2mero de #pasos$ (entendiendo por paso el par de
comparaciones ms el eventual intercambio! es apro/imadamente log
'
N.
Aener en cuenta "ue estas etapas "ue se han mostrado con el diagrama de rbol% en realidad se llevan a
cabo en el array en el cual est implementado el rbol heap.
1or lo tanto% considerando la estructura del array% se realia lo siguiente0
' )4 + )5 )' )) )6 64 '7 '8
<ituaci.n inicial del heap. N:)4
'8 )4 + )5 )' )) )6 64 '7 '8
<e reemplaa ' por '8. N:8
'8 )4 + )5 )' )) )6 64 '7 '8
<e compara '8 con sus hi(os (la posici.n se determina como se indic. antes!
+ )4 '8 )5 )' )) )6 64 '7 '8
<e intercambia '8 con el menor de sus hi(os.
+ )4 '8 )5 )' )) )6 64 '7 '8
<e analia ahora la situaci.n de '8 con respecto a sus #nuevos$ hi(os$.
+ )4 '8 )5 )' )) )6 64 '7 '8
<e intercambia '8 con ))% el menor de sus hi(os
+ )4 )) )5 )' '8 )6 64 '7 '8
El mont&culo ha sido restaurado. Ahora N:8
b) A#re#ar nue$o elemento "
El nuevo elemento se ubica como #2ltima ho(a$. 3uego se restaura el mont&culo analiando ternas #hacia
arriba$ hasta ubicar el nuevo elemento en su posici.n definitiva0
E(emplo0
6=7
<e agrega el valor 8 al heap% como
2ltima ho(a
Estructura Heap Algoritmos II curso Calvo
Ahora el mont&culo debe ser restaurado0
Analiamos la situaci.n e/istente entre 8 y su nodo padre% (s.lo dos nodos por"ue 8 ha "uedado como
hi(o i"uierdo de )'!
>ueda0
Ahora el anlisis se debe realiar entre 8% y su padre% )4.
Besulta
Ahora se analia la situaci.n de 8% y su padre +.
*=7
Como 8 es menor "ue )'% se
intercambia con ?l
Como 8 es menor "ue )4% se
intercambia con ?l
Estructura Heap Algoritmos II curso Calvo
Como 8 supera a + el proceso termina.
Esto se realia% como se indic. antes% en el array. Entonces% es.
+ )4 )) )5 )' '8 )6 64 '7 8
<e almacena 8 como nueva ho(a% es decir% se pone a continuaci.n del 2ltimo valor almacenado en el array.
Ce esta forma% N% n2mero de elementos del array% pasa de 8 a )4.
+ )4 )) )5 )' '8 )6 64 '7 8
<e analia la situaci.n de 8 con respecto a su padre.
+ )4 )) )5 8 '8 )6 64 '7 )'
Como 8 es menor "ue )'% se intercambian los valores.
+ )4 )) )5 8 '8 )6 64 '7 )'
Ahora se analia la situaci.n de 8 con respecto a su padre )4
+ 8 )) )5 )4 '8 )6 64 '7 )'
Como 8 es menor "ue )4% se intercambian los valores.
+ 8 )) )5 )4 '8 )6 64 '7 )'
<e analia la situaci.n de 8 con respecto a +- como se verifica la condici.n del heap% no se realia
intercambio% y el proceso concluye.
+ 8 )) )5 )4 '8 )6 64 '7 )'
El heap o mont&culo ha sido restaurado.
@bservar "ue% anlogamente a lo sucedido en el caso de la e/tracci.n de la ra&% al agregar un nuevo
elemento% se realia una comparaci.n y un eventual intercambio desde el nivel de las ho(as hasta el nivel
de la ra&. Es decir "ue % considerando "ue la altura del rbol es apro/imadamente log
'
N% se llevarn a
cabo log
'
N pasos (cada paso consiste en una comparaci.n y un eventual intercambio!.
1or eso se indica "ue las operaciones de alta y e/tracci.n de ra& en una estructura heap o mont&culo
tienen un costo temporal @(log N!.
5=7
Estructura Heap Algoritmos II curso Calvo
%so de la estructura heap"

Esta estructura es muy eficiente para implementar ACA cola con prioridad y para ordenar arrays.
&ola con prioridad"
Es un ACA cuyas primitivas son0
&reaci'n de la Cola con 1rioridad
(estrucci'n de la Cola con 1rioridad
Alta de un elemento
Etracci'n del mnimo elemento (el de mayor prioridad!
Como se puede apreciar% a un coste de logN se puede resolver mediante la implementaci.n en heap% las
primitivas de Alta y E/tracci.n del D&nimo (corresponde a e/tracci.n de la ra&!
Aplicaci'n al ordenamiento de arra)s" el heapsort.
Este m?todo de ordenamiento tiene ' partes 0
En la primera parte se convierte el array en un mont&culo% reubicando los elementos del mismo.
En la segunda parte% en sucesivas etapas intercambia el elemento de la ra& con la 2ltima ho(a% decrementa
la posici.n considerada 2ltima del array y recompone el mont&culo desde la primera posici.n del array
(posici.n de la ra&! hasta la 2ltima considerada (recompone el mont&culo en una ona del array "ue va
disminuyendo paulatinamente!.
Al agotarse los elementos del array "ue se consideran parte del mont&culo% el proceso termina.
@bservar "ue si se "uiere ordenar el array de modo ascendente% el mont&culo debe verificar "ue el valor de
cada nodo debe ser mayor "ue el de sus hi(os% y lo contrario para un ordenamiento descendente.
&'di#o del *eapsort"
void Heapsort( int aEF% int n !
G
int H% /-
for (H : n='- H ;: )- H99! Becomponer(a% H% n!-
Ihile (n ; )!
G / : aE)F- aE)F : aEnF- aEnF : /-
Becomponer(a% )% 99n!-
J
J
void Becomponer( int aEF% int i"u% int der!
G
int i% (% /-
/ : aEi"uF-
i : i"u- ( : 'Ki-
if ((( L der! MM (aE(F L aE(N)F!! (NN-
Ihile ((( L: der! MM (/ L aE(F!!
G
aEiF : aE(F-
i : (- ( : 'K(-
if ((( L der! MM (aE(F L aE(N)F!! (NN-
J
aEiF : /-
J
E(emplo0
Este es el array original
,=7
Estructura Heap Algoritmos II curso Calvo
6 ' ) 8 7 ,
3as siguientes son las etapas de la conformaci.n del heap
6 ' , 8 7 )
6 8 , ' 7 )
8 6 , ' 7 )
8 7 , ' 6 )
Ahora ya se tiene un mont&culo formado. <e lleva a cabo la segunda parte.
) 7 , ' 6 8
7 ) , ' 6 8
7 6 , ' ) 8
) 6 , ' 7 8
, 6 ) ' 7 8
' 6 ) , 7 8
6 ' ) , 7 8
) ' 6 , 7 8
' ) 6 , 7 8
) ' ) , 7 8
7=7

También podría gustarte