¿Por qué utilizar el algoritmo de Dijkstra si Breadth First Search (BFS) puede hacer lo mismo más rápido?


109

Ambos se pueden utilizar para encontrar el camino más corto desde una sola fuente. BFS entra O(E+V), mientras que Dijkstra corre O((V+E)*log(V)).

Además, he visto que Dijkstra se usa mucho en protocolos de enrutamiento.

Entonces, ¿por qué usar el algoritmo de Dijkstra si BFS puede hacer lo mismo más rápido?

Respuestas:


156

Dijkstra permite asignar distancias distintas a 1 para cada paso. Por ejemplo, al enrutar las distancias (o pesos) se pueden asignar por velocidad, costo, preferencia, etc. El algoritmo le brinda la ruta más corta desde su fuente hasta cada nodo en el gráfico atravesado.

Mientras tanto, BFS básicamente solo expande la búsqueda en un "paso" (enlace, borde, como quieras llamarlo en tu aplicación) en cada iteración, lo que tiene el efecto de encontrar la menor cantidad de pasos necesarios para llegar a cualquier nodo dado de su fuente ("raíz").


1
Ambos producirán los mismos resultados, es decir, una ruta entre dos vértices, pero solo dijkstra garantizará la ruta más corta.
Edwin

Vea la respuesta aceptada, segundo comentario. Muy buena manera de explicar por qué la complejidad computacional es diferente: stackoverflow.com/questions/25449781/…
jmcarter9t

23

Si considera los sitios web de viajes, estos utilizan el algoritmo de Dijkstra debido a los pesos (distancias) en los nodos.

Si considera la misma distancia entre todos los nodos, BFS es la mejor opción.

Por ejemplo, considere los A -> (B, C) -> (F)pesos de los bordes dados por A->B= 10, A->C= 20, B->F=C->F = 5.

Aquí, si aplicamos BFS, la respuesta será ABF o ACF, ya que ambos son caminos más cortos (con respecto al número de aristas), pero si aplicamos el de Dijstra, la respuesta será ABF solo porque considera los pesos en el conectado camino.



4

Desde la perspectiva de la implementación, el algoritmo de Dijkstra podría implementarse exactamente como un BFS intercambiando el queuecon un priority queue.

Fuente

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.