CMPS 6610 Fall 2018 Shortest Paths Carola Wenk

Similar documents
Single Source Shortest Paths

Single Source Shortest Paths

CMPS 2200 Fall Carola Wenk Slides courtesy of Charles Leiserson with small changes by Carola Wenk. 10/8/12 CMPS 2200 Intro.

Introduction to Algorithms

Introduction to Algorithms

Introduction to Algorithms

CS60020: Foundations of Algorithm Design and Machine Learning. Sourangshu Bhattacharya

Introduction to Algorithms

Design and Analysis of Algorithms

CS 4407 Algorithms Lecture: Shortest Path Algorithms

Analysis of Algorithms. Outline. Single Source Shortest Path. Andres Mendez-Vazquez. November 9, Notes. Notes

Discrete Wiskunde II. Lecture 5: Shortest Paths & Spanning Trees

Introduction to Algorithms

Data Structures and and Algorithm Xiaoqing Zheng

Lecture Notes for Chapter 25: All-Pairs Shortest Paths

Shortest Path Algorithms

Design and Analysis of Algorithms

Analysis of Algorithms I: All-Pairs Shortest Paths

Discrete Optimization 2010 Lecture 2 Matroids & Shortest Paths

Slides credited from Hsueh-I Lu & Hsu-Chun Hsiao

Dynamic Programming: Shortest Paths and DFA to Reg Exps

Dijkstra s Single Source Shortest Path Algorithm. Andreas Klappenecker

Dynamic Programming: Shortest Paths and DFA to Reg Exps

Lecture 11. Single-Source Shortest Paths All-Pairs Shortest Paths

Algorithm Design and Analysis

Myriad of applications

Algorithms Booklet. 1 Graph Searching. 1.1 Breadth First Search

All-Pairs Shortest Paths

Algorithm Design and Analysis

Breadth First Search, Dijkstra s Algorithm for Shortest Paths

Discrete Optimization 2010 Lecture 3 Maximum Flows

CS 6301 PROGRAMMING AND DATA STRUCTURE II Dept of CSE/IT UNIT V GRAPHS

Algorithms: Lecture 12. Chalmers University of Technology

A faster algorithm for the single source shortest path problem with few distinct positive lengths

Contents Lecture 4. Greedy graph algorithms Dijkstra s algorithm Prim s algorithm Kruskal s algorithm Union-find data structure with path compression

Undirected Graphs. V = { 1, 2, 3, 4, 5, 6, 7, 8 } E = { 1-2, 1-3, 2-3, 2-4, 2-5, 3-5, 3-7, 3-8, 4-5, 5-6 } n = 8 m = 11

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

CS 253: Algorithms. Chapter 24. Shortest Paths. Credit: Dr. George Bebis

CSE 431/531: Analysis of Algorithms. Dynamic Programming. Lecturer: Shi Li. Department of Computer Science and Engineering University at Buffalo

CSE101: Design and Analysis of Algorithms. Ragesh Jaiswal, CSE, UCSD

COMP251: Bipartite graphs

8 Priority Queues. 8 Priority Queues. Prim s Minimum Spanning Tree Algorithm. Dijkstra s Shortest Path Algorithm

Breadth-First Search of Graphs

Shortest paths with negative lengths

Partha Sarathi Mandal

Dynamic Programming. Data Structures and Algorithms Andrei Bulatov

Chapter 8 Dynamic Programming

BFS Dijkstra. Oct abhi shelat

ne a priority queue for the nodes of G; ile (! PQ.is empty( )) select u PQ with d(u) minimal and remove it; I Informatik 1 Kurt Mehlhorn

Chapter 8 Dynamic Programming

Query Processing in Spatial Network Databases

Chapter 5 Data Structures Algorithm Theory WS 2017/18 Fabian Kuhn

Chapter 4. Greedy Algorithms. Slides by Kevin Wayne. Copyright 2005 Pearson-Addison Wesley. All rights reserved.

CS 410/584, Algorithm Design & Analysis, Lecture Notes 4

Lecture 7: Shortest Paths in Graphs with Negative Arc Lengths. Reading: AM&O Chapter 5

Trees. A tree is a graph which is. (a) Connected and. (b) has no cycles (acyclic).

Introduction to Algorithms

CSC 1700 Analysis of Algorithms: Warshall s and Floyd s algorithms

Shortest Paths. CS 320, Fall Dr. Geri Georg, Instructor 320 ShortestPaths 3

Preliminaries. Graphs. E : set of edges (arcs) (Undirected) Graph : (i, j) = (j, i) (edges) V = {1, 2, 3, 4, 5}, E = {(1, 3), (3, 2), (2, 4)}

CS 241 Analysis of Algorithms

General Methods for Algorithm Design

6. DYNAMIC PROGRAMMING II. sequence alignment Hirschberg's algorithm Bellman-Ford distance vector protocols negative cycles in a digraph

Introduction to Algorithms

IS 709/809: Computational Methods in IS Research Fall Exam Review

CS675: Convex and Combinatorial Optimization Fall 2014 Combinatorial Problems as Linear Programs. Instructor: Shaddin Dughmi

iretilp : An efficient incremental algorithm for min-period retiming under general delay model

University of Toronto Department of Electrical and Computer Engineering. Final Examination. ECE 345 Algorithms and Data Structures Fall 2016

Dynamic Programming. Shuang Zhao. Microsoft Research Asia September 5, Dynamic Programming. Shuang Zhao. Outline. Introduction.

Matching Residents to Hospitals

Routing Algorithms. CS60002: Distributed Systems. Pallab Dasgupta Dept. of Computer Sc. & Engg., Indian Institute of Technology Kharagpur

COMP251: Bipartite graphs

Covering Linear Orders with Posets

arxiv: v1 [cs.ds] 20 Nov 2016

CPSC 320 (Intermediate Algorithm Design and Analysis). Summer Instructor: Dr. Lior Malka Final Examination, July 24th, 2009

Optimal Tree-decomposition Balancing and Reachability on Low Treewidth Graphs

6. DYNAMIC PROGRAMMING II

MA015: Graph Algorithms

directed weighted graphs as flow networks the Ford-Fulkerson algorithm termination and running time

CS675: Convex and Combinatorial Optimization Fall 2016 Combinatorial Problems as Linear and Convex Programs. Instructor: Shaddin Dughmi

Graphic sequences, adjacency matrix

CSCE 750 Final Exam Answer Key Wednesday December 7, 2005

Algorithm Design. Scheduling Algorithms. Part 2. Parallel machines. Open-shop Scheduling. Job-shop Scheduling.

CS 580: Algorithm Design and Analysis

CMPS 2200 Fall Divide-and-Conquer. Carola Wenk. Slides courtesy of Charles Leiserson with changes and additions by Carola Wenk

CS781 Lecture 3 January 27, 2011

Maximum Flow. Reading: CLRS Chapter 26. CSE 6331 Algorithms Steve Lai

Generic ǫ-removal and Input ǫ-normalization Algorithms for Weighted Transducers

Discrete Optimization Lecture 5. M. Pawan Kumar

Internet Routing Example

Analysis of Algorithms. Outline 1 Introduction Basic Definitions Ordered Trees. Fibonacci Heaps. Andres Mendez-Vazquez. October 29, Notes.

FINAL EXAM PRACTICE PROBLEMS CMSC 451 (Spring 2016)

IS 2610: Data Structures

CSE 4502/5717 Big Data Analytics Spring 2018; Homework 1 Solutions

Directed Graphs (Digraphs) and Graphs

Complexity Theory of Polynomial-Time Problems

Running Time. Assumption. All capacities are integers between 1 and C.

Theoretical Computer Science. Partially dynamic efficient algorithms for distributed shortest paths

A walk over the shortest path: Dijkstra s Algorithm viewed as fixed-point computation

arxiv: v1 [cs.dm] 26 Apr 2010

Transcription:

CMPS 6610 Fall 018 Shortest Paths Carola Wenk Slides courtesy of Charles Leiserson with changes and additions by Carola Wenk

Paths in graphs Consider a digraph G = (V, E) with an edge-weight function w : E. The weight of path p = v 1 v... v k is defined to be Example: k 1 i1 w ( p) w( v i, v i 1). v 1 4 v 3 5 1 v 5 v v 4 w(p) =

Shortest paths A shortest path from u to v is a path of minimum weight from u to v. The shortest-path 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. 3

Optimal substructure Theorem. A subpath of a shortest path is a shortest path. Proof. Cut and paste: 4

Triangle inequality Theorem. For all u, v, x V, we have (u, v) (u, x) + (x, v). Proof. (u,v) minimizes over all paths from u to v u (u, v) v Concatenating two shortest paths from u to x and from x to v yields one specific path from u to v (u, x) (x, v) x 5

Well-definedness of shortest paths If a graph G contains a negative-weight cycle, then some shortest paths may not exist. Example: u -6 5 < 0-8 v 6

Single-source shortest paths Problem. From a given source vertex s V, find the shortest-path weights (s, v) for all v V. Assumption: All edge weights w(u, v) are non-negative. It follows that all shortest-path weights must exist. IDEA: Greedy. 1. Maintain a set S of vertices whose shortest-path weights from s are known, i.e., d[v]=(s,v). At each step add to S the vertex u V S whose distance estimate d[u] from s is minimal. 3. Update the distance estimates d[v] of vertices v adjacent to u. 7

Dijkstra s algorithm d[s] 0 for each v V {s} do d[v] S Vertices for which d[v]=d(s,v) Q V Q is a priority queue maintaining V S sorted by d-values d[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) relaxation step implicit DECREASE-KEY in Q 8

Dijkstra s algorithm d[s] 0 for each v V {s} do d[v] S Vertices for which d[v]=d(s,v) Q is a priority queue maintaining V S Q V sorted by d-values d[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 V PRIM s algorithm key[v] for all v V key[s] 0 for some arbitrary s V while Q do u EXTRACT-MIN(Q) for each v Adj[u] do if v Q and w(u, v) < key[v] then key[v] w(u, v) [v] u Difference to Prim s: It suffices to only check v Q, but it doesn t hurt to check all v Add d[u] to the weight relaxation step implicit DECREASE-KEY in Q 9

How to find the actual shortest paths? Store a predecessor tree: d[s] 0 for each v V {s} do d[v] S Vertices for which d[v]=d(s,v) Q V Q is a priority queue maintaining V S sorted by d-values d[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) [v] u 10

Example of Dijkstra s algorithm Graph with nonnegative edge weights: A 10 B D 8 1 4 7 9 3 C E 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) [v] u 11

Example of Dijkstra s Initialize: algorithm 10 B D S: {} 0 A 8 1 4 7 9 Q: A B C D E 0 3 C E 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) [v] u 1

Example of Dijkstra s algorithm A EXTRACT-MIN(Q): S: { A } 0 : A B C D E Q: A B C D E 0 A 10 3 B C D 8 1 4 7 9 E 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) [v] u 13

Example of Dijkstra s algorithm Relax all edges leaving A: S: { A } 0 : A B C D E Q: - A B C D E 0 10 A 10 3 10 B C D 8 1 4 7 9 E 3 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) [v] u 14

Example of Dijkstra s algorithm Relax all edges leaving A: S: { A } 0 : A B C D E Q: - A B C D E 0 10 A 10 3 10 B C D 8 1 4 7 9 E 3 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) [v] u 15

Example of Dijkstra s algorithm C EXTRACT-MIN(Q): S: { A, C } 0 : A B C D E Q: - A B C D E 0 10 A 10 3 10 B C D 8 1 4 7 9 E 3 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) [v] u 16

Example of Dijkstra s algorithm Relax all edges leaving C: S: { A, C } 0 : A B C D E Q: - A B C D E 0 10 7 11 5 A 10 3 7 B C 11 D 8 1 4 7 9 E 3 5 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) [v] u 17

Example of Dijkstra s algorithm Relax all edges leaving C: S: { A, C } 0 : A B C D E Q: C C C A B C D E 0 10 7 11 5 A 10 3 7 B C 11 D 8 1 4 7 9 E 3 5 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) [v] u 18

Example of Dijkstra s algorithm E EXTRACT-MIN(Q): S: { A, C, E } 0 : A B C D E Q: C C C A B C D E 0 10 7 11 5 A 10 3 7 B C 11 D 8 1 4 7 9 E 3 5 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) [v] u 19

Example of Dijkstra s algorithm Relax all edges leaving E: S: { A, C, E } 0 : A B C D E Q: C C C A B C D E 0 10 7 11 5 7 11 A 10 3 7 B C 11 D 8 1 4 7 9 E 3 5 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) [v] u 0

Example of Dijkstra s algorithm B EXTRACT-MIN(Q): S: { A, C, E, B } 0 : A B C D E Q: C C C A B C D E 0 10 7 11 5 7 11 A 10 3 7 B C 11 D 8 1 4 7 9 E 3 5 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) [v] u 1

Example of Dijkstra s algorithm Relax all edges leaving B: S: { A, C, E, B } 0 : A B C D E Q: C B C A B C D E 0 10 7 11 5 7 11 9 A 10 3 7 B C 9 D 8 1 4 7 9 E 3 5 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) [v] u

Example of Dijkstra s algorithm D EXTRACT-MIN(Q): S: { A, C, E, B, D}0 : A B C D E Q: C B C A B C D E 0 10 7 11 5 7 11 9 A 10 3 7 B C 9 D 8 1 4 7 9 E 3 5 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) [v] u 3

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 4

Analysis of Dijkstra (continued) Time = ( V )T E XTRACT-MIN + ( E )T D ECREASE-KEY Q T EXTRACT -MIN T DECREASE-KEY Total array O( V ) O(1) O( V ) binary heap Fibonacci heap O(log V ) O(log V ) O( E log V ) O(log V ) amortized O(1) O( E + V log V ) amortized worst case 5

Correctness Theorem. (i) For all v S: d[v] = (s, v) (ii) For all v S: d[v] = weight of shortest path from s to v that uses only (besides v itself) vertices in S. Corollary. Dijkstra s algorithm terminates with d[v] = (s, v) for all v V. 6

Correctness Theorem. (i) For all v S: d[v] = (s, v) (ii) For all v S: d[v] = weight of shortest path from s to v that uses only (besides v itself) vertices in S. Proof. By induction. Base: Before the while loop, d[s]=0 and d[v]= for all vs, so (i) and (ii) are true. Step: Assume (i) and (ii) are true before an iteration; now we need to show they remain true after another iteration. Let u be the vertex added to S, so d[u] d[v] for all other v S. 7

Correctness Theorem. (i) For all v S: d[v] = (s, v) (ii) For all v S: d[v] = weight of shortest path from s to v that uses only (besides v itself) vertices in S. (i) Need to show that d[u] = (s, u). Assume the contrary. There is a path p from s to u with w(p) < d[u]. Because of (ii) that path uses vertices S, in addition to u. Let y be first vertex on p such that y S. S, just before adding u. s x y u Path p from s to u 8

Correctness Theorem. (i) For all v S: d[v] = (s, v) (ii) For all v S: d[v] = weight of shortest path from s to v that uses only (besides v itself) vertices in S. S, just before adding u. s x y u Path p from s to u d[y] w(p) < d[u]. Contradiction to the choice of u. weights are nonnegative assumption about path 9

Correctness Theorem. (i) For all v S: d[v] = (s, v) (ii) For all v S: d[v] = weight of shortest path from s to v that uses only (besides v itself) vertices in S. (ii) Let v S. Let p be a shortest path from s to v that uses only (besides v itself) vertices in S. p does not contain u: (ii) true by inductive hypothesis p contains u: p consists of vertices in S\{u} and ends with an edge from u to v. w(p)=d[u]+w(u,v), which is the value of d[v] after adding u. So (ii) is true. 30

Unweighted graphs Suppose w(u, v) = 1 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] + 1 ENQUEUE(Q, v) Analysis: Time = O( V + E ). 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) 31

Correctness of BFS while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + 1 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] + 1. 3

Example of breadth-first search a b c d e i f h g Q: d[v] 33

Example of breadth-first search 0 a i h d b f e g c 0 Q: a d[v] 0 34

Example of breadth-first search 0 a d i h 1 b f e g c 1 Q: a b d d[v] 0 1 1 35

Example of breadth-first search 0 1 a b c 3 4 d f e 3 4 Q: a b d c e d[v] 0 1 1 i h g 36

Example of breadth-first search 0 1 a b c 3 4 d f e 3 4 Q: a b dc e d[v] 0 1 1 i h g 37

Example of breadth-first search 0 1 a b c 3 4 d f e 4 Q: a b dce d[v] 0 1 1 i h g 38

Example of breadth-first search 0 1 a b c d e 3 4 5 5 6 Q: a b d c e f g d[v] 0 1 1 3 3 i f h g 6 39

Example of breadth-first search 0 1 a b c d e 3 4 5 7 Q: a b d c e f g i i f 6 7 d[v] 0 1 1 3 3 4 h g 6 40

Example of breadth-first search 0 1 a b c d e 3 4 Q: a b d c e f g i h 5 7 8 i h f g 7 8 d[v] 0 1 1 3 3 4 4 a 6 a 41

Example of breadth-first search 0 1 a b c d e 3 4 Q: a b d c e f g i h d[v] 0 1 1 3 3 4 4 5 7 8 i h a f g 8 6 a 4

Example of breadth-first search 7 8 0 1 a b d 5 i f a h a e g c 3 4 6 Q: a b d c e f g i h d[v] 0 1 1 3 3 4 4 43

Example of breadth-first search Distance to a: 0 1 0 1 a b d e 5 7 8 i h a f g a 3 4 c 3 4 Q: a b d c e f g i h d[v] 0 1 1 3 3 4 4 6 44

Negative-weight cycles Recall: If a graph G = (V, E) contains a negativeweight cycle, then some shortest paths may not exist. Example: < 0 u v Bellman-Ford algorithm: Finds all shortest-path weights from a source s V to all v V or determines that a negative-weight cycle exists. 45

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 d[v] d[u] + w(u, v) [v] u for each edge (u, v) E do if d[v] > d[u] + w(u, v) relaxation step then report that a negative-weight cycle exists At the end, d[v] = (s, v). Time = O( V E ). 46

Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 1 B 0 A 3 E 4 C 1 5 D 3 A B C D E 0 47

Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 1 1 B 0 A 3 E 4 C 1 5 D 3 A B C D E 0 0 1 48

Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 1 1 B 0 A 3 E 4 C 1 5 D 3 A B C D E 0 0 1 0 1 49

Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) C 1 1 B 0 A 3 E 4 1 5 D 3 A B C D E 0 0 1 0 1 0 1 50

Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 1 1 B 0 A 3 E 4 C 1 5 D 3 A B C D E 0 0 1 0 1 0 1 51

0 A 1 4 Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) C 1 B 3 1 5 D 3 E A B C D E 0 0 1 0 1 0 1 0 1 1 5

0 A 1 4 Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 3 C 1 B 1 5 A B C D E 0 0 1 E 0 1 D 3 0 1 0 1 1 1 0 1 1 1 53

0 A 1 4 Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 3 C 1 B 1 5 A B C D E 0 0 1 E 0 1 D 3 0 1 0 1 1 1 0 1 1 1 0 1 1 54

0 A Example of Bellman-Ford Order of edges: (B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D) 1 A B C D E 1 B 0 0 1 3 1 E 0 1 4 3 0 1 C D 5 0 1 1 1 0 1 1 1 Note: d-values decrease 0 1 1 monotonically. and more iterations 55

Correctness Theorem. If G = (V, E) contains no negativeweight cycles, then after the Bellman-Ford algorithm executes, d[v] = (s, v) for all v V. Proof. Let v V be any vertex, and consider a shortest path p from s to v with the minimum number of edges. p: s v 0 v 1 v v 3 v k Since p is a shortest path, we have (s, v i ) = (s, v i 1 ) + w(v i 1, v i ). v 56

p: s v 0 Correctness (continued) v 1 v v 3 v k v Initially, d[v 0 ] = 0 = (s, v 0 ), and d[s] is unchanged by subsequent relaxations. After 1 pass through E, we have d[v 1 ] = (s, v 1 ). After passes through E, we have d[v ] = (s, v ).... After k passes through E, we have d[v k ] = (s, v k ). Since G contains no negative-weight cycles, p is simple. Longest simple path has V 1edges. 57

Detection of negative-weight cycles Corollary. If a value d[v] fails to converge after V 1passes, there exists a negative-weight cycle in G reachable from s. 58

DAG shortest paths If the graph is a directed acyclic graph (DAG), we first topologically sort the vertices. Determine f : V {1,,, V } such that (u, v) E f (u) < f (v). 1 4 7 8 3 5 6 9 1 3 4 5 6 7 8 9 59

DAG shortest paths If the graph is a directed acyclic graph (DAG), we first topologically sort the vertices. Determine f : V {1,,, V } such that (u, v) E f (u) < f (v). O( V + E ) time s 1 3 5 6 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. 4 7 8 9 60

Shortest paths Single-source shortest paths Nonnegative edge weights Dijkstra s algorithm: O( E + V log V ) General: Bellman-Ford: O( V E ) DAG: One pass of Bellman-Ford: O( V + E ) All-pairs shortest paths 61

All-pairs shortest paths Input: Digraph G = (V, E), where V = n, with edge-weight function w : E. Output: n n matrix of shortest-path lengths (i, j) for all i, j V. Algorithm #1: Run Bellman-Ford once from each vertex. Time = O( V E ). But: Dense graph O( V 4 ) time. 6

Shortest paths Single-source shortest paths Nonnegative edge weights Dijkstra s algorithm: O( E + V log V ) General: Bellman-Ford: O( V E ) DAG: One pass of Bellman-Ford: O( V + E ) All-pairs shortest paths Nonnegative edge weights Dijkstra s algorithm V times: O( V E + V log V ) General Bellman-Ford V times: O( V E ) Floyd-Warshall: O( V 3 ) 63

Floyd-Warshall algorithm Dynamic programming algorithm. Assume V={1,,, n}, and assume G is given in an adjacency matrix A=(a ij ) 1i,jn where a ij is the weight of the edge from i to j. Define c (k) ij = weight of a shortest path from i to j with intermediate vertices belonging to the set {1,,, k}. i k k k Thus, (i, j) = c ij (n). Also, c ij (0) = a ij. k j 64

Floyd-Warshall recurrence c ij (k) = min {c ij (k 1), c ik (k 1) + c kj (k 1) } Do not use vertex k c ik (k 1) k c kj (k 1) Use vertex k i c ij (k 1) j intermediate vertices in {1,,, k-1} 65

Pseudocode for Floyd- Warshall for k 1 to n do for i 1 to n do for j 1 to n do if c ij (k-1) > c ik (k-1) + c kj (k-1) then c ij (k) c ik (k-1) + c kj (k-1) else relaxation c ij (k) c ij (k-1) Runs in (n 3 ) time and space Simple to code. Efficient in practice. 66

Transitive Closure of a Directed Graph Compute t ij = 1 if there exists a path from i to j, 0 otherwise. IDEA: Use Floyd-Warshall, but with (, ) instead of (min, +): t ij (k) = t ij (k 1) (t ik (k 1) t kj (k 1) ). Time = (n 3 ). Floyd-Warshall recurrence c ij (k) = min {c ij (k 1), c ik (k 1) + c kj (k 1) } 67

Shortest paths Single-source shortest paths Nonnegative edge weights Dijkstra s algorithm: O( E + V log V ) General: Bellman-Ford: O( V E ) adj. list DAG: One pass of Bellman-Ford: O( V + E ) All-pairs shortest paths Nonnegative edge weights adj. list Dijkstra s algorithm V times: O( V E + V log V ) General Bellman-Ford V times: O( V E ) adj. list Floyd-Warshall: O( V 3 ) adj. matrix 68

69 Graph reweighting Theorem. Given a label h(v) for each v V, reweight each edge (u, v) E by ŵ(u, v) = w(u, v) + h(u) h(v). Then, all paths between the same two vertices are reweighted by the same amount. Proof. Let p = v 1 v L v k be a path in the graph. ) ( ) ( ) ( ) ( ) ( ), ( ) ( ) ( ), ( ), ˆ ( ) ˆ ( 1 1 1 1 1 1 1 1 1 1 1 1 k k k i i i k i i i i i k i i i v h v h p w v h v h v v w v h v h v v w v v w p w. Then, we have

Johnson s algorithm 1. Find a vertex labeling h, by running Bellman-Ford on G {super-source s}. Set h(v)=(s,v) or determine that a negative-weight cycle exists. By triangle inequality h(v) h(u) + w(u, v), and hence ŵ(u, v) = w(u, v) + h(u) h(v) 0. Time = O( V E ). Run Dijkstra s algorithm from each vertex using ŵ. Time = O( V E + V log V ). 3. Reweight each shortest-path weight (u,v) to compute the shortest-path weight (u,v) = (u,v) h(u) + h(v) of the original graph G. Time = O( V ) Total time = O( V E + V log V ). ^ ^ 70

Shortest paths Single-source shortest paths Nonnegative edge weights Dijkstra s algorithm: O( E + V log V ) General: Bellman-Ford: O( V E ) adj. list DAG: One pass of Bellman-Ford: O( V + E ) All-pairs shortest paths Nonnegative edge weights adj. list Dijkstra s algorithm V times: O( V E + V log V ) General Bellman-Ford V times: O( V E ) adj. list Floyd-Warshall: O( V 3 ) adj. matrix Johnson s algorithm: O( V E + V log V ) adj. list 71