Graph Algorithms Shortest Paths in DAGs

Graph Algorithms
Shortest path problems
[Adapted from K.Wayne]
Graph Algorithms
Shortest path problems
[Adapted from K.Wayne]
Graph Algorithms
Shortest path problems
[Adapted from K.Wayne]
Graph Algorithms
Single-Source Shortest Paths
Given graph (directed or undirected) G = (V,E) with
weight function w: E  R and a vertex sV,
find for all vertices vV the minimum possible weight for
path from s to v.
We will discuss two general case algorithms:
• Dijkstra's (positive edge weights only)
• Bellman-Ford (positive end negative edge weights)
If all edge weights are equal (let's say 1), the problem
is solved by BFS in (V+E) time.
Graph Algorithms
Dijkstra’s Algorithm - Relax
Relax(vertex u, vertex v, weight w)
if d[v] > d[u] + w(u,v) then
d[v]  d[u] + w(u,v)
p[v]  u
[Adapted from K.Wayne]
Graph Algorithms
Dijkstra’s Algorithm - Idea
[Adapted from K.Wayne]
Graph Algorithms
Dijkstra’s Algorithm - SSSP-Dijkstra
SSSP-Dijkstra(graph (G,w), vertex s)
InitializeSingleSource(G, s)
S
Q  V[G]
while Q  0 do
u  ExtractMin(Q)
S  S  {u}
for v  Adj[u] do
Relax(u,v,w)
InitializeSingleSource(graph G, vertex s)
for v  V[G] do
d[v]  
p[v]  0
d[s]  0
Graph Algorithms
Dijkstra’s Algorithm - Example
1
10
2
9
3
4
7
5
2
6
Graph Algorithms
Dijkstra’s Algorithm - Example

10
2
0
5
1

9
3
4
6
7

2

Graph Algorithms
Dijkstra’s Algorithm - Example
10
10
2
0
1

9
3
4
6
7
5
5
2

Graph Algorithms
Dijkstra’s Algorithm - Example
10
10
2
0
1

9
3
4
6
7
5
5
2

Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
14
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
14
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
13
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
13
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
9
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm - Example
8
10
2
0
1
9
9
3
4
6
7
5
5
2
7
Graph Algorithms
Dijkstra’s Algorithm Complexity
executed (V) times
(E) times in total
(V)
(1) ?
SSSP-Dijkstra(graph (G,w), vertex s)
InitializeSingleSource(G, s)
S
Q  V[G]
while Q  0 do
u  ExtractMin(Q)
S  S  {u}
for u  Adj[u] do
Relax(u,v,w)
InitializeSingleSource(graph G, vertex s)
for v  V[G] do
d[v]  
p[v]  0
d[s]  0
Relax(vertex u, vertex v, weight w)
if d[v] > d[u] + w(u,v) then
d[v]  d[u] + w(u,v)
p[v]  u
Graph Algorithms
Dijkstra’s Algorithm - Complexity
InitializeSingleSource
TI(V,E) = (V)
Relax
TR(V,E) = (1)?
SSSP-Dijkstra
T(V,E) = TI(V,E) + (V) + V (log V) + E TR(V,E) =
= (V) + (V) + V (log V) + E (1) = (E + V log V)
Graph Algorithms
Dijkstra’s Algorithm - Complexity
[Adapted from K.Wayne]
Graph Algorithms
Dijkstra’s Algorithm - Correctness
[Adapted from K.Wayne]
Graph Algorithms
Dijkstra’s Algorithm - negative weights?
[Adapted from K.Wayne]
Graph Algorithms
Bellman-Ford Algorithm - negative cycles?
[Adapted from K.Wayne]
Graph Algorithms
Bellman-Ford Algorithm - Idea
[Adapted from X.Wang]
Graph Algorithms
Bellman-Ford Algorithm - SSSP-BellmanFord
SSSP-BellmanFord(graph (G,w), vertex s)
InitializeSingleSource(G, s)
for i  1 to |V[G]  1| do
for (u,v)  E[G] do
Relax(u,v,w)
for (u,v)  E[G] do
if d[v] > d[u] + w(u,v) then
return false
return true
Graph Algorithms
Bellman-Ford Algorithm - Example
-2
5
6
-3
8
2
7
9
-4
7
Graph Algorithms
Bellman-Ford Algorithm - Example
-2
6

-3
8
0
7
2


5
9
-4
7

Graph Algorithms
Bellman-Ford Algorithm - Example
-2
6
6
-3
8
0
2
7
7

5
9
-4
7

Graph Algorithms
Bellman-Ford Algorithm - Example
-2
6
6
5
-3
8
0
2
7
7
4
9
7
-4
2
Graph Algorithms
Bellman-Ford Algorithm - Example
-2
6
2
5
-3
8
0
2
7
7
4
9
7
-4
2
Graph Algorithms
Bellman-Ford Algorithm - Example
-2
6
2
5
-3
8
0
2
7
7
4
9
-4
7
-2
Graph Algorithms
Bellman-Ford Algorithm - Complexity
executed (V) times
(E)
(E)
SSSP-BellmanFord(graph (G,w), vertex s)
InitializeSingleSource(G, s)
for i  1 to |V[G]  1| do
for (u,v)  E[G] do
Relax(u,v,w)
(1)
for (u,v)  E[G] do
if d[v] > d[u] + w(u,v) then
return false
return true
Graph Algorithms
Bellman-Ford Algorithm - Complexity
InitializeSingleSource
TI(V,E) = (V)
Relax
TR(V,E) = (1)?
SSSP-BellmanFord
T(V,E) = TI(V,E) + V E TR(V,E) + E =
= (V) + V E (1) + E =
= (V E)
Graph Algorithms
Bellman-Ford Algorithm - Correctness
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Bellman-Ford Algorithm - Correctness
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Bellman-Ford Algorithm - Correctness
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Bellman-Ford Algorithm - Correctness
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Shortest Paths in DAGs - SSSP-DAG
SSSP-DAG(graph (G,w), vertex s)
topologically sort vertices of G
InitializeSingleSource(G, s)
for each vertex u taken in topologically sorted order do
for each vertex v  Adj[u] do
Relax(u,v,w)
Graph Algorithms
Shortest Paths in DAGs - Example
6
5
2
3
1
7
-1
-2
4
2
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2

1
7

-1

-2
4
2

Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2

1
7

-1

-2
4
2

Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2

1
7

-1

-2
4
2

Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1

-2
4
2

Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
6
-2
4
2
4
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
6
-2
4
2
4
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
5
-2
4
2
4
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
5
-2
4
2
4
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
5
-2
4
2
3
Graph Algorithms
Shortest Paths in DAGs - Example
6

5
0
3
2
2
1
7
6
-1
5
-2
4
2
3
Graph Algorithms
Shortest Paths in DAGs - Complexity
SSSP-DAG(graph (G,w), vertex s)
topologically sort vertices of G
InitializeSingleSource(G, s)
for each vertex u taken in topologically sorted order do
for each vertex v  Adj[u] do
Relax(u,v,w)
T(V,E) = (V + E) + (V) + (V) + E (1) = (V + E)
Graph Algorithms
Application of SSSP - currency conversion
[Adapted from K.Wayne]
Graph Algorithms
Application of SSSP - currency conversion
[Adapted from K.Wayne]
Graph Algorithms
Application of SSSP - currency conversion
[Adapted from K.Wayne]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
Application of SSSP - constraint satisfaction
[Adapted from T.Cormen, C.Leiserson, R. Rivest]
Graph Algorithms
All-Pairs Shortest Paths
Given graph (directed or undirected) G = (V,E) with
weight function w: E  R find for all pairs of vertices
u,v  V the minimum possible weight for path from u to v.
[Adapted from M.Jacome]
Graph Algorithms
Floyd-Warshall Algorithm - Idea
[Adapted from M.Jacome]
Graph Algorithms
Floyd-Warshall Algorithm - Idea
[Adapted from M.Jacome]
Graph Algorithms
Floyd-Warshall Algorithm - Idea
ds,t(i) – the shortest path from s to t containing only vertices
v1, ..., vi
ds,t(0) = w(s,t)
ds,t(k) =
w(s,t)
if k = 0
min{ds,t(k-1), ds,k(k-1) + dk,t(k-1)}
if k > 0
Graph Algorithms
Floyd-Warshall Algorithm - Algorithm
FloydWarshall(matrix W, integer n)
for k  1 to n do
for i  1 to n do
for j  1 to n do
dij(k)  min(dij(k-1), dik(k-1) + dkj(k-1))
return D(n)
Graph Algorithms
Floyd-Warshall Algorithm - Example
W
3
1
2
7
4
1
3
8
2
-4
5
6
-5
4
0


2

3
0
4


8

0
-5


1

0
6
-4
7


0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(0)
D(0)
0


2

3
0
4


8

0
-5


1

0
6
-4
7


0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(1)
D(1)
0


2

3
0
4
5

8

0
-5


1

0
6
-4
7

-2
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
1
0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(2)
D(2)
0


2

3
0
4
5

8

0
-5

4
1
5
0
6
-4
7
11
-2
0
0
0
0
0
0
1
0
0
0
2
0
2
0
0
0
0
2
1
0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(3)
D(3)
0


2

3
0
4
-1

8

0
-5

4
1
5
0
6
-4
7
11
-2
0
0
0
0
0
0
3
0
0
0
2
0
2
0
0
0
0
2
1
0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(4)
D(4)
0
3
7
2
8
3
0
4
-1
5
-1
-4
0
-5
1
4
1
5
0
6
-4
-1
3
-2
0
0
4
4
0
4
0
0
0
3
3
4
4
0
0
4
2
0
2
0
0
0
1
1
1
0
Graph Algorithms
Floyd-Warshall Algorithm - Example
(5)
D(5)
0
3
7
2
8
3
0
4
-1
5
-1
-4
0
-5
1
2
1
5
0
6
-4
-1
3
-2
0
0
4
4
0
4
0
0
0
3
3
4
4
0
0
4
5
0
2
0
0
0
1
1
1
0
Graph Algorithms
Floyd-Warshall Algorithm - Extracting the shortest paths
[Adapted from S.Cheng]
Graph Algorithms
Floyd-Warshall Algorithm - Complexity
FloydWarshall(matrix W, integer n)
for k  1 to n do
for i  1 to n do
for j  1 to n do
dij(k)  min(dij(k-1), dik(k-1) + dkj(k-1))
return D(n)
3 for cycles, each executed exactly n times
T(V,E) = (n3) = (V3)
Graph Algorithms
All-Pairs Shortest Paths -Johnson's algorithm
[Adapted from M.Jacome]
Graph Algorithms
All-Pairs Shortest Paths - Reweighting
[Adapted from M.Jacome]
Graph Algorithms
All-Pairs Shortest Paths - Reweighting
[Adapted from M.Jacome]
Graph Algorithms
All-Pairs Shortest Paths - Reweighting
[Adapted from M.Jacome]