Camino más corto de Dijkstra
Observa cómo el algoritmo de Dijkstra encuentra el camino más corto en un grafo ponderado.
Exploración voraz y límites de minimización de caminos 🖖
El algoritmo de Dijkstra encuentra el camino más corto entre nodos de un grafo con pesos no negativos. Funciona de manera voraz (greedy) y actualiza las distancias mediante relajación: d(v) = min(d(v), d(u) + w(u,v)). Su complejidad se optimiza a O(E + V log V) usando colas de prioridad de montículo de Fibonacci.
Por qué el nodo más cercano es seguro 🖖
Dijkstra hace crecer una frontera desde el nodo inicial y siempre fija el nodo no visitado que está más cerca. Como todo peso de arista es no negativo, ningún desvío posterior puede mejorar una ruta más corta ya encontrada: una vez fijado un nodo, su distancia es definitiva y no se vuelve a revisar. Por eso los planificadores de rutas y protocolos de enrutamiento como OSPF confían en él para calcular caminos mínimos fiables.
Ideado en veinte minutos con un café 🖖
Edsger Dijkstra concibió el algoritmo en 1956 en unos veinte minutos, sin lápiz ni papel, mientras descansaba en la terraza de un café de Ámsterdam. Buscaba un problema de demostración para el ordenador ARMAC y eligió la ruta más corta entre dos ciudades neerlandesas, Róterdam y Groninga. Lo publicó tres años después en un artículo de apenas tres páginas, uno de los resultados más citados de la informática.
Problemas de ejemplo
- Ciudad de 5 nodos - Ciudad de 5 nodos: ruta más corta 0→4
- Cuadrícula 3×3 - Cuadrícula 3×3: varias rutas más cortas
- Profundo vs. amplio - Profundo vs. amplio: el algoritmo voraz falla
- Arista negativa - Arista negativa: Dijkstra puede fallar