Algoritmo de Dijkstra

Erick Vasquez - Oct 20 - - Dev Community

¿Te has preguntado cómo empresas como Amazon logran entregar miles de paquetes a tiempo, optimizando cada ruta de sus repartidores?

La clave detrás de esa eficiencia está en el algoritmo de Dijkstra, un método que permite encontrar la ruta más corta entre dos puntos en una red o grafo. Este algoritmo es una herramienta fundamental en la programación y la ingeniería para resolver problemas de optimización de rutas y tiempos.

Antes de entrar de lleno en el algoritmo, es relevante entender el concepto de grafo.

¿Qué es un Grafo?

Un grafo es una estructura que consiste en un conjunto de puntos llamados nodos conectados por aristas o líneas que los unen. Estos nodos y aristas pueden representar diversas situaciones, como ciudades y las carreteras que las conectan, o incluso servidores en una red.

Mapa con grafo

Tipos de Grafos

  • Grafo dirigido: En este tipo de grafo, las aristas tienen una dirección, es decir, solo se puede ir de un nodo a otro en un solo sentido.
  • Grafo no dirigido: Las aristas no tienen dirección, lo que permite ir en ambas direcciones entre dos nodos conectados.
  • Grafo ponderado conexo: Aquí, las aristas tienen un peso o costo asociado, que puede representar la distancia, el tiempo o cualquier valor significativo para el problema que se quiere resolver. Con este tipo de grafo están relacionados problemas de la vida real.

El Algoritmo de Dijkstra

El algoritmo de Dijkstra fue diseñado por Edsger Dijkstra en 1956 y es una solución eficiente para encontrar la ruta más corta en un grafo ponderado. Se utiliza en múltiples áreas, desde la planificación de rutas para sistemas de transporte hasta redes de comunicación.

¿Cómo Funciona?

  1. Selecciona el nodo de origen: Asigna un valor de 0 al nodo inicial y un valor de infinito a todos los demás nodos.
  2. Explora los nodos vecinos: A medida que exploras los nodos conectados, actualizas los costos o distancias de sus aristas si encuentras un camino más corto.
  3. Repite: Este proceso se repite hasta que se haya recorrido todo el grafo y se haya encontrado el camino más corto al nodo destino.

Ejemplo didáctico

¿Cuál es el camino más corto para ir desde San José Centro a las distintas ciudades?

Grafo con rutas

A) Rutas: San José Centro, Alajuelita, Escazú y Sabanilla.

B) Kilómetros:

  • San José Centro → Alajuelita: 3 km
  • Alajuelita → Escazú: 2 km
  • Alajuelita → Sabanilla: 8 km
  • San José Centro → Escazú: 7 km
  • Escazú → Sabanilla: 2 km

C) Contamos con una tabla donde escribimos el número de pasos que se están dando y una columna para cada ciudad.

En cada columna se escribe la cantidad de kilómetros desde San José Centro hasta cada ciudad. El signo de menos (-) indica que aún no se ha llegado a esa ciudad en ese paso.

Si ya se llegó a la ciudad, se coloca la distancia y de dónde proviene esa distancia. Por ejemplo: "7/San José" significa que se llegó a esa ciudad desde San José con una distancia de 7 km.

Tabla comparativa

  • Paso 0: Estamos en San José Centro, por lo tanto, no hay distancia.
  • Paso 1: Desde San José Centro se puede llegar a Escazú y Alajuelita. La ciudad más cercana es Alajuelita, a 3 km, por lo que se tomará este camino para evaluar otras rutas.
  • Paso 2: Desde Alajuelita podemos llegar a Sabanilla. También es posible llegar a Escazú desde Alajuelita con una distancia menor (5 km en lugar de 7 km desde San José).
  • Paso 3: Finalmente, el camino más corto a Sabanilla también pasa por Alajuelita.

D) Los caminos más cortos desde San José Centro son:

  1. Escazú (pasando por Alajuelita): distancia de 5 km.
  2. Alajuelita (directamente desde San José Centro): distancia de 3 km.
  3. Sabanilla (pasando por Alajuelita): distancia de 7 km.

Aplicaciones del Algoritmo

Industria de envíos y logística: Un caso de uso típico del algoritmo de Dijkstra es en la optimización de rutas para empresas de mensajería, como los repartidores de Amazon. El algoritmo permite calcular la ruta más corta entre un almacén y el destino de entrega del cliente, maximizando la eficiencia y reduciendo tiempos.

Aplicaciones en tiempo real: Sistemas como los GPS y plataformas como Google Maps usan el algoritmo de Dijkstra para calcular rutas en tiempo real.

Análisis en partidos de fútbol: En el análisis de datos deportivos, como en el fútbol, el algoritmo de Dijkstra puede aplicarse para entender las interacciones entre jugadores. Por ejemplo, se puede utilizar para identificar los jugadores que realizan más pases entre sí durante un partido, encontrando la “ruta” más frecuente de intercambio de balón.

Limitaciones del Algoritmo

Aunque el algoritmo de Dijkstra es muy eficaz, tiene algunas limitaciones:

  • Un solo origen: El algoritmo solo encuentra la ruta más corta desde un nodo de origen a un nodo destino. Si tienes múltiples destinos, tendrías que ejecutar el algoritmo repetidamente.
  • No considera otros factores: Factores como el tráfico o las condiciones del camino no son tomados en cuenta. Para aplicaciones reales, se necesita complementar el algoritmo con datos adicionales.

Conclusión

El algoritmo de Dijkstra sigue siendo una herramienta esencial en la ingeniería y la programación moderna. Empresas como Amazon dependen de soluciones como esta para garantizar la optimización de rutas y tiempos de entrega.

Referencias

  • Johnsonbaugh, R. Matemáticas Discretas. México: Pearson Educación, 2005.
  • Pérez, C. M. "Estructuras de grafos". Obtenido de Grafo Ponderado — Grafos.
  • vaniaberzunza. "Edsger Wybe Dijkstra".
. . .