Lecture 14 - All-Pairs Shortest Paths.pptx

advertisement
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
Download