Академический Документы
Профессиональный Документы
Культура Документы
Negative-weight cycles
Recall: If a graph G = (V, E) contains a negativeweight cycle, then some shortest paths may not exist. Example: <0
u u
v v
Bellman-Ford algorithm: Finds all shortest-path lengths from a source s V to all v V or determines that a negative-weight cycle exists.
Bellman-Ford algorithm
d[s] 0 for each v V {s} do d[v]
initialization
for i 1 to | V | 1 do for each edge (u, v) E do if d[v] > d[u] + w(u, v) then relaxation d[v] d[u] + w(u, v) step [v] u for each edge (u, v) E do if d[v] > d[u] + w(u, v) then report that a negative-weight cycle exists
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
0 A A
1 3 4
B B
1 5 2
E E
3
A B C D E 0 0 A A
1 3 4
1 B B
1 5 2
E E
3
A B C D E 0 0 1
C C
D D
C C
D D
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
0 A A
1 3 4
1 B B
1 5 2
E E
3
A 0 0 0
B 1 1
C 4
0 A A
1 3 4
1 B B
1 5 2
E E
3
A 0 0 0 0
B 1 1 1
C 4 2
C C 4
D D
C C 2 4
D D
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
0 A A
1 3 4
1 B B
1 5 2
E E
3
A 0 0 0 0
B 1 1 1
C 4 2
C C 2
D D
0 A A
1 3 4
1 B B
1 5 2
1 E E
3
C C 2
D D
A 0 0 0 0 0
B 1 1 1 1
C 4 2 2
E 1
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
0 A A
1 3 4
1 B B
1 5 2
1 E E
3
C C 2
D D 1
A 0 0 0 0 0 0
B 1 1 1 1 1
C 4 2 2 2
D 1
E 1 1
0 A A
1 3 4
1 B B
1 5 2
1 E E
3
C C 2
D D 2 1
A 0 0 0 0 0 0 0
B 1 1 1 1 1 1
C 4 2 2 2 2
D 1 2
E 1 1 1
Example of Bellman-Ford
Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)
Correctness
E 1 1 1 Theorem. If G = (V, E) contains no negativeweight cycles, then after the Bellman-Ford algorithm executes, d[v] = (s, v) for all v V.
0 A A
1 3 4
1 B B
1 2
1 E E
3
A 0 0 0 0 0 0 0
B 1 1 1 1 1 1
C 4 2 2 2 2
D 1 2
Proof. Let v V be any vertex, and consider a shortest path p from s to v with the minimum number of edges.
Since p is a shortest path, we have (s, vi) = (s, vi1) + w(vi1, vi) for every i.
Correctness (continued)
s p: v0 v0 v11 v v22 v v33 v
v vkk v
Initially, d[v0] = 0 = (s, v0), and d[s] is unchanged by subsequent relaxations (because of the lemma from last lecture that d[v] (s, v) and (s, s) 0 (why ?) ). After 1 pass through E, we have d[v1] = (s, v1). After 2 passes through E, we have d[v2] = (s, v2). After k passes through E, we have d[vk] = (s, vk). Since G contains no negative-weight cycles, p is simple. Longest simple path has |V| 1 edges.
1 1 3 3 s 2 2 5 5
4 4
7 7 6 6
8 8 9 9
Walk through the vertices u V in this order, relaxing the edges in Adj[u], thereby obtaining the shortest paths from s in a total of O(V + E) time.