Un montón de bases es una estructura de datos que permite realizar las operaciones de una cola de prioridad monótona . A continuación, se puede gestionar un conjunto de elementos a los que se les asigna una clave. El tiempo de ejecución de las operaciones depende de la diferencia entre la clave o constante más grande y la más pequeña. La estructura de datos consta principalmente de una serie de contenedores, cuyo tamaño aumenta exponencialmente .
Prerrequisitos
- todas las claves son números naturales ;
- tecla máx. - tecla mín. C para C constante;
- La operación extract-min es monótona; es decir, los valores devueltos por llamadas extract-min sucesivas aumentan monótonamente .
Descripción de la estructura de datos
Los tres campos más importantes son:
- de tamaño , con 0 como el índice más bajo, almacena los contenedores;
- de tamaño , con 0 como el índice más bajo, almacena los límites (inferiores) de los depósitos;
- , contiene para cada elemento del montón el depósito en el que está almacenado.
El diagrama anterior muestra la estructura de datos. Se aplican las siguientes invariantes:
- tecla en : las teclas en se mueven hacia arriba o hacia abajo a través del valor en o limitado.
- y para : los tamaños de los cubos aumentan exponencialmente.
Es importante tener en cuenta el crecimiento exponencial de los límites (y, por lo tanto, del rango que contiene un cubo). De esta manera, la dependencia logarítmica de las magnitudes de campo es de valor C, la diferencia máxima entre dos valores clave.
Operaciones
Durante la inicialización , se generan contenedores vacíos y se generan los límites inferiores (según el invariante 2); tiempo de ejecución .
Durante la inserción , un nuevo elemento se mueve linealmente de derecha a izquierda a través de los contenedores y el nuevo elemento se almacena en el contenedor izquierdo en ese momento ; tiempo de ejecución .
Para decrease-key , primero se disminuye el valor de la clave (verificando el cumplimiento de las invariantes). Luego, se utiliza el campo para ubicar el elemento y se itera hacia la izquierda, si es necesario, de manera análoga a la operación de inserción . El tiempo de ejecución es (amortizado).
La operación extract-min elimina un elemento de un contenedor y lo devuelve. Si el contenedor aún no está vacío, la operación finaliza. Sin embargo, si está vacío, se busca el siguiente contenedor más grande que no esté vacío, se rastrea su elemento más pequeño y se establece en k (para esto se requiere monotonía). Luego, de acuerdo con las invariantes, se redefinen los límites del contenedor y se eliminan los elementos a los contenedores recién formados; tiempo de ejecución (amortizado).
Si se muestra, el campo se actualiza.
Referencias
- BV Cherkassky, AV Goldberg, C. Silverstein: Cubos, montones, listas y colas de prioridad monótonas (resumen), en: Actas del octavo simposio anual ACM-SIAM sobre algoritmos discretos. Enero de 1997, págs. 83-92.