85
Premaster Course Algorithms 1 Chapter 6: Shortest Paths Christian Scheideler SS 2019

Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

  • Upload
    others

  • View
    23

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Premaster Course Algorithms 1

Chapter 6: Shortest Paths

Christian ScheidelerSS 2019

Page 2: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Basic Graph Algorithms

Overview:• Shortest paths in DAGs• Dijkstra‘s algorithm• Bellman-Ford algorithm• Johnson‘s method

SS 2019 Chapter 6 2

Page 3: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 3

Shortest Paths

Central question: Determine fastest way to get from s to t.

s

t

Page 4: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 4

Shortest PathsShortest Path Problem:• directed/undirected graph G=(V,E)• edge costs c:E→ℝ

• SSSP (single source shortest path):find shortest paths from a source node toall other nodes

• APSP (all pairs shortest path):find shortest paths between all pairs ofnodes

Page 5: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 5

Shortest Paths

-∞

+∞ 0

-∞ -∞

-∞

2 -3

-1 -3s

0

-1 -2

-2

5

2-1

0

0

-2

42

δ(s,v): distance between s and v

δ(s,v) = -∞ path of arbitrarily low cost from s to v∞ no path from s to v

min{ c(p) | p is a path from s to v}

Page 6: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 6

Shortest Paths

2 -3

-1 -3-1 -2

-2

5

2

When is the distance -∞?If there is a negative cycle:

s vC c(C)<0

-∞

+∞ 0

-∞ -∞

-∞ s

0-1

0

0

-2

42

Page 7: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 7

Shortest Paths

Negative cycle necessary and sufficient for a distance of -∞.

Negative cycle sufficient:

Cost for i-fold traversal of C:c(p) + i⋅c(C) + c(q)

For i→∞ this expression approaches -∞.

s vC c(C)<0path p path q

Page 8: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 8

Shortest Paths

Negative cycle necessary and sufficient for a distance of -∞.

Negative cycle necessary:• l: minimal cost of a simple path from s to v• suppose there is a non-simple path p from s to v with cost c(r)<l

• p non-simple: continuously remove a cycle C till weare left with a simple path p´

• since c(p) < l but c(p´)≥l due to the definition of l, theremust be a cycle C with c(C)<0

Page 9: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsDirected acyclic graph (DAG):• DAG with edge costs 1: breadth-first search

( : edges of BFS-tree)

SS 2019 Chapter 6 9

s

1

1

2

3

2

2 3

3

4

4

Page 10: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsDirected acyclic graph (DAG):• DAG with arbitrary edge costs: breadth-first

search does not work any more!

SS 2019 Chapter 6 10

s

1

2

6

3

5

2 4

7

8

9

1

2

1

4

3

2

1 1

2

1

2

1

21

Page 11: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsDirected acyclic graph (DAG):• Correct distances:

SS 2019 Chapter 6 11

s

1

2

4

3

5

2 4

4

5

6

1

2

1

4

3

2

1 1

2

1

2

1

21

Page 12: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsIdea: use the fact that nodes in DAGs can betopologically sorted (i.e., all edgessatisfy a<b)

SS 2019 Chapter 6 12

a b

s

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

Page 13: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsTopological Sorting: While there are nodes with indegree 0, remove any such node and its incident edges (which maycreate new nodes of indegree 0). Number removed nodesin consecutive fashion.

SS 2019 Chapter 6 13

s

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

Page 14: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsTopological Sorting has runtime O(|V|+|E|) when using a simple queue as data structure that holds all nodes withindegree 0.

SS 2019 Chapter 6 14

s

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

Page 15: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsAfter the nodes have been topologically sorted, set thedistance d[s] to 0 and the distances d[v] of all other nodes vto ∞.

SS 2019 Chapter 6 15

0

∞ ∞

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

Page 16: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsNext, consider the nodes u in the order of the topologicalsorting and perform distance updates for all nodesreachable from u.

SS 2019 Chapter 6 16

s

1

2

6

3

5

2 4

6

5

6

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

4

4

Page 17: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGsDistance update for node u: for all edges (u,v)∈E, set d[v] to min{d[v],d[u]+c(u,v)}.

SS 2019 Chapter 6 17

s

1

2

4

3

5

2 4

4

5

6

1

2

1

4

3

2

1 1

2

1

2

1

21

1

2

3

4 5

6

7 8

9

10

11

Page 18: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGs

Summary:• First, compute a topological sorting of the

nodes (runtime: O(|V|+|E|) ).• Then, update the distances in the order of

the topological sorting of the nodes.Runtime: O(|V|+|E|).

Why does that work?

SS 2019 Chapter 6 18

Page 19: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGs• Consider a shortest path from s to v.• This has a topological sorting with ti<ti+1 for all i.

• A visit in topological order therefore results in thecorrect distances (di = ∑j≤i ci).

SS 2019 Chapter 6 19

0 d1 d2 d3 d4s v

t1 t2 t3 t4 t5

c1 c2 c3 c4

Page 20: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest Paths in DAGs• Consider a shortest path from s to v.• This has a topological sorting with ti<ti+1 for all i.

Remark: no node i along the shortest path to v canhave a distance <di to s since otherwise there is a shorter path to v.SS 2019 Chapter 6 20

0 d1 d2 d3 d4s v

t1 t2 t3 t4 t5

c1 c2 c3 c4

Page 21: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 21

Shortest Paths

General Strategy:• Initially, set d(s):=0 and d(v):=∞ for all other

nodes• Visit nodes in an order that ensures that at least

one shortest path from s to every v is visited in the order of its nodes

• For every visited v, update distances to nodes wwith (v,w)∈E, i.e., d(w):= min{d(w), d(v)+c(v,w)}

Page 22: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest PathsNext step: compute shortest paths for arbitrarygraphs with positive edge costs.

Problem: visiting nodes of a shortest path in theright order

Solution: visit nodes in the order of theirdistance to s.

SS 2019 Chapter 6 22

0 d1 d2 d3 d4s v

Page 23: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest PathsAssumption: all edge costs are positive. (Actually, Dijkstra also works if edge costs are non-negative.)

Dijkstra‘s algorithm:1. Let S be the set of already processed nodes.2. Initially, S:={s} and d[s]:=03. while V≠S do4. choose node v∈V\S with at least one edge

from S and d[v]:= minu∈S:(u,v)∈E d[u] + c(u,v) being minimal among all v∈V\S

5. add v to S

SS 2019 Chapter 6 23

Page 24: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest PathsAssumption: all edge weights are positive.

Dijkstra‘s algorithm:1. Let S be the set of already processed nodes.2. Initially, S:={s} and d[s]:=03. while V≠S do4. choose node v∈V\S with at least one edge

from S and d[v]:= minu∈S:(u,v)∈E d[u] + c(u,v) being minimal among all v∈V\S

5. add v to S

SS 2019 Chapter 6 24

How to do that efficiently??

Page 25: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

Shortest PathsAssumption: all edge weights are positive.

Dijkstra‘s algorithm:1. Let S be the set of already processed nodes.2. Initially, S:={s} and d[s]:=03. while V≠S do4. choose node v∈V\S with at least one edge

from S and d[v]:= minu∈S:(u,v)∈E d[u] + c(u,v) being minimal among all v∈V\S

5. add v to S

SS 2019 Chapter 6 25

Use heap for that!

Page 26: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

26

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4 6s 2

5

a b

c d

26SS 2019 Chapter 6 26

Shortest Paths

DK(Q,v,d): DecreaseKey operationReduces value d[v] of v in Q to d and performs heapifyUp torepair heap property from position of v.

Here, edge cost of e: w(e)

Page 27: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

27

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 2∞

∞ ∞

∞∞a b

c d

27SS 2019 Chapter 6 27

Shortest Paths

Page 28: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

28

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞∞a b

c d

s

a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 29: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

29

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞∞a b

c d

s

a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 30: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

30

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞∞a b

c d

d

a b

c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 31: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

31

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞∞a b

c d

d

a b

c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 32: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

32

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞∞a b

c d

d

a b

c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 33: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

33

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞2a b

c d

a

d b

c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 34: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

34

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

∞ ∞

∞2a b

c d

a

d b

c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 35: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

35

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

∞2a b

c d

a

c b

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 36: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

36

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

∞2a b

c d

a

c b

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 37: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

37

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

∞2a b

c d

c

d b

Q:

SS 2019 Chapter 6

Shortest Paths

Page 38: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

38

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

∞2a b

c d

c

d b

Q:

SS 2019 Chapter 6

Shortest Paths

Page 39: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

39

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

42a b

c d

b

d c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 40: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

40

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

7 ∞

42a b

c d

b

d c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 41: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

41

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

b

d c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 42: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

42

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

b

d c

Q:

SS 2019 Chapter 6

Shortest Paths

Page 43: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

43

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

c

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 44: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

44

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

c

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 45: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

45

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

c

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 46: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

46

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

c

d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 47: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

47

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 48: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

48

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 49: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

49

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 50: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

50

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 51: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

51

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 52: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

52

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 53: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

53

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 ∞

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 54: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

54

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 55: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

55

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

dQ:

SS 2019 Chapter 6

Shortest Paths

Page 56: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

56

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 57: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

57

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 58: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

58

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 59: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

59

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←BuildHeap(V)3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

21

7

8

2

4

5

6s 20

4 9

42a b

c d

Q:

SS 2019 Chapter 6

Shortest Paths

Page 60: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

60

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←V3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

Runtime:• Q← BuildHeap(V) (sets up heap): O(|V|)

21

7

8

2

4

5

6s 20

4 9

42a b

c d

SS 2019 Chapter 6

Shortest Paths

Page 61: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

61

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←V3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

Runtime:• deleteMin und DecreaseKey: O(log |V|)

21

7

8

2

4

5

6s 20

4 9

42a b

c d

SS 2019 Chapter 6

Shortest Paths

Page 62: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

62

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←V3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

Runtime:• deleteMin: |V| times, DecreaseKey: |E| times

21

7

8

2

4

5

6s 20

4 9

42a b

c d

SS 2019 Chapter 6

Shortest Paths

Page 63: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

63

Dijkstra(G,w,s)1. for each vertex v∈V do d[v]←∞; π[v]←nil2. d[s]←0; S←∅; Q←V3. while Q≠∅ do4. u←deleteMin(Q)5. S←S∪{u}6. for each vertex v∈Adj[u] do7. if d[v]>d[u]+w(u,v) then DK(Q,v,d[u]+w(u,v)); π[v]←u

Runtime:• altogether, O((|V|+|E|) log |V|)

21

7

8

2

4

5

6s 20

4 9

42a b

c d

SS 2019 Chapter 6

Shortest Paths

Page 64: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 64

Shortest Paths in Arbitrary Graphs

General Strategy:• Initially, set d(s):=0 and d(v):=∞ for all other

nodes• Visit nodes in an order that ensures that at least

one shortest path from s to every v is visited in the order of its nodes

• For every visited v, update distances to nodes wwith (v,w)∈E, i.e., d(w):= min{d(w), d(v)+c(v,w)}

Page 65: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 65

Bellman-Ford AlgorithmConsider graphs with arbitrary edge costs.

Problem: visit nodes along a shortest path from sto v in the right order

Dijkstra´s algorithm cannot be used in this case any more.

0 d1 d2 d3 d4s v

Page 66: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 66

Bellman-Ford Algorithm

Example:

Node v has wrong distance value!

s

3 -4

-12

11

2

3

0

-1

v

Page 67: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 67

Bellman-Ford Algorithm

Strategy: visit (n-1)-times all nodes in the graph and update distances. Then all shortest paths have been considered.

0 d1 d2 d3 d4s v

Run 1 2 3 4

Page 68: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 68

Bellman-Ford AlgorithmProblem: detection of negative cycles

Conclusion: in a negative cycle, distance of at least one node keeps decreasing in each round, starting with a round <n

s ∞

1

1 -1

0-2

1

2

1

1

-1

0

-1

Page 69: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 69

Bellman-Ford AlgorithmLemma 1:• No decrease of a distance in a round

(i.e., d[v]+c(v,w)≥d[w] for all w):Done because d[w]=δ(s,w) for all w

• Decrease of a distance even in n-th round (i.e., d[v]+c(v,w)<d[w] for some w):There are negative cycles for all of these nodes, so node w has distance δ(s,w)=-∞. If this is true for w, then also for all nodes reachable from w.

Proof: exercise

Page 70: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 70

Bellman-Ford AlgorithmProcedure BellmanFord(s: NodeId)

d:=<∞,…,∞>: NodeArray of ℝ∪{-∞, ∞}parent:=<⊥,…, ⊥>: NodeArray of NodeIdd[s]:=0; parent[s]:=sfor i:=1 to n-1 do // update distances for n-1 rounds

forall e=(v,w)∈E doif d[w] > d[v]+c(e) then // better distance?

d[w]:=d[v]+c(e); parent[w]:=vforall e=(v,w) ∈E do // still better in n-th round?

if d[w] > d[v]+c(e) then infect(w)

Procedure infect(v) // set -∞-distance starting with vif d[v]>-∞ then

d[v]:=-∞forall (v,w)∈E do infect(w)

Page 71: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 71

Bellman-Ford AlgorithmRuntime: O(n⋅m)

Improvements:• Check in each update round if we still

have d[v]+c[v,w]<d[w] for some (v,w)∈E.No: done!

• Visit in each round only those nodes wwith some edge (v,w)∈E where d[v] has decreased in the previous round.

Page 72: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 72

All Pairs Shortest Paths

Assumption: graph with arbitrary edge costs, but no negative cycles

Naive Strategy for a graph with n nodes: run n times Bellman-Ford Algorithm (once for every node as the source)

Runtime: O(n2 m)

Page 73: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 73

All Pairs Shortest PathsBetter Strategy: Reduce n Bellman-Ford

applications to n Dijkstra applications

Problem: we need non-negative edge costs

Solution: convert edge costs into non-negative edge costs without changing the shortest paths (not so easy!)

Page 74: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 74

All Pairs Shortest Paths

Counter example to additive increase by c:

before cost +1 everywhere

s

v

1 -1

12

s

v

2 0

23

: shortest path

Page 75: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 75

Johnson´s Method• Let φ:V→ℝ be a function that assigns a potential

to every node.• The reduced cost of e=(v,w) is:

r(e) := c(e) + φ(v) - φ(w)

Lemma 2: Let p and q be paths connecting the same endpoints in G. Then for every potential φ: r(p)<r(q) if and only if c(p)<c(q).

Page 76: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 76

Johnson´s MethodLemma 2: Let p and q be paths connecting the

same endpoints in G. Then for every potential φ: r(p)<r(q) if and only if c(p)<c(q).

Proof: Let p=(v1,…,vk) be an arbitrary path and ei=(vi,vi+1) for all i. It holds:

r(p) = ∑i r(ei)= ∑i (φ(vi) + c(ei) - φ(vi+1))= φ(v1) + c(p) - φ(vk)

Page 77: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 77

Johnson´s MethodLemma 3: Suppose that G has no negative cycles

and that all nodes can be reached from s. Let φ(v)=δ(s,v) for all v∈V. With this φ, r(e)≥0 for all e.

Proof:• According to our assumption, δ(s,v)∈ℝ for all v• We know: for every edge e=(v,w), δ(s,v)+c(e)≥δ(s,w) (otherwise, we have a contradiction to the definition of δ!)

• Therefore, r(e) = δ(s,v) + c(e) - δ(s,w) ≥ 0

Page 78: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 78

Johnson´s Method1. Create new node s and new edges (s,v) for all

v in G with c(s,v)=0 (all nodes reachable!)2. Compute δ(s,v) using Bellman-Ford and set

φ(v):=δ(s,v) for all v3. Compute the reduced costs r(e)4. Compute for all nodes v the distances δ(v,w)

using Dijkstra with the reduced costs on graph G without node s

5. Compute the correct distances δ(v,w) via δ(v,w):=δ(v,w)+φ(w)-φ(v)

Page 79: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 79

Johnson´s Method

a

b

d

c1 -1

12

a

b

c

d

Example:2

1

1

-1

Page 80: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 80

Johnson´s Method

s

a

b

c

d

Step 1: create new source s2

1

1

-1

0

0

0

0

Page 81: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 81

Johnson´s Method

s

a

b

c

d

Step 2: apply Bellman-Ford to s2 1

1

-1

0

0

0

0

φ(a)=0

φ(b)=0

φ(c)=-1

φ(d)=0

Page 82: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 82

Johnson´s Method

a

b

c

d

Step 3: compute r(e)-values

The reduced cost of e=(v,w)is:

r(e) := φ(v) + c(e) - φ(w)

2 0

1

0

φ(a)=0

φ(b)=0

φ(c)=-1

φ(d)=0

Page 83: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 83

Johnson´s Method

a

b

c

d

Step 4: compute all distancesδ(v,w) via Dijkstra 2 0

1

0

φ(a)=0

φ(b)=0

φ(c)=-1

φ(d)=0

δ a b c da 0 2 3 3b 1 0 1 1c 0 2 0 3d 0 2 0 0

Page 84: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 84

Johnson´s Method

a

b

c

d

Step 5: compute correctdistances via the formulaδ(v,w)=δ(v,w)+φ(w)-φ(v)

2 1

1

-1

φ(a)=0

φ(b)=0

φ(c)=-1

φ(d)=0

δ a b c da 0 2 2 3b 1 0 0 1c 1 3 0 4d 0 2 -1 0

Page 85: Premaster Course Algorithms 1 Chapter 6: Shortest Paths€¦ · SS 2019. Basic Graph Algorithms Overview: • Shortest paths in DAGs • Dijkstra‘s algorithm • Bellman-Ford algorithm

SS 2019 Chapter 6 85

All Pairs Shortest PathsRuntime of Johnson´s Method:

O(TBellman-Ford(n,m) + n⋅TDijkstra(n,m))= O(n⋅m + n(n log n + m))= O(n⋅m + n2 log n)

when using Fibonacci heaps.

• Problem with the runtime bound: m can bequite large in the worst case (up to ~n2)

• Nevertheless, best known bound: O(n⋅m)