Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
The Bellman-Ford Shortest Path Algorithm Neil Tang 03/11/2010 CS223 Advanced Data Structures and Algorithms 1 Class Overview The shortest path problem Differences The Bellman-Ford algorithm Time complexity CS223 Advanced Data Structures and Algorithms 2 Shortest Path Problem Weighted path length (cost): The sum of the weights of all links on the path. The single-source shortest path problem: Given a weighted graph G and a source vertex s, find the shortest (minimum cost) path from s to every other vertex in G. CS223 Advanced Data Structures and Algorithms 3 Differences Negative link weight: The Bellman-Ford algorithm works; Dijkstra’s algorithm doesn’t. Distributed implementation: The Bellman-Ford algorithm can be easily implemented in a distributed way. Dijkstra’s algorithm cannot. Time complexity: The Bellman-Ford algorithm is higher than Dijkstra’s algorithm. CS223 Advanced Data Structures and Algorithms 4 The Bellman-Ford Algorithm 6 s t 5 ,nil -2 7 2 ,nil y ,nil -3 8 0 x 9 -4 7 ,nil z CS223 Advanced Data Structures and Algorithms 5 The Bellman-Ford Algorithm 6 s 5 ,nil -2 6 0 7 x ,nil 6 -3 8 0 7 s t 2 -4 ,nil 9 Initialization y t 5 6,s -2 -3 8 2 7 s 6,s -2 7,s y t 6 s 2,x 8 0 7 7,s 2,t 7,s 9 z y After pass 2 y The order of edges examined in each pass: (t, x), (t, z), (x, t), (y, x), (y, t), (y, z), (z, x), (z, s), (s, t), (s, y) CS223 Advanced Data Structures and Algorithms x ,nil -3 2 7 4,y 7 5 8 0 ,nil z x -4 t -4 7 ,nil z After pass 1 x 5 4,y -2 -3 -4 7 2 9 9 After pass 3 2,t z 6 The Bellman-Ford Algorithm 6 s t 5 2,x -2 4,y -3 8 0 x 2 7 7,s y -4 9 7 -2,t z After pass 4 The order of edges examined in each pass: (t, x), (t, z), (x, t), (y, x), (y, t), (y, z), (z, x), (z, s), (s, t), (s, y) CS223 Advanced Data Structures and Algorithms 7 The Bellman-Ford Algorithm Bellman-Ford(G, w, s) 1. Initialize-Single-Source(G, s) 2. for i := 1 to |V| - 1 do 3. for each edge (u, v) E do 4. Relax(u, v, w) 5. for each vertex v u.adj do 6. if d[v] > d[u] + w(u, v) 7. then return False // there is a negative cycle 8. return True Relax(u, v, w) if d[v] > d[u] + w(u, v) then d[v] := d[u] + w(u, v) parent[v] := u CS223 Advanced Data Structures and Algorithms 8 Time Complexity Bellman-Ford(G, w, s) 1. Initialize-Single-Source(G, s) 2. for i := 1 to |V| - 1 do 3. for each edge (u, v) E do 4. Relax(u, v, w) 5. for each vertex v u.adj do 6. if d[v] > d[u] + w(u, v) 7. then return False // there is a negative cycle 8. return True O(|V|) O(|V||E|) O(|E|) Time complexity: O(|V||E|) CS223 Advanced Data Structures and Algorithms 9