All-Pairs Shortest Paths Jeff Chastine All-Pairs Shortest Paths • Could just run SSSP |π| times – Bad runtimes – With negative weights and dense graph, π(π4) • Output: Matrix π· of min distance • Input a Adjacency Matrix π = (π€ππ ) | 0 π€ππ = π‘βπ π€πππβπ‘ ππ ππππ π, π ∞ Jeff Chastine ππ π = π ππ π ≠ π πππ π, π ∈ πΈ ππ π ≠ π πππ π, π ∉ πΈ All-Pairs Shortest Paths • Create a predecessor matrix Π = πππ – πππ is NIL if π = π or no path – πππ is the predecessor of π on some path to π – πth row is shortest-paths tree with root π • Predecessor subgraph πΊπ,π = (ππ,π , πΈπ,π ) – ππ,π = π ∈ π: πππ ≠ ππΌπΏ ∪ π – πΈπ,π = { πππ , π : π ∈ ππ,π − π } Jeff Chastine Where to begin… • Assume a path π: – Goes from vertex π to vertex π – Contains at most π edges • Decompose π into π π′ π – π’ contains (π − 1) edges – πΏ π, π = πΏ π, π + π€ππ Jeff Chastine π A recursive solution (π) • Let π ππ be the min weight from π to π with π edges. Then 0 (0) –π = ππ ∞ ππ π = π ππ π ≠ π Jeff Chastine Key Idea This may be painful (π) • π recursively is ππ – min of π (π − 1) AND ππ – min weight from π to π using π edges looking at predecessors π of π (π) (π − 1) (π − 1) π = min π , πππ1≤π≤π π + π€ππ ππ ππ ππ Jeff Chastine Next • Compute a series of matrices: • πΏ(1) , πΏ(2) , … , πΏ π−1 (π) • π = 1,2, … , π − 1 then πΏ Jeff Chastine (π) = (π ) ππ The Algorithm EXTEND-SHORTEST-PATHS (πΏ, π) 1 π ← πππ€π πΏ 2 Let πΏ′ = (π′ππ ) be an π × π matrix 3 for π ← 1 to π 4 do for π ← 1 to π 5 do π′ππ ← ∞ 6 for π ← 1 to π 7 do π′ππ ← min(π′ ππ , πππ + π€ππ ) 8 return πΏ’ Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 What’s the minimum weight using only 1 edge? Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) 0 = 0 0 0 We need to update the best way to get from vertex 1 passing through all others Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = ∞ 0 0 0 0 Currently, best way from 1 to 2 is found in πΏ(1) . Can we do better? Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = ∞ 0 0 0 0 We could try going through vertex 3, but that would cost 12! Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = ∞ 0 0 0 0 Not connected to 4. We could try passing throughJeffvertex Chastine 5, but it doesn’t connect to 2 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 0 0 0 So, the best way from 1 to 2 was found in πΏ(1) afterall. Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 ∞ 0 0 0 Currently, best way from 1 to 3 is found in πΏ(1) . Can we do better? Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 ∞ 0 0 0 We could try to go through 2, but it’s not connected to 3. Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 ∞ 0 0 0 Again, skip 4, and vertex 5 isn’t connected to 3. Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 0 0 0 So, the best way from 1 to 3 was in πΏ(1) afterall. Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 ∞ 0 0 0 Going from 1 to 4 isn’t possible in πΏ(1) . Can we do better? Jeff Chastine 2 3 4 8 1 3 2 1 -4 -5 7 5 πΏ(1) 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 4 0 0 0 Going from 1 to 4 through 2 gives makes it possible using (2) edges! Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 4 0 0 0 We could try going through vertex 3, but it’s not connected to 4 Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 4 0 0 0 Aha! Going through 5 gives us a better result of 2! Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 0 πΏ(2) = 3 0 8 2 −4 0 0 0 There’s no change for going to 5, so we won’t walk through it. Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) = 0 ∞ 3 0 8 2 −4 0 0 0 What about going from vertex 2 to vertex 1? It’s currently not possible in πΏ(1) . Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) = 0 3 3 0 8 2 −4 0 0 0 Vertex 2 isn’t connected to 1 or 3, but we can go through 4! Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) = 0 3 3 0 8 −4 0 2 −4 0 0 From 2 to 3... Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 = ∞ 3 0 4 8 −4 0 2 1 5 0 −4 7 0 From 3 to 4... Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 = ∞ 3 0 4 8 −4 0 2 1 5 0 −4 7 11 0 From 3 to 5... Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 = ∞ 2 3 8 0 −4 4 0 −1 2 1 5 0 −4 7 11 0 From 4 to 2... Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) From 4 to 5... Jeff Chastine 0 3 = ∞ 2 3 8 0 −4 4 0 −1 −5 2 1 5 0 −4 7 11 −2 0 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) From 5 to 1... Jeff Chastine 0 3 8 3 0 −4 = ∞ 4 0 2 −1 −5 8 2 1 5 0 −4 7 11 −2 0 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 8 3 0 −4 = ∞ 4 0 2 −1 −5 8 ∞ What about 5 to 2? Does it get updated? Jeff Chastine 2 1 5 0 −4 7 11 −2 0 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 8 3 0 −4 = ∞ 4 0 2 −1 −5 8 ∞ Nope. What about 5 to 3? Does it get updated? Jeff Chastine 2 1 5 0 −4 7 11 −2 0 2 3 4 8 1 3 2 1 -4 7 5 πΏ(1) -5 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 8 3 0 −4 = ∞ 4 0 2 −1 −5 8 ∞ 1 Nope. What about 5 to 3? Does it get updated? Jeff Chastine 2 1 5 0 −4 7 11 −2 0 2 3 4 8 1 3 2 1 -4 -5 7 5 πΏ(1) 6 4 0 3 8 ∞ −4 ∞ 0 ∞ 1 7 = ∞ 4 0 ∞ ∞ 2 ∞ −5 0 ∞ ∞ ∞ ∞ 6 0 πΏ(2) 0 3 3 0 = ∞ 4 2 −1 8 ∞ 8 −4 0 −5 1 2 −4 1 7 5 11 0 −2 6 0 πΏ(1) shows us the min weight using 2 edges! What about 3 edges? Jeff Chastine 2 3 4 8 1 3 2 1 -4 7 5 πΏ(2) -5 0 3 3 0 = ∞ 4 2 −1 8 ∞ 4 6 8 −4 0 −5 1 2 −4 1 7 5 11 0 −2 6 0 πΏ(3) 0 ∞ = ∞ ∞ ∞ Construct πΏ(3) from πΏ(2) Jeff Chastine ∞ 0 ∞ ∞ ∞ ∞ ∞ 0 ∞ ∞ ∞ ∞ ∞ 0 ∞ ∞ ∞ ∞ ∞ 0 Notes • Runs in π(π4 ) – EXTEND-SHORTEST-PATHS runs in π(π3 ) – Called (π − 1) times to construct πΏ(π−1) • Can be improved to π π3 πππ – Repeated squaring (in book) – Similar to matrix multiplication Jeff Chastine Floyd-Warshall • Runs in Θ π 3 . • Again, no negative-weight cycles • Concept of intermediate vertex (IV): – In path π π π, any vertex other than π or π Jeff Chastine Floyd-Warshall • Considers only a subset of vertices {1,2, … , π} – In any path π π π, consider intermediate vertices • If π is not an IV, then IVs consist of {1,2, … , π − 1} • Else, π is an IV, so – – – – π1 π2 Break path into π π π Both π1 and π2 are shortest paths π is not an intermediate vertex for π1 and π2 All IVs of both π1 and π2 must exist in {1,2, … , π − 1} Jeff Chastine Recursive Solution (π) • Let π be weight of shortest path from i ππ for which all IVs are in {1,2, … , π} – π = 0 implies no intermediate vertices (0) –π = π€ππ ππ π€ππ π (π) = π−1 π−1 π−1 ππ min π ,π +π ππ ππ ππ Jeff Chastine ππ π = 0 ππ π ≥ 1 π 2 3 4 8 1 Predecessor subgraph: predecessor on way to another vertex. Realize that these are parts of paths! 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ Original state. Jeff Chastine 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 Example: This entry says 2’s predecessor is 1 when coming from 1. Jeff Chastine 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 Example: This entry says 3’s predecessor is 1 when coming from 1. Jeff Chastine 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 Example: This entry says 2’s predecessor is 3 when coming from 2. Jeff Chastine 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 π· (0) -5 7 5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ When k=1, consider updating each entry by running paths through vertex 1. This will create D(1) and Π(1) 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ Original state. Jeff Chastine 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 We’re attempting to update all of 4’s entries by going through vertex 1. I skipped vertices 2 and 3 for this example. 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 ∞ −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 ππΌπΏ ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ What can we update 4’s paths going through vertex 1? Jeff Chastine ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ On a path going from 4 to 2, 2’s predecessor is 1 Jeff Chastine ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 ∞ 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ On a path going from 4 to 5, 5’s predecessor is 1 Jeff Chastine ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ ππΌπΏ ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (0) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 −2 6 0 Π (0) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ On a path going from 4 to 5, 5’s predecessor is 1 Jeff Chastine ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 We’ve created D(1) and Π(1). We can make D(2) and Π(2) by repeating the process, running all paths through vertex 2. 2 1 -4 7 5 π· (1) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 −2 6 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ Here we go again… Jeff Chastine 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (1) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 ∞ −4 1 7 ∞ ∞ 0 −2 6 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ There’s now a path from 1 to 4 through 2… Jeff Chastine 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ ππΌπΏ 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (1) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 4 −4 1 7 ∞ ∞ 0 −2 6 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ There’s now a path from 1 to 4 through 2… Jeff Chastine 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ 2 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (1) -5 6 0 3 8 ∞ 0 ∞ = ∞ 4 0 2 5 −5 ∞ ∞ ∞ 4 4 −4 1 7 ∞ ∞ 0 −2 6 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ … and from 3 to 4 through 2 Jeff Chastine 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ 2 2 ππΌπΏ ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (1) -5 4 6 0 3 8 4 ∞ 0 ∞ 1 = ∞ 4 0 5 2 5 −5 0 ∞ ∞ ∞ 6 −4 7 ∞ −2 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ … and from 3 to 4 through 2 Jeff Chastine 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ 2 2 2 ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 2 1 -4 7 5 π· (1) -5 4 6 0 3 8 4 ∞ 0 ∞ 1 = ∞ 4 0 5 2 5 −5 0 ∞ ∞ ∞ 6 −4 7 ∞ −2 0 Π (1) ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ … and from 3 to 4 through 2 Jeff Chastine 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ 2 2 2 ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ 2 3 4 8 1 3 We’ve created D(2) and Π(2). We can make D(3) and Π(3) by repeating the process, running all paths through vertex 3. 2 1 -4 7 5 π· (2) -5 6 0 3 8 4 ∞ 0 ∞ 1 = ∞ 4 0 5 2 5 −5 0 ∞ ∞ ∞ 6 4 −4 7 ∞ −2 0 Π (2) Jeff Chastine ππΌπΏ ππΌπΏ = ππΌπΏ 4 ππΌπΏ 1 ππΌπΏ 3 1 ππΌπΏ 1 ππΌπΏ ππΌπΏ 4 ππΌπΏ 2 2 2 ππΌπΏ 5 1 2 ππΌπΏ 1 ππΌπΏ Summary • All-Pairs Shortest Paths – Sloppy algorithm runs in Θ(π4) – Improved with Floyd Warshall Θ(π3) • What are the practical areas this could be applied? Jeff Chastine