0% found this document useful (0 votes)
71 views

11 Warshall - Algorithms (Series Lecture)

All Pairs of Shortest Path - Given a directed graph, compute the shortest path distances between all pairs of vertices - Represented as an n x n matrix where n is the number of vertices - Can be solved using dynamic programming by computing the shortest paths containing up to m edges for m=1 to n-1 - Each iteration extends the previous results by considering one additional edge - Runs in O(n^4) time by repeatedly calling a matrix multiplication-like extension procedure

Uploaded by

turjo987
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
71 views

11 Warshall - Algorithms (Series Lecture)

All Pairs of Shortest Path - Given a directed graph, compute the shortest path distances between all pairs of vertices - Represented as an n x n matrix where n is the number of vertices - Can be solved using dynamic programming by computing the shortest paths containing up to m edges for m=1 to n-1 - Each iteration extends the previous results by considering one additional edge - Runs in O(n^4) time by repeatedly calling a matrix multiplication-like extension procedure

Uploaded by

turjo987
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPTX, PDF, TXT or read online on Scribd
You are on page 1/ 41

All Pairs of Shortest Path

All-Pairs Shortest Paths


Given: 2
3 4
Directed graph G = (V, E)
8
1 3
Weight function w : E R 2
1
-4
Compute: 7 -5
5 4
6
The shortest paths between all pairs
of vertices in a graph
Representation of the result: an
n n matrix of shortest-path
distances (u, v)

2
Dijkstra (G, w, s)
1. INITIALIZE-SINGLE-SOURCE(V, s) (V)
2. S
3. Q V[G] O(V) build min-heap
4. while Q Executed O(V) times
5. do u EXTRACT-MIN(Q) O(lgV)
6. S S {u}
7. for each vertex v Adj[u]
8. do RELAX(u, v, w) O(E) times; O(lgV)
Running time: O(VlgV + ElgV) = O(ElgV)
3
BELLMAN-FORD(V, E, w, s)
1. INITIALIZE-SINGLE-SOURCE(V, s) (V)
2. for i 1 to |V| - 1 O(V)
3. do for each edge (u, v) E O(E)
O(VE)

4. do RELAX(u, v, w)
5. for each edge (u, v) E O(E)
6. do if d[v] > d[u] + w(u, v)
7. then return FALSE
8. return TRUE

Running time: O(VE)


4
All-Pairs Shortest Paths - Solutions
Run BELLMAN-FORD once from each vertex:
O(V2E), which is O(V4) if the graph is dense
(E = (V2))

If no negative-weight edges, could run


Dijkstras algorithm once from each vertex:
O(VElgV) with binary heap, O(V3lgV) if the graph is
dense

We can solve the problem in O(V3), with no


elaborate data structures
5
All-Pairs Shortest Paths
Assume the graph (G) is given as
adjacency matrix of weights
W = (wij), n x n matrix, |V| = n
Vertices numbered 1 to n
0 if i = j
wij = weight of (i, j) if i j , (i, j) E
if i j , (i, j) E
1 1 2 3 4 5
3 v1 v2 1 0 1 1 5
9
5 2 9 0 3 2
1 2 3 Wait Matrix
v5 3 0 4
3 2 4 2 0 3
v4 v3
5 3 0 6
4
All-Pairs Shortest Paths
Assume the graph (G) is given as
adjacency matrix of weights
W = (wij), n x n matrix, |V| = n
Vertices numbered 1 to n
0 if i = j
wij = weight of (i, j) if i j , (i, j) E
2
if i j , (i, j) E
3 4 1 2 3 4 5
8 1
1 3 2
2 Wait Matrix ?
1 3
-4 7 -5
4
5 4 5
6 7
All-Pairs Shortest Paths
Assume the graph (G) is given as
adjacency matrix of weights
W = (wij), n x n matrix, |V| = n
Vertices numbered 1 to n
0 if i = j
wij = weight of (i, j) if i j , (i, j) E
if i j , (i, j) E
Output the result in an n x n matrix
D = (dij), where dij = (i, j)
Solve the problem using dynamic programming
8
Optimal Substructure of a Shortest Path
at most m edges
All subpaths of a shortest

11
path are shortest paths i
j
k
Let p: a shortest path p
at most m - 1 edges
from vertex i to j that
contains at most m edges If i j: p = i p
kj
If i = j p has at most m-1
edges
w(p) = 0 and p has no p is a shortest path
edges (i, j) = (i, k) + wkj
9
Recursive Solution
lij(m) = weight of shortest path i j that contains
at most m edges at most m edges

m = 0: lij(0) = 0 if i = j
11
j
if i j i
k

m 1: lij(m) = min { lij(m-1) , min {lik(m-1) + wkj} }


1kn
= min {lik(m-1) + wkj}
1kn
Shortest path from i to j with at most m 1 edges
Shortest path from i to j containing at most m edges,
considering all possible predecessors (k) of j
10
Computing the Shortest Paths
m = 1: lij(1) = wij L(1) = W
The path between i and j is restricted to 1 edge
Given W = (wij), compute: L(1), L(2), , L(n-1), where
L(m) = (lij(m))
L(n-1) contains the actual shortest-path weights
Given L(m-1) and W compute L(m)
Extend the shortest paths computed so far by one more edge
If the graph has no negative cycles: all simple shortest
paths contain at most n - 1 edges
(i, j) = lij(n-1) and lij(n) = lij(n+1). . .= lij(n-1)

11
Extending the Shortest Path
lij(m) = min {lik(m-1) + wkj}
1kn
k
j j

i * = i
k

L(m-1) nxn W L(m)

Replace: min + Computing L(m) looks like


+ matrix multiplication

12
EXTEND(L, W, n)
1. create L, an n n matrix
2. for i 1 to n
lij(m) = min {lik(m-1) + wkj}
3. do for j 1 to n 1kn

4. do lij
5. for k 1 to n
6. do lij min(lij, lik + wkj)
7. return L
Running time: (n3)
13
SLOW-ALL-PAIRS-SHORTEST-PATHS(W, n)

1. L(1) W

2. for m 2 to n - 1

3. do L(m) EXTEND (L(m - 1), W, n)

4. return L(n - 1)

Running time: (n4)

14
Example lij(m) = min {lik(m-1) + wkj}
1kn

2 L(m-1) = L(1) W

3 4 0 3 8 -4 0 3 8 -4
1
8
3 0 1 7 0 1 7
2

-4
1
-5
4 0 4 0
7
5 4 2 -5 0 2 -5 0
6
6 0 6 0

0 3 8 2 -4 min { D0 [1,4], D0 [1,5]+ D0 [5,4]}


= min {, -4+6} = 2
3 0 -4 1 7
L(m) = L(2) min { D0 [2,3], D0 [2,4]+ D0 [4,3]}
4 0 5 11 = min {, 1+(-5)} = -4

2 -1 -5 0 -2 min { D0 [3,4], D0 [3,2]+ D0 [2,4]}


= min {, 4+7} = 11
8 1 6 0
15
Example lij(m) = min {lik(m-1) + wkj}
1kn

2 L(m-1) = L(2)
0 3 8 2 -4
3 4 3 0 -4 1 7
8
1 3 4 0 5 11
2

-4 7
1
-5 2 -1 -5 0 -2
5 4 8 1 6 0
6

0 3 -3 2 -4 min { D1 [2,5], D1 [2,1]+ D1 [1,5]}


= min {7, 3-4} = -1
3 0 -4 1 -1
L(m) = L(3) min { D1 [3,1], D1 [3,4]+ D1 [4,1]}
7 4 0 5 11 = min {, 5+2} = 7

2 -1 -5 0 -2 min { D1 [5,2], D1 [5,4]+ D1 [4,2]}


= min {, 6-1} = 5
8 5 1 6 0
16
Example lij(m) = min {lik(m-1) + wkj}
1kn

2 L(m-1) = L(3)
0 3 -3 2 -4
3 4
3 0 -4 1 -1
8
1
2
3 7 4 0 5 11
-4 7
1
-5 2 -1 -5 0 -2
5 4 8 5 1 6 0
6

0 1 -3 2 -4 min { D2 [1,2], D2 [1,4]+ D2 [4,2]}


= min {3, 2-1} = 1
3 0 -4 1 -1
L(m) = L(4) min { D2 [3,5], D2 [3,1]+ D2 [1,5]}
7 4 0 5 3 = min {11, 7-4} = 3

2 -1 -5 0 -2
8 5 1 6 0
17
Improving Running Time
No need to compute all L(m) matrices
If no negative-weight cycles exist:
L(m) = L(n - 1) for all m n 1
We can compute L(n-1) by computing the sequence:
(Matrix multiplication is associative A*(B*C)=(A*B)*C)
L(1) = W L(2) = W2 = W W
L(4) = W4 = W2 W2 L(8) = W8 = W4 W4
2x n 1
n 1 2 lg(n1)
L W
18
FASTER-APSP(W, n)
1. L(1) W
2. m1
3. while m < n - 1
4. do L(2m) EXTEND(L(m), L(m), n)
5. m 2*m
6. return L(m)

OK to overshoot: products dont change after


L(n - 1)
Running Time: (n3lg n)
19
The Floyd-Warshall Algorithm
Given: 2

Directed, weighted graph G = (V, E) 3 4


8
Negative-weight edges may be 1
2
3
present -4
1
-5
7
No negative-weight cycles could be 5 4
6
present in the graph
Compute:
The shortest paths between all pairs
of vertices in a graph

20
The Structure of a Shortest Path
Vertices in G are given by 6
3
0.5
V = {1, 2, , n}
1 2
3 4
2 1
Consider a path p = v1, v2, , vl 2

5
An intermediate vertex of p is any
vertex in the set {v2, v3, , vl-1}

E.g.: p = 1, 2, 4, 5: {2, 4}

p = 2, 4, 5: {4}

21
The Structure of a Shortest Path
For any pair of vertices i, j V, consider all
paths from i to j whose intermediate vertices
are all drawn from a subset {1, 2, , k}
Find p, a minimum-weight path from these paths
p1
pu j
i

pt

No vertex on these paths has index > k

22
Example

2
4
3
d (0)
45
16
1 8 (1)
3 d 45
2

14
1 -5
7

5 4
6
Example

2
4
3
d ( 2)
45 12
1 8
3
2

14
1 -5
7

5 4
6
Example

2
4
3 d ( 3)
45 6
1 8
3
2

14
1 -5
7

5 4
6
The Structure of a Shortest Path
k is not an intermediate vertex of path p
k
Shortest path from i to j with intermediate
i j
vertices from {1, 2, , k} is a shortest path
from i to j with intermediate vertices from
{1, 2, , k - 1}

k is an intermediate vertex of path p


p1 is a shortest path from i to k p1
k p2
p2 is a shortest path from k to j j
i
k is not intermediary vertex of p1, p2
p1 and p2 are shortest paths from i to k with
vertices from {1, 2, , k - 1}

26
A Recursive Solution (cont.)
dij(k) = the weight of a shortest path from
vertex i to vertex j with all intermediary
vertices drawn from {1, 2, , k}

k=0
dij(k) = wij

27
A Recursive Solution (cont.)
dij(k) = the weight of a shortest path from vertex i to
vertex j with all intermediary vertices drawn from
{1, 2, , k}

k1
Case 1: k is not an intermediate
k
vertex of path p i j

dij(k) = dij(k-1)

28
A Recursive Solution (cont.)
dij(k) = the weight of a shortest path from vertex i to
vertex j with all intermediary vertices drawn from
{1, 2, , k}

k1
Case 2: k is an intermediate

k
vertex of path p j
i
dij(k) = dik(k-1) + dkj(k-1)

29
Computing the Shortest Path Weights

dij(k) = wij if k = 0
min {dij(k-1) , dik(k-1) + dkj(k-1) } if k 1
The final solution: D(n) = (dij(n)):
dij(n) = (i, j) i, j V
j j

+ (k, j)

i i
(i, k)
D(k-1) D(k)

30
The Floyd-Warshall algorithm

Floyd-Warshall(W[1..n][1..n])
01 D W // D(0)
02 for k 1 to n do // compute D(k)
03 for i 1 to n do
04 for j 1 to n do
05 if D[i][k] + D[k][j] < D[i][j] then
06 D[i][j] D[i][k] + D[k][j]
07 return D

Running Time: O(n3)

31
Computing predecessor matrix

How do we compute the predecessor


matrix?
nil if i j or wij
Initialization: p (i, j )
(0)

i if i j and wij <


Updating: p(k)(i,j) = p(k-1)(i,j) if(d(k-1)(i,j)<=d(k-1)(i,k)+(d(k-1)(k,j)
p(k-1)(k,j) if(d(k-1)(i,j) > d(k-1)(i,k)+(d(k-1)(k,j)
Floyd-Warshall(W[1..n][1..n])
01
02 for k 1 to n do // compute D(k)
03 for i 1 to n do
04 for i 1 to n do
05 if D[i][k] + D[k][j] < D[i][j] then
06 D[i][j] D[i][k] + D[k][j]
07 P[i][j] P[k][j]
08 return D
32
Example dij(k) = min {dij(k-1) , dik(k-1) + dkj(k-1) }
D(0) = W D(1)
2 1 2 3 4 5 1 2 3 4 5
3 4 1 0 3 8 -4 1 0 3 8 -4
1
8
3 2 0 1 7 2 0 1 7
2

-4
1
-5
3 4 0 3 4 0
7
5 4 4 2 -5 0 4 2 5 -5 0 -2
6
D(2) 5 6 0 5 6 0
1 2 3 4 5 D(3) D(4)
1 0 3 8 4 -4 0 3 8 4 -4 0 3 -1 4 -4
2 0 1 7 0 1 7 3 0 -4 1 -1
3 4 0 5 11 4 0 5 11 7 4 0 5 3
4 2 5 -5 0 -2 2 -1 -5 0 -2 2 -1 -5 0 -2
5 6 0 6 0 8 5 1 6 0 33
Example dij(k) = min {dij(k-1) , dik(k-1) + dkj(k-1) }
D(5) P(5)
2 1 2 3 4 5 1 2 3 4 5
3 4 1 0 1 -3 2 -4 1 - 3 4 5 1
8
1
2
3 2 3 0 -4 1 -1 2 4 - 4 2 1
-4 7
1
-5
3 7 4 0 5 3 3 4 3 - 2 1
5 4 4 2 -1 -5 0 -2 4 4 3 4 - 1
6
5 8 5 1 6 0 5 4 3 4 5 -

Source: 5, Destination: 1
Shortest path: 8
Path: 5 1 : 541: 5->41: 5->4->1

Source: 1, Destination: 3
Shortest path: -3
Path: 1 3 : 143: 1543: 1->5->4->3
In Class Exercise

2 D (0) W
4
3 1 2 3 4 5

1 0 3 8 -4
1 8
3 2 0 1 7
2
3 4 0
-4
1 -5 4 2 -5 0
7 5 6 0
5 4
6
In Class Exercise

2 D(1)
4
3 1 2 3 4 5

1 0 3 8 -4
1 8
3 2 0 1 7
2
3 4 0
-4
1 -5 4 2 5 -5 0 -2
7 5 6 0
5 4
6
In Class Exercise

2 D ( 2)
4
3 1 2 3 4 5

1 0 3 8 4 -4
1 8
3 2 0 1 7
2
3 4 0 5 11
-4
1 -5 4 2 5 -5 0 -2
7 5 6 0
5 4
6
In Class Exercise

2 D ( 3)
4
3 1 2 3 4 5

1 0 3 8 4 -4
1 8
3 2 0 1 7
2
3 4 0 5 11
-4
1 -5 4 2 -1 -5 0 -2
7 5 6 0
5 4
6
In Class Exercise

2 D ( 4)
4
3 1 2 3 4 5

1 0 3 -1 4 -4
1 8
3 2 3 0 -4 1 -1
2
3 7 4 0 5 3
-4
1 -5 4 2 -1 -5 0 -2
7 5 8 5 1 6 0
5 4
6
In Class Exercise

2 D (5)
4
3 1 2 3 4 5

1 0 1 -3 2 -4
1 8
3 2 3 0 -4 1 -1
2
3 7 4 0 5 3
-4
1 -5 4 2 -1 -5 0 -2
7 5 8 5 1 6 0
5 4
6
PrintPath for Warshalls Algorithm
PrintPath(s, t)
{
if(P[s][t]==nil){
print(No path);
return;
}
else if (P[s][t]==s){
print(s);
}
else{
print_path(s,P[s][t]);
print_path(P[s][t], t);
}
}
Print (t) at the end of the PrintPath(s,t) 41

You might also like