← Lumbre

Estructuras de Datos y Algoritmos · 2.º Heaps y colas de prioridad

Portada de Heaps y colas de prioridad

Heaps y colas de prioridad

✦ Un heap no ordena todo: solo garantiza que el mínimo (o máximo) esté a la vista · Estructuras de Datos y Algoritmos · Programación · en 9 minutos

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

Objetivo: Explicar el heap binario como estructura de acceso al extremo en O(log n), su representación en arreglo y su uso para implementar colas de prioridad.

9 min Estructuras de Datos y Algoritmos · Programación 18–30 años
Más
Heaps y colas de prioridad

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Estructuras de Datos y Algoritmos · 2.º semestre Cursos Explorar Mi cuenta Salir del modo estudio

Heaps y colas de prioridad

Diagrama de estructuras de datos: arbol binario, lista enlazada y tabla hash.
Estructuras de datos fundamentales y analisis de complejidad algoritmica.

Mapa conceptual

  • Estructuras de Datos
    • Lineales
      • Arrays
      • Listas enlazadas
      • Pilas y Colas
    • No lineales
      • Arboles BST
      • Heaps
      • Grafos
    • Hash
      • Funcion hash
      • Colisiones
      • Rehashing
    • Algoritmos
      • Ordenamiento
      • Busqueda binaria
      • BFS DFS
    • Optimizacion
      • Big-O
      • Dinamica
      • Voracidad

La propiedad de heap

  1. Es un árbol BINARIO COMPLETO: lleno hasta el penúltimo nivel y alineado a la izquierda.
  2. Cumple la propiedad de orden: en un min-heap, cada padre es menor o igual que sus hijos.
  3. La raíz es, por transitividad, el mínimo global; pero un nodo no es menor que el hijo de otro ramo.

Representación en arreglo

Como el árbol es completo, no necesita punteros: se guarda en un arreglo. El hijo izquierdo del nodo i está en 2i+1, el derecho en 2i+2, y el padre en (i−1)/2. Toda la navegación es aritmética de índices, lo que lo hace compacto y amigable con la memoria.

Sift up y sift down

Insertar = colocar al final y subir (sift up) mientras sea menor que su padre. Extraer el mínimo = llevar la raíz al final, y hundir (sift down) el nuevo tope hasta su lugar. Ambos recorren la altura del árbol, que en un completo es log n.

Construir un heap desde un arreglo desordenado es lineal, no n log n: es una sorpresa clásica que conviene saber justificar.
OperaciónCostoPor qué
peek (ver el mínimo)O(1)Vive en la raíz
push (insertar)O(log n)Recorre la altura subiendo
pop (extraer extremo)O(log n)Hunde el reemplazo por la altura
construir desde lista (heapify)O(n)Los nodos bajos casi no se mueven

Cola de prioridad

Una cola de prioridad es un contenedor que siempre devuelve el elemento de mayor (o menor) prioridad. El heap es su implementación estrella: push y pop en log n. Aparece en planificadores de procesos, en el algoritmo de Dijkstra, en compresión Huffman y en cualquier «atender primero lo más urgente».

Altura: heap logarítmico frente a lista lineal

f(x) = 2 ^ x · f(x) = x · f(x) = log(x)+1

¿Por qué un heap ofrece el mínimo en O(1) pero NO ordena todos sus elementos?

Heap vs árbol binario de búsqueda

Un BST ordenado da recorrido completo en O(n log n) y búsqueda O(log n), pero se desbalancea. Un heap no sirve para buscar un valor arbitrario (O(n)), a cambio su acceso al extremo y su equilibrio estructural son garantizados por ser completo. Cada estructura elige qué promesa dar.

Heapsort

Heapsort convierte el arreglo en un heap y luego extrae el extremo una y otra vez, colocando cada elemento al final. Ordena in situ en O(n log n) garantizado, sin el peor caso O(n²) de quicksort, aunque con peores patrones de memoria (menos locality).

Construir un heap a partir de n elementos desordenados puede hacerse en tiempo O(n).

Errores frecuentes

  • Confundir heap con árbol ordenado: el heap no permite búsquedas eficientes de un valor dado.
  • Olvidar que el pop deja «basura» al final del arreglo: hay que reducir el tamaño lógico.
  • Suponer estabilidad: el heap NO conserva el orden de elementos empatados.

Variantes

El max-heap invierte la desigualdad; un heap binomial o de Fibonacci admite operaciones extra como disminuir clave en tiempo amortizado, útil para grafos. Para un estudiante, el binario basta y es la base sobre la que se entienden los demás.

Anatomía del heap

propiedad de heap
padre extrema respecto a sus hijos
árbol completo
llenado por niveles, alineado a la izquierda
hijo izquierdo de i
2i + 1
sift down
hundir el tope hasta su lugar
peek mínimo
O(1)
heapify
construir en O(n)

Toca una tarjeta para ver la respuesta.

Cuando Python hace heapq.heappush, no mantiene un arreglo ordenado: mantiene un heap. Pedir el mínimo es gratis; saber cuál es el tercero más pequeño requeriría extraer dos veces. Entender ese intercambio es entender para qué sirve la estructura.

Ordena las fases de un heapsort:

Arrastra cada ficha a su categoría (o tócala y luego toca la categoría). También puedes usar el teclado.

Video complementario
Recurso audiovisual para reforzar los conceptos.

Elige un uso real de una cola de prioridad (un scheduler, GPS con Dijkstra, merge de K listas). Explica por qué un heap encaja mejor que un arreglo ordenado o que una lista desordenada, señalando qué operación domina y cuánto cuesta.

Tu texto se guarda sólo en este dispositivo.

Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.
Más sobre esta lección
Explora temas relacionados

Conceptos

Comentarios

Inicia sesión para comentar.

Todavía no hay comentarios. Sé la primera persona en opinar.