Introduction to Algorithms 6.046J/8.40J/SMA550 Lecture 7 Prof. Erik Demaine
Paths in graphs Consider a digraph G = (V, E) with edge-weight function w : E R. The weight of path p = v v L v k is defined to be Example: k i= w ( p) = w( v i, v i + ). v v v v 5 v v 4 4 5 w(p) = Introduction to Algorithms Day 9 L7.
Shortest paths A shortest path from u to v is a path of minimum weight from u to v. The shortestpath weight from u to v is defined as δ(u, v) = min{w(p) : p is a path from u to v}. Note: δ(u, v) = if no path from u to v exists. Introduction to Algorithms Day 9 L7.
Optimal substructure Theorem. A subpath of a shortest path is a shortest path. Proof. Cut and paste: Introduction to Algorithms Day 9 L7.4
Triangle inequality Theorem. For all u, v, x V, we have δ(u, v) δ(u, x) + δ(x, v). Proof. uu δ(u, v) vv δ(u, x) δ(x, v) xx Introduction to Algorithms Day 9 L7.5
Well-definedness of shortest paths If a graph G contains a negative-weight cycle, then some shortest paths may not exist. Example: < 0 uu vv Introduction to Algorithms Day 9 L7.6
Single-source shortest paths Problem. From a given source vertex s V, find the shortest-path weights δ(s, v) for all v V. If all edge weights w(u, v) are nonnegative, all shortest-path weights must exist. IDEA: Greedy.. Maintain a set S of vertices whose shortestpath distances from s are known.. At each step add to S the vertex v V S whose distance estimate from s is minimal.. Update the distance estimates of vertices adjacent to v. Introduction to Algorithms Day 9 L7.7
Dijkstra s algorithm d[s] 0 for each v V {s} do d[v] S Q V while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v) Q is a priority queue maintaining V S relaxation step Implicit DECREASE-KEY Introduction to Algorithms Day 9 L7.8
Example of Dijkstra s algorithm Graph with nonnegative edge weights: AA 0 BB D 8 4 7 9 CC EE Introduction to Algorithms Day 9 L7.9
Example of Dijkstra s algorithm Initialize: 0 BB D 0 AA 8 4 7 9 Q: A B C D E 0 CC EE S: {} Introduction to Algorithms Day 9 L7.0
Example of Dijkstra s algorithm A EXTRACT-MIN(Q): 0 AA Q: A B C D E 0 0 BB CC D 8 4 7 9 EE S: { A } Introduction to Algorithms Day 9 L7.
Example of Dijkstra s algorithm Relax all edges leaving A: Q: 0 A B C D E 0 0 AA 0 0 BB CC S: { A } D 8 4 7 9 EE Introduction to Algorithms Day 9 L7.
Example of Dijkstra s algorithm C EXTRACT-MIN(Q): Q: 0 A B C D E 0 0 AA 0 0 BB CC D 8 4 7 9 S: { A, C } EE Introduction to Algorithms Day 9 L7.
Example of Dijkstra s algorithm Relax all edges leaving C: Q: 0 A B C D E 0 0 7 5 AA 0 7 BB CC D 8 4 7 9 S: { A, C } EE 5 Introduction to Algorithms Day 9 L7.4
Example of Dijkstra s algorithm E EXTRACT-MIN(Q): Q: 0 A B C D E 0 0 7 5 AA 0 7 BB CC D 8 4 7 9 S: { A, C, E } EE 5 Introduction to Algorithms Day 9 L7.5
Example of Dijkstra s algorithm Relax all edges leaving E: Q: 0 A B C D E 0 0 7 5 7 AA 0 7 BB CC D 8 4 7 9 S: { A, C, E } EE 5 Introduction to Algorithms Day 9 L7.6
Example of Dijkstra s algorithm B EXTRACT-MIN(Q): Q: 0 A B C D E 0 0 7 5 7 AA 0 7 BB CC D 8 4 7 9 S: { A, C, E, B } EE 5 Introduction to Algorithms Day 9 L7.7
Example of Dijkstra s algorithm Relax all edges leaving B: Q: 0 A B C D E 0 0 7 5 7 9 AA 0 7 BB CC 9 D 8 4 7 9 S: { A, C, E, B } EE 5 Introduction to Algorithms Day 9 L7.8
Example of Dijkstra s algorithm D EXTRACT-MIN(Q): Q: 0 A B C D E 0 0 7 5 7 9 AA 0 7 BB CC 9 D 8 4 7 9 EE 5 S: { A, C, E, B, D } Introduction to Algorithms Day 9 L7.9
Correctness Part I Lemma. Initializing d[s] 0 and d[v] for all v V {s} establishes d[v] δ(s, v) for all v V, and this invariant is maintained over any sequence of relaxation steps. Proof. Suppose not. Let v be the first vertex for which d[v] < δ(s, v), and let u be the vertex that caused d[v] to change: d[v] = d[u] + w(u, v). Then, d[v] < δ(s, v) supposition δ(s, u) + δ(u, v) triangle inequality δ(s,u) + w(u, v) sh. path specific path d[u] + w(u, v) v is first violation Contradiction. Introduction to Algorithms Day 9 L7.0
Correctness Part II Theorem. Dijkstra s algorithm terminates with d[v] = δ(s, v) for all v V. Proof. It suffices to show that d[v] = δ(s, v) for every v V when v is added to S. Suppose u is the first vertex added to S for which d[u] δ(s, u). Let y be the first vertex in V S along a shortest path from s to u, and let x be its predecessor: S, just before adding u. ss xx yy uu Introduction to Algorithms Day 9 L7.
Correctness Part II (continued) ss S xx yy uu Since u is the first vertex violating the claimed invariant, we have d[x] = δ(s, x). Since subpaths of shortest paths are shortest paths, it follows that d[y] was set to δ(s, x) + w(x, y) = δ(s, y) when (x, y) was relaxed just after x was added to S. Consequently, we have d[y] = δ(s, y) δ(s, u) d[u]. But, d[u] d[y] by our choice of u, and hence d[y] = δ(s, y) =δ(s, u) = d[u]. Contradiction. Introduction to Algorithms Day 9 L7.
Analysis of Dijkstra V times degree(u) times while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v) Handshaking Lemma Θ(E) implicit DECREASE-KEY s. Time = Θ(V) T EXTRACT -MIN + Θ(E) T DECREASE-KEY Note: Same formula as in the analysis of Prim s minimum spanning tree algorithm. Introduction to Algorithms Day 9 L7.
Analysis of Dijkstra (continued) Time = Θ(V) T EXTRACT -MIN + Θ(E) T DECREASE-KEY Q T EXTRACT -MIN T DECREASE-KEY Total array O(V) O() O(V ) binary heap Fibonacci heap O(lg V) O(lg V) O(E lg V) O(lg V) amortized O() amortized O(E + V lg V) worst case Introduction to Algorithms Day 9 L7.4
Unweighted graphs Suppose w(u, v) = for all (u, v) E. Can the code for Dijkstra be improved? Use a simple FIFO queue instead of a priority queue. Breadth-first search while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + ENQUEUE(Q, v) Analysis: Time = O(V + E). Introduction to Algorithms Day 9 L7.5
Example of breadth-first search aa bb cc dd ee f gg hh ii Q: Introduction to Algorithms Day 9 L7.6
Example of breadth-first search 0 aa bb cc dd ee f gg hh ii 0 Q: a Introduction to Algorithms Day 9 L7.7
Example of breadth-first search 0 aa bb cc dd ee Q: a b d f gg hh ii Introduction to Algorithms Day 9 L7.8
Example of breadth-first search 0 aa bb cc dd ee Q: a b d c e f gg hh ii Introduction to Algorithms Day 9 L7.9
Example of breadth-first search 0 aa bb cc dd ee Q: a b dc e f gg hh ii Introduction to Algorithms Day 9 L7.0
Example of breadth-first search 0 aa bb cc dd ee Q: a b dce f gg hh ii Introduction to Algorithms Day 9 L7.
Example of breadth-first search 0 aa bb cc dd ee Q: a b d c e g i f gg hh ii Introduction to Algorithms Day 9 L7.
Example of breadth-first search 0 aa bb cc dd ee 4 f Q: a b d c e g i f gg 4 hh ii Introduction to Algorithms Day 9 L7.
0 Example of breadth-first search aa bb cc dd ee f Q: a b d c e g i f h 4 4 gg 4 4 hh ii Introduction to Algorithms Day 9 L7.4
0 Example of breadth-first search aa bb cc dd ee f Q: a b d c e g i f h 4 4 gg 4 hh ii Introduction to Algorithms Day 9 L7.5
Example of breadth-first search 0 aa bb cc dd ee 4 4 f gg hh ii Q: a b d c e g i f h Introduction to Algorithms Day 9 L7.6
Example of breadth-first search 0 aa bb cc dd ee 4 4 f gg hh ii Q: a b d c e g i f h Introduction to Algorithms Day 9 L7.7
Correctness of BFS while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + ENQUEUE(Q, v) Key idea: The FIFO Q in breadth-first search mimics the priority queue Q in Dijkstra. Invariant: v comes after u in Q implies that d[v] = d[u] or d[v] = d[u] +. Introduction to Algorithms Day 9 L7.8