1 / 51

Chapter 24: Single-Source Shortest-Path

Chapter 24: Single-Source Shortest-Path. About this lecture. What is the problem about ? Dijkstra ’s Algorithm [1959] ~ Prim’s Algorithm [1957] Folklore Algorithm for DAG [???] Bellman-Ford Algorithm Discovered by Bellman [1958] , Ford [1962] Allowing negative edge weights.

avermillion
Download Presentation

Chapter 24: Single-Source Shortest-Path

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 24: Single-Source Shortest-Path

  2. About this lecture • What is the problem about ? • Dijkstra’s Algorithm [1959] • ~ Prim’s Algorithm [1957] • Folklore Algorithm for DAG [???] • Bellman-Ford Algorithm • Discovered by Bellman[1958], Ford[1962] • Allowing negative edge weights

  3. Single-Source Shortest Path • Let G = (V,E) be a weighted graph • the edges in G have weights • can be directed/undirected • can be connected/disconnected • Let s be a special vertex, called source • Target: For each vertex v, compute the length of shortest path from sto v

  4. 8 7 4 9 2 s 11 4 14 7 6 8 10 2 1 8 7 4 12 19 4 9 2 s 11 4 14 14 0 21 7 6 8 10 8 9 11 2 1 Single-Source Shortest Path • E.g.,

  5. Can we improve this? v 8 ? 4 4 2 s 11 ? 0 7 6 8 ? ? 1 Can we improve these? Relax • A common operation that is used in the algorithms is calledRelax : • when a vertex v can be reached from the source with a certain distance, we examine an outgoing edge, say (v,w), and check if we can improve w • E.g., If d(w) > d(v) + w(v, w) d(w) = d(v) + w(v, w)

  6. Dijkstra’s Algorithm • Dijkstra(G,s) • For each vertex v, • Mark v as unvisited, and set d(v) = ∞ ; • Set d(s) = 0 ; • while (there is unvisited vertex) { • v = unvisited vertex with smallest d ; • Visit v, and Relax all its outgoing edges; • } • return d ;

  7. Relax 8 7 ∞ 4 4 ∞ 9 s 2 11 4 14 ∞ 0 ∞ 7 6 8 10 ∞ ∞ 8 2 1 Example 8 7 4 ∞ 9 ∞ ∞ s 2 11 4 14 ∞ 0 ∞ 7 6 8 10 ∞ ∞ ∞ 2 1

  8. 8 7 4 4 9 ∞ ∞ s 2 11 4 14 0 ∞ ∞ 7 6 8 10 8 ∞ ∞ 2 1 Relax 8 7 4 4 12 ∞ 9 s 2 11 4 14 ∞ ∞ 0 7 6 8 10 ∞ 8 ∞ 2 1 Example

  9. 8 7 4 ∞ 12 4 9 s 2 11 4 ∞ 14 ∞ 0 7 6 8 10 ∞ ∞ 8 2 1 Relax 8 7 4 4 ∞ 12 9 s 2 11 4 14 15 ∞ 0 7 6 8 10 ∞ 9 8 2 1 Example

  10. 8 7 4 12 ∞ 4 9 s 2 11 4 14 15 ∞ 0 7 6 8 10 9 ∞ 8 2 1 Relax 8 7 4 4 ∞ 12 9 s 2 11 4 14 ∞ 15 0 7 6 8 10 9 11 8 2 1 Example

  11. 8 7 4 12 4 ∞ 9 s 2 11 4 14 15 ∞ 0 7 6 8 10 9 11 8 2 1 Relax 8 7 4 4 12 25 9 s 2 11 4 14 15 0 21 7 6 8 10 9 11 8 2 1 Example

  12. 8 7 4 12 4 25 9 s 2 11 4 14 15 0 21 7 6 8 10 9 11 8 2 1 Relax 8 7 4 4 12 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Example

  13. 8 7 4 12 4 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Relax 8 7 4 4 12 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Example

  14. 8 7 4 12 4 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Relax 8 7 4 4 12 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Example

  15. 8 7 4 12 4 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Relax 8 7 4 4 12 19 9 s 2 11 4 14 14 0 21 7 6 8 10 9 11 8 2 1 Example

  16. Correctness Theorem: The kth vertex closest to the source s is selected at the kth step inside the while loop of Dijkstra’s algorithm Also, by the time a vertex v is selected, d(v) will store the length of the shortest path from s to v How to prove ? (By induction)

  17. Proof • Both statements are true for k = 1 ; • Let vj = jth closest vertex from s • Now, suppose both statements are true for k = 1, 2, …, r-1 • Consider the rth closest vertex vr • If there is no path from s to vr •  d(vr) = ∞ is never changed • Else, there must be a shortest path from s to vr ; Let vt be the vertex immediately before vr in this path

  18. Proof (cont) • Then, we have tr-1(why??) •  d(vr) is set correctly once vt is selected, and the edge (vt,vr) is relaxed (why??) •  After that, d(vr) is fixed (why??) •  d(vr) is correct when vr is selected ; also, vr must be selected at the rth step, because no unvisited nodes can have a smaller d value at that time • Thus, the proof of inductive case completes

  19. Performance • Dijkstra’s algorithm is similar to Prim’s • By simply store d(v) in the vth array. • Relax (Decrease-Key): O(1) • Pick vertex (Extract-Min): O(V) • Running Time: • the costof |V| operation Extract-Min is O(V2) • At most O(E) Decrease-Key •  Total Time: O(E + V2) = O(V2)

  20. Performance • By using binary Heap (Chapter 6), • Relax  Decrease-Key: O(log V) • Pick vertex  Extract-Min: O (log V) • Running Time: • the costof each |V| operation Extract-Min is O(V log V) • At most O(E) Decrease-Key •  Total Time: O((E + V) log V) • = O(E log V)

  21. Performance • By using Fibonacci Heap (Chapter 19), • Relax  Decrease-Key • Pick vertex  Extract-Min • Running Time: • the amortized costof each |V| operation Extract-Min is O(log V) • At most O(E) Decrease-Key •  Total Time: O(E + V log V)

  22. Finding Shortest Path in DAG • We have a faster algorithm for DAG : • DAG-Shortest-Path(G,s) • Topological Sort G ; • For each v, set d(v) =  ; Set d(s) = 0 ; • for (k = 1 to |V|) { • v = kth vertex in topological order ; • Relax all outgoing edges of v ; • } • return d ;

  23. s 3 4 2 11 6 5 8 Topological Sort 11 s 6 2 3 4 5 8 Example

  24. 11 s 6 2 3 4      0 5 Process this node 8 Relax 11 s 6 2 3 4      0 5 8 Example

  25. 11 s 6 2 3 4      0 5 Process this node 8 Relax 11 s 6 2 3 4    0 11 3 5 8 Example

  26. 11 s 6 2 3 4    0 3 11 5 Process this node 8 Relax 11 s 6 2 3 4   0 11 3 5 5 8 Example

  27. 11 s 6 2 3 4 0 3 5 11   5 Process this node 8 Relax 11 s 6 2 3 4 0 10 3 5 11  5 8 Example

  28. 11 s 6 2 3 4 0 3 5 10 11  5 8 Process this node Relax 11 s 6 2 3 4 0 10 3 5 11  5 8 Example

  29. 11 s 6 2 3 4 0 3 5 10 11  5 8 Process this node Relax 11 s 6 2 3 4 0 10 3 5 11  5 8 Example

  30. Correctness Theorem: By the time a vertex v is selected, d(v) will store the length of the shortest path from s to v How to prove ? (By induction)

  31. Proof • Let vj = jth vertex in the topological order • We will show that d(vk) is set correctly when vk is selected, for k = 1,2, …, |V| • When k = 1, • vk = v1 = leftmost vertex • If it is the source, d(vk) = 0 • If it is not the source, d(vk) =  • In both cases, d(vk) is correct (why?) • Base case is correct

  32. Proof (cont) • Now, suppose the statement is true for k = 1, 2, …, r-1 • Consider the vertex vr • If there is no path from s to vr •  d(vr) =  is never changed • Else, we shall use similar arguments as proving the correctness of Dijkstra’s algorithm …

  33. Proof (cont) • First, let vt be the vertex immediately before vr in the shortest path from s to vr •  tr-1 •  d(vr) is set correctly once vt is selected, and the edge (vt,vr) is relaxed •  After that, d(vr) is fixed •  d(vr) is correct when vr is selected • Thus, the proof of inductive case completes

  34. Performance • DAG-Shortest-Path selects vertex sequentially according to topological order • no need to perform Extract-Min • We can store the d values of the vertices in a single array  Relax takes O(1) time • Running Time: • Topological sort : O(V + E) time • O(V) select, O(E) Relax : O(V + E) time •  Total Time: O(V + E)

  35. v E.g., -7 4 s 11 What is the shortest path from s to v? -7 8 Handling Negative Weight Edges • When a graph has negative weight edges, shortest path may not be well-defined

  36. Handling Negative Weight Edges • The problem is due to the presence of a cycle C, reachable by the source, whose total weight is negative •  C is called a negative-weight cycle • How to handle negative-weight edges ?? •  if input graph is known to be a DAG, DAG-Shortest-Path is still correct •  For the general case, we can use Bellman-Ford algorithm

  37. Bellman-Ford Algorithm • Bellman-Ford(G,s) // runs in O(VE) time • For each v, set d(v) =  ; Set d(s) = 0 ; • for (k = 1 to |V|-1) • Relax all edges in G in any order ; • /* check if s reaches a neg-weight cycle */ • for each edge (u,v), • if (d(v) > d(u) + weight(u,v)) • return “something wrong !!” ; • return d ;

  38. Example 1 8 8 ∞ ∞ 4 4 ∞ 4 s s -7 -7 10 3 10 3 0 0 Relax all 8 8 ∞ ∞ ∞ 8 -2 Relax all 8 8 Relax all 1 4 4 0 4 4 s s -7 -7 10 10 3 3 0 0 8 8 -2 11 ∞ 7 7 -2 -2

  39. Example 1 After the 4th Relax all 8 4 0 4 s -7 10 3 0 8 7 10 -2 After checking, we found that there is nothing wrong  distances are correct

  40. Example 2 8 8 ∞ ∞ ∞ 4 4 4 s s -7 -7 1 3 1 3 0 0 Relax all 8 8 ∞ ∞ ∞ 8 -2 -2 Relax all 8 8 Relax all 4 4 -7 1 1 4 s s -7 -7 1 1 3 3 0 0 8 8 ∞ 2 0 7 -2 -2

  41. Example 2 After the 4th Relax all This edge shows something must be wrong … 8 4 -15 -7 s -7 1 3 0 8 -8 -6 -2 After checking, we found that something must be wrong  distances are incorrect

  42. Correctness (Part 1) Theorem: If the graph has no negative-weight cycle, then for any vertex v with shortest path from s consists of k edges, Bellman-Ford sets d(v) to the correct value after the kthRelax all (for any ordering of edges in each Relax all ) How to prove ?

  43. Proof • Consider any vertex v that is reachable from s, and let p = (v0, v1, …, vk), where v0 = s and vk = v be any shortest path from s to v. • p has at most lVl – 1 edges, and so k  lVl – 1. Each of the lVl – 1 iterations relaxes all lEl edges. • Among the edges relaxed in the ith iteration, for i = 1, 2,…k is (vi-1, vi). • By the path-relaxation property, d(v) = d(vk) = the shortest path from s to v.

  44. Path-Relaxation Property • Consider any shortest path p from s = v0 to vk, and let p = (v0, v1, …, vk). If we relax the edges (v0, v1), (v1, v2), …, (vk-1, vk) in order, then d(vk) is the shortest path from s to vk. • Proof by induction

  45. Corollary Corollary: If there is no negative-weight cycle, then when Bellman-Ford terminates, d(v) ≤ d(u) + weight(u,v) for all edge (u,v) Proof: By previous theorem, d(u) and d(v) are the length of shortest path from s to u and v, respectively. Thus, we must have d(v) ≤ length of any path from s to v  d(v) ≤ d(u) + weight(u,v)

  46. “Something Wrong” Lemma Lemma: If there is a negative-weight cycle, then when Bellman-Ford terminates, d(v) > d(u) + weight(u,v) for some edge (u,v) How to prove ? (By contradiction)

  47. Proof • Firstly, we know that there is a cycle • C = (v1, v2, … , vk, v1) • whose total weight is negative • That is, Si = 1 to kweight(vi, vi+1) ‹ 0 • Now, suppose on the contrary that • d(v) ≤ d(u) + weight(u,v) • for all edge (u,v) at termination

  48. Proof (cont) • Can we obtain another bound for • Si = 1 to kweight(vi, vi+1) ? • By rearranging, for all edge (u,v) • weight(u,v) ≥ d(v) - d(u) •  Si = 1 to kweight(vi, vi+1) • ≥ Si = 1 to k(d(vi+1) - d(vi)) = 0 (why?) •  Contradiction occurs !!

  49. Correctness (Part 2) • Combining the previous corollary and lemma, we have: Theorem: There is a negative-weight cycle in the input graph if and only if when Bellman-Ford terminates, d(v) > d(u) + weight(u,v) for some edge (u,v)

  50. Performance • When no negative edges • Using Dijkstra’s algorithm: O(V2) • Using Binary heap implementation: O(E lg V) • Using Fibonacci heap: O(E + VlogV) • When DAG • DAG-Shortest-Paths: O(E + V) time • When negativecycles • Using Bellman-Ford algorithm: O(VE) = O(V3 )

More Related