Dijkstra의 알고리즘은 단일 소스가 있고 한 노드에서 다른 노드로 가장 작은 경로를 알고 싶지만 실패합니다 (음의 모서리가있는 그래프에서).
Dijkstra의 알고리즘은 단일 소스 최단 경로 또는 SSSP 알고리즘 의 한 예입니다 . 모든 SSSP 알고리즘은 선택된 소스 노드의 최단 경로 거리 계산 에 각 그래프의 다른 노드. 또한 s 에서 다른 모든 노드 까지 의 모든 최단 경로를 루트 트리 형태로 간결하게 표시 합니다. Wikipedia 코드 에서이 트리에서 v 의 부모입니다 .에스에스previous[v]
V
모서리가 음인 그래프에서 Dijkstra 알고리즘의 동작은 논의중인 정확한 변형에 따라 다릅니다. Wikipedia의 알고리즘과 같은 일부 알고리즘 변형은 항상 빠르게 실행되지만 음수 에지가있을 때 최단 경로를 올바르게 계산하지 않습니다. 이 강의 노트에 있는 것과 같은 다른 변형 은 소스에서 도달 할 수있는 음의주기가없는 한 항상 가장 짧은 경로를 정확하게 계산하지만 음의 가장자리가있는 경우 최악의 경우 지수 시간이 필요할 수 있습니다.
Floyd-Warshall의 알고리즘은 모든 노드 중 하나가 소스가 될 수있을 때 사용되므로 가장 짧은 거리가 모든 소스 노드에서 대상 노드에 도달하기를 원합니다. 음수 사이클이있는 경우에만 실패합니다.
맞습니다. Floyd-Warshall은 모든 쌍 최단 경로 알고리즘 의 한 예입니다. 즉, 모든 노드 쌍 사이의 최단 경로를 계산합니다 . 또 다른 예는 "각 노드 v에 대해 v를 소스 노드로 사용하여 Dijkstra를 실행"입니다. 다른 몇 가지가 있습니다.
Bellman-Ford는 소스가 하나만있을 때 Dijkstra와 같이 사용됩니다. 이것은 음의 가중치를 처리 할 수 있으며 그 작동은 Floyd-Warshall과 동일합니다. 하나의 소스를 제외하고는 그렇습니까?
O ( V삼)O ( V2이자형)O ( V이자형)
자세한 내용은 선호하는 알고리즘 교재를 참조하십시오. (당신은 좋아하는 알고리즘 교과서를 가지고 있습니까?)