El (binario) estructura de datos del heap es un objeto de matriz que podemos ver como una
rbol binario casi completa (vase la seccin B.5.3), como se muestra en la Figura 6.1. Cada
llenado en todos los niveles, excepto, posiblemente, el ms bajo, que est lleno de la
la izquierda hasta un punto. Una matriz A que representa un heap es un objeto con dos
atributos:
A: Heap de tamao, lo que representa cmo se almacenan muchos elementos en la pila dentro
de
matriz A. Es decir, aunque AOE1:: A: longitud puede contener nmeros, slo los elementos
en AOE1:: A:-tamao de la pila, donde 0 A: Heap de tamao A: longitud, son elementos vlidos
del heap. La raz del rbol es AOE1, y dado que el ndice i de un nodo, se
puede calcular fcilmente los ndices de su padre, hijo izquierdo y derecho del nio:
simplemente cambiando la representacin binaria de i dada por una posicin de bit. Del
mismo modo, la
de que me fui por una posicin de bit y luego aadir en un 1 como el bit de orden inferior. los
procedimiento padre puede calcular bi = 2c desplazando i derecha una posicin de bit. Bueno
procedimientos.
los valores en los nodos satisfacen una propiedad del montculo, los detalles de los cuales
dependen
aparte de la raz,
AOEPARENT.i / AOEi;
es decir, el valor de un nodo es como mximo el valor de su matriz. Por lo tanto, la mayor
en sentido contrario; la propiedad min-heap es que por cada nodo i que no sea el
raz,
AOEPARENT.i / AOEi:
y cuando las propiedades se aplican a cualquiera de max-min-montones o pilas, slo tiene que
utilizar el
trmino "heap".
nmero de aristas en el camino hacia abajo sencilla ms larga desde el nodo de la hoja, y
definimos la altura de la pila para ser la altura de su raz. Desde un heap de n elementos
se basa en un rbol binario completo, su altura es, .lg n / (vase el ejercicio 6,1-2).
Veremos que las operaciones bsicas sobre montones ejecutan en el tiempo en la mayor parte
proporcional
la propiedad max-heap.
lugar.
Sus entradas son una matriz A y un ndice i en la matriz. Cuando se le llama, MAXHEAPIFY
asume que los rboles binarios arraigadas en LEFT.i / right.i y / son maxheaps,
pero eso AOEi podra ser ms pequeo que sus hijos, violando de esta manera el max-heap
propiedad. MAX-HEAPIFY deja el valor en AOEi "flotar hacia abajo" en el max-heap por lo
MAX-HEAPIFY.A; yo /
1 l D LEFT.i /
2 r D right.i /
4 ms grande D l
5 cosa ms grande i D
7 ms grande D r
8 si grande i
10 MAX-HEAPIFY.A; grande /
nios para satisfacer la propiedad max-heap. El nodo indexado por ms grande, sin embargo,
ahora tiene la AOEi valor original, y por lo tanto el subrbol con raz en grande podra violar
subrbol.
enraizada en uno de los hijos del nodo i (suponiendo que se produce la llamada recursiva).
subrboles de los nios tienen cada tamao a lo sumo 2n = 3-el peor de los casos se produce
cuando
el nivel inferior del rbol es exactamente medio lleno y por lo tanto, podemos describir el
T .n / T .2n = 3 / C, 0,1 /:
La solucin a esta recurrencia, por caso 2 del teorema de master (Teorema 4.1),
La construccin de un heap
matriz AOE1: n, donde n DA: longitud, en un mximo de heap. Por Ejercicio 6.1-7, la
elementos en la submatriz AOE.bn = 2cC1 /: n son todas las hojas del rbol, y as cada uno es
CONSTRUIR-MAX-HEAP.A /
3-MAX HEAPIFY.A; yo /
invariante:
Al comienzo de cada iteracin del bucle de las lneas 2-3, cada nodo i C 1;
Tenemos que demostrar que esta invariante es cierto antes de la primera iteracin del bucle,
que cada
bn = 2cC1; bn = 2cC2; :::; N es una hoja y es por lo tanto la raz de un trivial max-heap.
Mantenimiento: Para ver que cada iteracin del bucle mantiene el invariante, observar que
los hijos del nodo i se numeran ms alto que yo. Por el invariante de bucle, por lo tanto,
En HEAP hace que este tipo de llamadas /. Por lo tanto, el tiempo de ejecucin es en LG n
/. Esta
Podemos derivar una cota ms ajustado mediante la observacin de que el tiempo para MAX-
HEAPIFY de
ejecutar en un nodo vara con la altura del nodo en el rbol, y las alturas de la mayora
nodos son pequeas. Nuestro anlisis ms ajustado se basa en las propiedades que un heap de
n elementos
n = 2HC1
y por lo que podemos expresar el coste total de fabricacin-MAX-HEAP como est acotada
encima de
mediante el intercambio con AOEn. Si ahora descartamos nodo n del heap, y nosotros
la raz permanezca max-montones, pero el nuevo elemento raz podra violar el max-heap
propiedad. Todo lo que tenemos que hacer para restaurar la propiedad max-heap, sin
embargo, es la llamada
HEAPSORT.A /
1 Build-MAX-HEAP.A /
5 MAX-HEAPIFY.A; 1 /
tiempo O.lg n /.
en el captulo 7, por lo general es mejor que en la prctica. Sin embargo, la estructura de datos
del heap
en s tiene muchos usos. En esta seccin, presentamos una de las aplicaciones ms populares
de un heap: como una cola de prioridad eficiente. Al igual que con montones, colas de
prioridad
vienen en dos formas: las colas de prioridad max-min y colas de prioridad. Nos
concentraremos
aqu en la forma de aplicar las colas de prioridad mxima, que son a su vez basado en
maxheaps;
Ejercicio 6,5-3 le pide que escriba los procedimientos para las colas de prioridad min.
con un valor asociado llamada una llave. Una cola de prioridad mximo compatible con los
siguientes
operaciones:
SDS [fxg.
que se supone que es al menos tan grande como el valor de clave actual de x.
Entre sus otras aplicaciones, podemos utilizar colas max-prioritarias para programar
Extract-MAX. El programador puede aadir una nueva tarea a la cola en cualquier momento
llamando INSERT.
impulsada por eventos simulador. Los elementos de la cola son eventos que se desea simular,
cada uno
con un tiempo de ocurrencia asociada que sirve como clave. Los eventos deben ser
puede causar otros eventos que se desea simular en el futuro. Las llamadas a programas de
simulacin
EXTRACTO DE-MIN en cada paso para elegir el prximo evento para simular. A medida que
nuevos eventos son
producido, el simulador los inserta en la cola de prioridad-min llamando INSERT.
Veremos otros usos para las colas min prioridad, destacando la DISMINUCIN-KEY
cola corresponde a los objetos en la aplicacin. Con frecuencia tenemos que determinar qu
Cuando usamos un heap de implementar una cola de prioridad, por lo tanto, a menudo
necesitamos
Del mismo modo, tenemos que almacenar un identificador para el elemento correspondiente
del heap
Puesto que los elementos heap cambian de ubicacin dentro de la matriz durante las
operaciones de almacenamiento dinmico,
una implementacin real, sobre la reubicacin de un elemento del heap, tambin tendra que
actualizar
Ahora se discute cmo implementar las operaciones de una cola de prioridad mxima. los
HEAP-MAX.A /
1 retorno AOE1
desee aumentar. El primer procedimiento actualiza la clave del elemento AOEi a su nueva
valor. Debido a que el aumento de la clave de AOEi podra violar la propiedad max-heap,
El procedimiento a continuacin, en una forma que recuerda el bucle de insercin (lneas 5-7)
de
INSERCIN-ORDENAR de la Seccin 2.1, describe una trayectoria simple a partir de este nodo
hacia
la raz para encontrar un lugar adecuado para la clave recin aumentado. Como HEAP-
INCREASEKEY
sus llaves y continua si la clave del elemento es ms grande, y que termina cuando el elemento
de
clave es menor, ya que la propiedad max-heap tiene ahora. (Vase el ejercicio 6.5-5
1 si la clave <AOEi
tecla 3 AOEi D
6 i D PARENT.i /
primero se expande al mximo en heap aadiendo al rbol una nueva hoja cuya clave es 1.
A continuacin, llama lixiviacin en AUMENTO-KEY para establecer la clave de este nuevo nodo
para su correcta
MAX-heap-INSERT.A; llave/
En resumen, una pila puede soportar cualquier operacin de prioridad de cola en un conjunto
de tamao n
en O.lg n / hora.