InicioAlgoritmos e IAMontículo Binario — Cola de Prioridad

⛰️ Montículo Binario — Cola de Prioridad

Inserta y extrae valores de un montículo binario mínimo almacenado como un arreglo. Observa cómo los intercambios de ascenso y descenso restauran la propiedad del montículo, dibujada como árbol y como el arreglo subyacente.

Algoritmos e IA2DModerado60 FPS
binary-heap ↗ Abrir independiente

Acerca de Montículo Binario — Cola de Prioridad

Un montículo binario es un árbol binario completo — cada nivel completamente lleno excepto posiblemente el último, llenado de izquierda a derecha — almacenado de forma compacta en un simple arreglo sin punteros. Para cualquier índice i, su padre se encuentra en ⌊(i−1)/2⌋ y sus hijos en 2i+1 y 2i+2, por lo que la estructura de árbol está implícita únicamente en el esquema de indexación. Un montículo mínimo mantiene la propiedad del montículo: el valor de cada padre es menor o igual que el de ambos hijos, garantizando que el elemento más pequeño siempre esté en el índice 0, aunque el arreglo en sí no esté completamente ordenado. Insertar un valor lo añade al final y lo hace ascender, intercambiándolo con su padre mientras se viole la propiedad del montículo — una operación O(log n) acotada por la altura del árbol. Eliminar el mínimo intercambia la raíz con el último elemento, reduce el arreglo y luego hace descender la nueva raíz hacia su hijo más pequeño, de nuevo O(log n). Construir un montículo a partir de n valores desordenados haciendo descender desde el último nodo interno se ejecuta en O(n) total, no en O(n log n), porque la mayoría de los nodos están cerca de la parte inferior, donde el descenso hace poco trabajo. Los montículos binarios son la base de las colas de prioridad, el heapsort y los algoritmos de Dijkstra y Prim.

Preguntas Frecuentes

¿Por qué puede almacenarse un montículo binario en un arreglo sin punteros?

Porque es un árbol binario completo, lleno nivel por nivel sin huecos, el padre y los hijos de un nodo pueden calcularse directamente a partir de su índice en el arreglo (padre = ⌊(i−1)/2⌋, hijos = 2i+1 y 2i+2). Esto evita la sobrecarga de memoria de los nodos de árbol basados en punteros y ofrece una excelente localidad de caché en comparación con las estructuras enlazadas.

¿Cuál es la diferencia de complejidad temporal entre el ascenso y el descenso?

Ambos se ejecutan en O(log n) en el peor caso, ya que cada uno sigue solo un único camino de raíz a hoja de longitud ⌊log₂ n⌋. El ascenso hace como máximo una comparación por nivel contra el padre, mientras que el descenso hace hasta dos comparaciones por nivel contra ambos hijos, por lo que el descenso tiene un factor constante ligeramente mayor a pesar de compartir la misma cota asintótica.

¿Por qué construir un montículo a partir de n elementos es O(n) en lugar de O(n log n)?

El algoritmo de construcción de montículos de Floyd llama al descenso solo en los nodos internos, comenzando desde el último y subiendo hasta la raíz. La mayoría de los nodos están cerca de la parte inferior del árbol, donde un descenso solo puede recorrer una distancia corta; sumar el trabajo en todos los niveles da una serie geométrica que converge a O(n), a diferencia del costo O(n log n) de insertar n elementos uno a uno.

¿Cuál es la diferencia entre un montículo mínimo y uno máximo, y cómo se compara un montículo con un ABB equilibrado para una cola de prioridad?

Un montículo mínimo mantiene el valor más pequeño en la raíz (padre ≤ hijos); un montículo máximo mantiene el más grande (padre ≥ hijos) — se aplican los mismos algoritmos con la comparación invertida. Comparado con un árbol binario de búsqueda equilibrado, un montículo ofrece la misma inserción O(log n) y extracción del mínimo O(log n), pero con una implementación más simple basada en arreglos, sin lógica de reequilibrio, y una consulta O(1) del mínimo, mientras que un ABB ofrece recorrido ordenado y búsqueda O(log n) de claves arbitrarias que un montículo no soporta.

⚙ Bajo el capó

Inserta y extrae valores de un montículo binario mínimo almacenado como un arreglo. Observa cómo los intercambios de ascenso y descenso restauran la propiedad del montículo, dibujada como árbol y como el arreglo subyacente.

estructura de datoscola de prioridadmontículoordenamientoarreglo

2D · HTML5 Canvas 2D · 60 FPS objetivo · funciona totalmente del lado del cliente, sin instalación

¿Qué encontraste?

Añadir pasos de reproducción (opcional)