DynamicProgramming Part3 FEUP
DynamicProgramming Part3 FEUP
Design of Algorithms
Dynamic Programming
All-Pairs Shortest Paths Problem
Recursive Formulation and Optimality Principle
Algorithms of Floyd-Warshall & Johnson
Copyright 2024, Pedro C. Diniz, all rights reserved.
Students enrolled in the DA class at Faculdade de Engenharia da Universidade do Porto (FEUP)
have explicit permission to make copies of these materials for their personal use.
All-Pairs Shortest Paths: Observations
• Goal: Find All-Pairs Shortest Paths
• If non negative weights
– Use Dijkstra’s Algorithm, assuming each vertex as source
• O(V E log V) (i.e., O(V3 logV) if graph is dense)
• If negative weights
– Use Bellman-Ford-Moore Algorithm, assuming each vertex as source:
• O(V2E) (i.e., O(V4) if graph is dense)
ì0 if i = j
ï
wij = íweight of edge (i, j) if i ¹ j and (i, j ) Î E
ï¥ if i ¹ j and (i, j ) Ï E
î
• Distance Matrix (! × !) D = (dij)
– dij is the added weight of the shortest path
between i and , i.e., dij = d(vi,vj)
Vp ,i = {j Î V : p ij ¹ NIL}È {}
i
!",$ = { '$( : * ∈ ,",$ − {.}}
Nodes from 1 to k
Analysis and Synthesis of Algorithms 5
APSPs - Floyd-Warshall Algorithm
Floyd-Warshall(W)
n = rows[W];
D(0) = W;
for k = 1 to n do
for i = 1 to n do
for j = 1 to n do
(
d ij(k ) = min d ij(k -1) , d ik(k -1) + d kj(k -1) )
return D(n)
• Complexidade: Q(n3)
p1
p2
k
i j
Nodes from 1 to k-1
3 2
7
-4
1 5
1
8 2 6
4
3 4
-5
3 4
-5
3 4
-5
3 4
-5
8 2 6
4 æ0 3 8
ç
4 - 4ö
÷
æ nil 1
ç
1 2 1 ö
÷
ç¥ 0 ¥ 1 7 ÷ ç nil nil nil 2 2÷
D ( 2) = ç¥ 4 0 5 11 ÷ P ( 2) = ç nil 3 nil 2 2÷
ç ÷ ç ÷
3 4 ç 2 5 -5 0 - 2÷ ç 4 1 4 nil 1 ÷
ç nil nil nil 5 nil ÷
-5 ç¥ ¥ ¥
è 6 0 ÷ø è ø
8 2 6
4 æ0 3 8 4 - 4ö æ nil 1
ç
1 2 1 ö
÷
ç ÷ ç nil nil nil 2 2÷
ç¥ 0 ¥ 1 7 ÷
= ç¥ 4 0 P ( 2) = ç nil 3 nil 2 2÷
D ( 2) 5 11 ÷ ç ÷
3 4 ç
ç 2 5 -5
÷
0 - 2÷ ç 4 1 4 nil 1 ÷
-5 ç¥ ¥ ¥
è 6 0 ÷ø
ç nil nil nil 5 nil ÷
è ø
æ0 3 8 4 - 4ö æ nil 1 1 2 1 ö
ç ÷ ç ÷
ç ¥ 0 ¥ 1 7 ÷ ç nil nil nil 2 2÷
D ( 3) = ç¥ 4 0 5 11 ÷ P ( 3) = ç nil 3 nil 2 2÷
ç ÷ ç ÷
ç 2 -1 - 5 0 - 2÷ ç 4 3 4 nil 1 ÷
ç¥ ¥ ¥ 6 0 ÷ø ç nil nil nil 5 nil ÷ø
è è
3 4
-5
• Algorithm:
– Assign each Edge Weight 1 and use Floyd-Warshall
algorithm
• If dij ¹ ¥, then (i, j) Î E*
• Complexity: Q(n3)
1 2
3 4
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T =ç
1 0 1 1÷
ç ÷
ç0 1 0 1 ÷ø
è
1 2 æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T (0) =ç
0 1 1 0÷
ç ÷
ç1 0 1 1 ÷ø
è
3 4
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T =ç
0 1 1 0÷
ç ÷
ç1 0 1 1 ÷ø
è
æ1 0 0 0ö æ1 0 0 0ö
ç ÷ ç ÷
1 2 ç0 1 1 1÷ ç0 1 1 1÷
T (0) =ç T (1) =ç
0 1 1 0÷ 0 1 1 0÷
ç ÷ ç ÷
ç1 0 1 1 ÷ø ç1 0 1 1 ÷ø
è è
3 4
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T =ç
0 1 1 0÷
ç ÷
ç1 0 1 1 ÷ø
è
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
3 4 T ( 2) =ç
0 1 1 1÷
ç ÷
ç1 0 1 1 ÷ø
è
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T =ç
0 1 1 0÷
ç ÷
ç1 0 1 1 ÷ø
è
æ1 0 0 0ö æ1 0 0 0ö
ç ÷ ç ÷
ç0 1 1 1÷ ç0 1 1 1÷
T ( 2) =ç T ( 3) =ç
3 4 0 1 1 1÷ 0 1 1 1÷
ç ÷ ç ÷
ç1 0 1 1 ÷ø ç1 1 1 1 ÷ø
è è
æ1 0 0 0ö
ç ÷
ç0 1 1 1÷
T =ç
0 1 1 0÷
ç ÷
ç1 0 1 1 ÷ø
è
æ1 0 0 0ö æ1 0 0 0ö
ç ÷ ç ÷
ç0 1 1 1÷ ç0 1 1 1÷
1 2 T (0) =ç T (1) =ç
0 1 1 0÷ 0 1 1 0÷
ç ÷ ç ÷
ç1 0 1 1 ÷ø ç1 0 1 1 ÷ø
è è
æ1 0 0 0ö æ1 0 0 0ö
ç ÷ ç ÷
ç0 1 1 1÷ ç0 1 1 1÷
T ( 2) =ç T ( 3) =ç
3 4 0 1 1 1÷ 0 1 1 1÷
ç ÷ ç ÷
ç1 0 1 1 ÷ø ç1 1 1 1 ÷ø
è è
æ1 0 0 0ö
æ1 0 0 0ö ç ÷
ç ÷ ç1 1 1 1÷
ç0 1 1 1÷ T ( 4) =ç
T =ç 1 1 1 1÷
ç ÷
0 1 1 0÷ ç1 1 1 1 ÷ø
ç ÷ è
ç1 0 1 1 ÷ø
è