"Dijkstra는 멀리 갈수록 비용이 더해지기만 한다고 믿어. 음수 간선이 그 믿음을 깨뜨리지. Bellman-Ford는 그런 가정을 아예 하지 않는, 느리지만 참을성 있는 알고리즘이야. 게다가 '가장 싼 경로'라는 게 아예 성립하지 않는 경우까지 잡아내."
Dijkstra가 못 다루는 경우
어떤 간선은 진짜로 음수 가중치를 가져. 이득이 나는 환전, 크레딧으로 들어오는 금융 흐름, 체력을 회복시켜 주는 게임 속 수 같은 것들이지. 여기서 Dijkstra가 실패해. 가장 가까운 노드를 확정해도 안전하다는 핵심 가정이 모든 간선은 비용을 더하기만 한다는 전제 위에 서 있거든. 음수 간선이 있으면 이미 확정한 노드에 나중에 더 싸게 닿는 길이 생길 수 있어. Bellman-Ford는 그 가정을 통째로 버려. 대신 더 느려지는 값을 치르고.
알고리즘: 모든 간선을 V−1번 완화
Bellman-Ford는 거의 무식할 만큼 단순해. 그래프의 모든 간선을 완화하고, 그걸 V−1번 반복해. 간선 u→v를 완화한다는 건 u를 거쳐 v에 닿는 게 v의 현재 거리보다 싸면 값을 갱신한다는 뜻이야. 왜 하필 V−1번일까. 정점이 V개인 그래프에서 최단 경로는 간선을 많아야 V−1개 쓰고, 모든 간선을 한 바퀴 완화할 때마다 올바른 거리가 출발지로부터 간선 하나만큼 더 바깥으로 퍼지는 게 보장되거든. 그러니 V−1바퀴를 돌면 간선을 V−1개까지 쓰는 모든 최단 경로가 완전히 확정돼. 전체는 O(V·E)야. Dijkstra의 O((V+E) log V)보다 느리지만 음수를 견디지.
초능력: 음의 순환 검출
Bellman-Ford는 출발점에서 도달할 수 있는 음의 순환을 검출할 수 있어. V−1바퀴를 다 돌고도 도달 가능한 간선이 여전히 완화된다면 그런 순환이 있다는 뜻이야. 그 순환에 닿았다가 다시 빠져나갈 수 있는 정점들은 최단 거리가 아예 정의되지 않아. 다만 그래프의 모든 정점이 자동으로 영향을 받는 건 아니라는 것도 같이 기억해. 차익거래에서는 환율 r을 -log(r) 가중치로 바꾸면 곱셈으로 불어나는 이득이 음수 가중치의 합으로 바뀌어서, 음의 순환 검출을 그대로 쓸 수 있어.