Según esta página , el algoritmo de Dijkstra es solo BFS con una cola de prioridad. ¿Es realmente así de simple? Yo creo que no.
Según esta página , el algoritmo de Dijkstra es solo BFS con una cola de prioridad. ¿Es realmente así de simple? Yo creo que no.
Respuestas:
Puede implementar el algoritmo de Dijkstra como BFS con una cola prioritaria (aunque no es la única implementación).
El algoritmo de Dijkstra se basa en la propiedad de que la ruta más corta de a t es también la ruta más corta a cualquiera de los vértices a lo largo de la ruta. Esto es exactamente lo que hace BFS.
O en otra perspectiva: ¿cómo se comportaría el algoritmo de Dijkstra si todos los pesos fueran 1? Exactamente como BFS.
Primero, ¿cómo podemos adaptar BFS a un gráfico ponderado más general ?
Aquí hay una idea del libro "Algoritmos (Sección 4.4)" de Dasgupta et al:
Para cualquier borde de E (con peso l e ), reemplácelo por l e bordes de longitud 1 , agregando l e - 1 nodos ficticios entre u y v .
Como resultado, todos los bordes del gráfico de resultados tienen longitud unitaria. Por lo tanto, podemos calcular distancias en G ejecutando BFS en G ' .
Segundo, ¿cómo el algoritmo de Dijkstra en venció a BFS en el gráfico transformado G ' ?
BFS en puede ser muy lento si algunos l e son grandes porque se malgasta demasiado tiempo en las distancias a los nodos de computación ficticias que no importa en absoluto. El algoritmo de Dijkstra lo evita al establecer distancias estimadas para los nodos y relajarlos siempre que sea posible.
Tercero, ¿cómo se comporta el algoritmo Dijkstra en gráficos no ponderados?
Se comporta exactamente igual que BFS. Elaboramos esto desde dos puntos principales.
Sobre "relajación".
Para el algoritmo de Dijkstra en gráfico general ponderado, la relajación es
for all edges (u,v) in E:
if dist(v) > dist(u) + w(u,v)
dist(v) = dist(u) + w(u,v)
for all edges (u,v) in E:
if dist(v) = \infty
dist(v) = dist(u) + 1
En "cola de prioridad".
Cuando el algoritmo de Dijkstra se ejecuta en un gráfico no ponderado, en cualquier momento, la cola de prioridad contiene como máximo dos valores distintos (distancia). Por lo tanto, una cola FIFO de BFS es suficiente.