¿Bajo qué escenarios son apropiados los siguientes algoritmos de ruta más corta?

Consideremos un gráfico ponderado dirigido que tiene N vértices y M bordes.
El algoritmo de Dijkstra solo es aplicable cuando ninguno de los bordes tiene pesos negativos y tiene asintóticos O (N ^ 2 + M) u O (N + MlogM) [si lo implementa a través de la cola de prioridad]. Encuentra las distancias desde algún vértice de inicio fijo a todos los demás vértices.

Ford-Bellman hace lo mismo con los asintóticos O (NM) pero sin suponer que los pesos de los bordes no son negativos. También permite detectar ciclos negativos en caso de que el problema del camino más corto no esté bien definido.

El algoritmo de Floyd-Worshall similar al algoritmo de Ford-Bellman no depende de si el gráfico contiene bordes con valores negativos, ya que ambos pueden verse como los enfoques de programación dinámica para el problema del camino más corto. Por otro lado, FW resuelve un problema de ruta más corta un poco diferente que los dos algoritmos anteriores. Encuentra todas las distancias más cortas entre vértices, por ejemplo, la salida es una matriz NxN donde la celda (i, j) establece cuál es la distancia más corta entre i y j. Asintótico es O (N ^ 3 + M). Puede notar que, en general, es más eficiente que ejecutar N veces el algoritmo Ford Belman (a menos que tenga N> M, lo cual es bastante inusual). Pero en caso de que su gráfico no tenga bordes ponderados negativos y sea lo suficientemente escaso, también puede considerar ejecutar N vértices de cola de prioridad totalizando O (N ^ 2 + NMlogM).

Utilice Dijkstra cuando necesite encontrar el camino más corto de A a B.

Use Floyd-Warshall cuando no tenga muchos nodos y solo necesite la longitud del camino (tiene n ^ 3 complejidad de tiempo). Sin embargo, después de procesar el gráfico, puede obtener la longitud de cualquier ruta en O (1).

Use Bellman-Ford cuando necesite la ruta más corta entre A y B, y el gráfico tiene bordes ponderados negativos, porque Dijkstra no funciona en tales gráficos.

More Interesting

¿Qué es una explicación intuitiva de los algoritmos de gradiente proximal?

¿Qué libro de algoritmos introductorios debería leer una mente matemáticamente inclinada?

¿Cuál es el mejor método para resolver un problema de 'cuál es el siguiente número en esta secuencia'?

¿Cuáles son las principales diferencias, con ejemplos, entre un algoritmo de aprendizaje profundo y un algoritmo de aprendizaje de refuerzo?

¿Es posible codificar un algoritmo de manera que cuando se proporciona una imagen de entrada y la ropa que una persona usa en la imagen se recorta y compara con una imagen en una base de datos y sale con la coincidencia exacta / coincidencia más cercana?

¿Cuál debería ser el tamaño máximo del árbol de segmentos construido en una matriz en 100,000 elementos?

Procesadores de señal digital (DSP): cuando alguien escribe un archivo en una tarjeta SD usando un bus spi, ¿cómo sabe dónde debería estar el comienzo de un nuevo archivo?

Programadores: ¿A menudo considera el promedio, el peor y el mejor caso en mente al escribir un algoritmo?

¿Cuál es el algoritmo euclidiano para encontrar GCD? ¿Es un algoritmo tan bueno en términos de rendimiento y análisis de tiempo de ejecución?

¿Qué es el conocimiento estructurado?

Cómo implementar el algoritmo de colocación dinámica para Hadoop

¿Cuál es el algoritmo o algún factor relevante de la clasificación de Google Play?

¿Cuándo Quicksort tiene su peor complejidad de tiempo de caso?

¿Cuántas veces aparece el número 1 en una serie de números del 1 al N? Necesito una explicación lógica, no una usando la computadora.

¿Cuál es un ejemplo interesante del patrón de red del mundo pequeño?