후... 넘 어려워서 나중에 다시 봐야할 듯.
boj.kr/7577
https://blog.naver.com/3587jjh/222030088627
https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-introduction-to-algorithms-sma-5503-fall-2005/video-lectures/lecture-18-shortest-paths-ii-bellman-ford-linear-programming-difference-constraints/lec18.pdf
https://koosaga.com/72
https://medium.com/hackernoon/shortest-and-longest-path-algorithms-job-interview-cheatsheet-2adc8e18869
Bellman - Ford Algorithm
기능
음수 간선이 있는 그래프에서 O(∣V∣∣E∣)에 SSSP를 구할 수 있다.
음수 사이클을 감지할 수도 있다. 참고로, 음수 사이클이 존재하는 그래프에서 최단경로는 −∞가 되므로 일반적으로 정의하지 않는다.
코드
vector<tuple<int,int,int>> edge;
bool hasNegativeCycle;
void bellmanFord(int x) {
dist[x] = 0;
for (i = 1; i < n; ++i)
for (auto [a,b,w] : edge)
dist[b] = min(dist[b],dist[a]+w);
for (auto [a,b,w] : edge)
if (dist[b] < dist[a]+w)
hasNegativeCycle = true;
}
pseudo code만큼 그 의미를 잘 살린 코드이므로 굳이 pseudo code를 작성하지는 않았다.
정당성
δ(s,v)를 s에서 v까지의 최단경로의 길이라고 정의하자. 이런 이유는 중간 프로세스에서 dist가 최단경로가 아닌 경우도 있기 때문이다.
Theorem. 음수 사이클이 없다면, dist[v]=δ(s,v)가 된다.
Proof. 최단경로 p를 생각하자. p의 시작점부터 끝점까지 방문 순서에 따라 정점들에 순서를 매길 수 있다. p위의 v1,v2,⋯,vn에 대해 δ(s,vi)=δ(s,vi−1)+w(vi−1,vi)가 만족한다. 물론 s=v0, δ(s,v0)=0이다.
알고리즘을 적용하여 귀납적으로 증명하자.
a. dist[v0]=0, dist[v0]=δ(s,v0)가 만족한다.
b. k=x일 때, dist[vx]=δ(s,vx)이라 가정하자.
c. k=x+1일 때, dist[vx+1]=dist[vx](=δ(s,vx))+w(vx,vx+1).
∵dist[v]≥δ(s,v), 만약 dist[v]=δ(s,v)이면 갱신하지는 못해도 만족한다.
∴dist[vx+1]=δ(s,vx+1).
보충 설명 : p 위에서 양의 사이클은 존재할 수 없다. ∵δ(s,vi)=δ(s,vi−1)+w(vi−1,vi)<δ(s,vi−1)+W. 0의 사이클은 생략 가능하다. 0의 사이클만을 도려낸 경로도 최단경로이기 때문이다.
따라서 ∣V∣−1번의 프로세스 후 ∀v∈V,dist[v]=δ(s,v)가 만족한다.
시점 T에 음수 사이클 위의 한 정점 v0에 대해 dist[v0]가 갱신되었다고 하자. 사이클 c에 정점이 v0→v1→⋯→vn−1→v0를 이룬다고 하자.
시점 T+1에 dist[v1]≤dist[v0]+w(v0,v1), 만약 <라면, 사이클 내부에서 갱신되고 있는 것이다.
시점 T+n에 dist[v0]≤dist[vn−1]+w(vn−1,v0)로 갱신된다. 이 때도 <라면 갱신되고 있는 것이다.
따라서 음수 사이클이 존재하면 쉬지않고 갱신이 이뤄진다.
Solving a system of difference constraints
xj−xi≤wij형태의 부등식들을 vi→wijvj 형태의 그래프로 모델링 할 수 있다.
Theorem. 그래프가 음수 사이클을 지녔다면 system이 불능이다.
Proof. 음수 사이클을 지녔다고 가정하자. v1→v2→⋯→vk→v1이라면
0≤∑wij<0이므로 모순이다.
Theorem. 그래프에 음수 사이클이 없다면 system이 성립한다.
Proof. Claim. 최단경로가 존재한다면 system이 성립한다.
xi=δ(s,vi)라 하자. 삼각 부등식에 따라 δ(s,vj)≤δ(s,vi)+wij.
따라서 xj−xi≤wij를 잘 나타낸다.