Modelo por capas
La interfaz de cola de prioridad
Una cola de prioridad es la interfaz:
insertar(x, prioridad);mínimo(): ver el de mayor urgencia (menor valor);extraer_mínimo();- a veces,
cambiar_prioridad(x, nueva).
El heap implementa las tres primeras en O(log n), O(1) y O(log n). La cuarta tiene un problema: encontrar x en el heap es O(n), porque el heap no ordena entre ramas.
Este dibujo muestra un heap de cinco elementos y su índice de posiciones, la primera solución:
Dos soluciones:
- Índice de posiciones: una tabla hash que guarda, para cada elemento, su posición actual en el array. Cada intercambio la actualiza. Así, cambiar la prioridad es O(log n): buscar la posición en la tabla y subir o bajar.
- Borrado perezoso: no se cambia nada; se inserta el elemento otra vez con la prioridad nueva. Al extraer, si sale una copia vieja, se descarta.