어떤 문제를 푸는가
다익스트라는 음수 간선 이 있으면 틀립니다. 벨만-포드는 음수 가중치 간선이
있어도 단일 시작점 최단 경로를 구하고, 나아가 음수 사이클 의 존재까지
탐지합니다.
핵심 아이디어 — 모든 간선을 V−1번 이완
최단 경로는 사이클을 포함하지 않으므로 간선을 최대 \(V-1\)개 거칩니다.
따라서 모든 간선에 대한 이완을 \(V-1\)번 반복하면 모든 최단 거리가 확정됩니다.
$$ \text{매 라운드: 모든 } (u, v, w)\text{에 대해 } dist[v] \leftarrow \min(dist[v],\ dist[u] + w) $$
왜 V−1번이면 충분한가
귀납적으로 봅니다. \(k\)번째 라운드가 끝나면, 간선을 최대 \(k\)개 쓰는 모든
최단 경로가 dist에 반영됩니다. 시작점에서 임의 정점까지의 최단 경로가
간선을 \(\ell\)개 쓴다면, \(\ell\)번째 라운드에 그 거리가 확정됩니다. 단순 경로의
간선 수는 최대 \(V-1\)이므로 \(V-1\)번이면 모두 끝납니다.
핵심은 라운드 안에서 모든 간선을 빠짐없이 본다는 점입니다. 순서는 상관없고,
한 라운드에서 운 좋게 더 멀리 갱신될 수도 있지만 최악의 경우를 \(V-1\)로 잡습니다.
음수 사이클 탐지
\(V-1\)번 이완 뒤에도 여전히 갱신되는 간선 이 있다면, 그 경로는 사이클로
무한히 줄어드는 음수 사이클을 포함합니다. \(V\)번째 라운드에서 한 번 더 돌려
갱신 여부를 확인하면 됩니다.
음수 사이클이 있으면 "최단 경로"는 \(-\infty\)로 정의되지 않으므로, 보통은
"음수 사이클 존재"만 보고합니다.
복잡도
| 항목 | 값 |
|---|---|
| 시간 | \(O(V \cdot E)\) |
| 공간 | \(O(V)\) (거리 배열) |
다익스트라의 \(O(E \log V)\)보다 느립니다. 그러니 음수 간선이 없으면
다익스트라, 음수가 있거나 음수 사이클 판정이 필요하면 벨만-포드를 씁니다.
다익스트라와의 비교
| 다익스트라 | 벨만-포드 | |
|---|---|---|
| 음수 간선 | 불가 | 가능 |
| 음수 사이클 | — | 탐지 가능 |
| 시간 | \(O(E \log V)\) | \(O(VE)\) |
| 방식 | 최솟값 확정 | 전 간선 반복 이완 |
다음 강의에서 구현, 음수 사이클 보고, 그리고 큐로 가속하는 SPFA를 봅니다.