bellman-ford and dijkstra

126
s b c d a e g f j h 12 2 5 1 1 4 2 1 5 6 3 4 2 2 Given directed graph with non-negative edge lengths l u,v . Compute all shortest paths from s to every other vertex.

Upload: others

Post on 28-Nov-2021

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Given directed graph with non-negative edge lengths lu,v. Compute all shortest paths from s to every other vertex.

Page 2: Bellman-Ford and Dijkstra

Disjkstra(s)

Set all vertices v undiscovered, d(v)= ∞ Set d(s) = 0, mark s discovered. while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 3: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

Page 4: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 5: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 6: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 7: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

3

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 8: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

3

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 9: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

3

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 10: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

3

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 11: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 12: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 13: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 14: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

8

5

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 15: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 16: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 17: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 18: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 19: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 20: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 21: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

13

12

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 22: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

13

12

3

8

5

10

while there is edge from discovered vertex to undiscovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 23: Bellman-Ford and Dijkstra

Disjkstra(s) Set all vertices v undiscovered, d(v)= ∞ Set d(s) = 0, mark s discovered. while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Correctness analysis:Prove that if v is discovered d(v) is distance of v from s.Initially this is true, since d(s)=0, and s is only discovered vertex.Let v be next discovered vertex, using edge (u,v). d(v) = d(u) + lu,v. Then distance of v from s is at most d(v) since d(u) is correct.If distance v from s is < d(v), must be v’ s.t. d(u’) + lu’,v’ < d(u) + lu,v. This contradicts algorithm, v’ would be chosen instead of v.

uv

v’u’

shortest path

s

Page 24: Bellman-Ford and Dijkstra

Disjkstra(s) Set all vertices v undiscovered, d(v)= ∞ Set d(s) = 0, mark s discovered. while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Running time analysis:

O(mn).

Page 25: Bellman-Ford and Dijkstra

Heaps

s,0

a,13 b,3

h,21

d,16 e,5 f,4

g,15

c,14

j,19

Supported operations:

binary tree, every vertex has value at most that of

its children

Page 26: Bellman-Ford and Dijkstra

Heaps

s,0

a,13 b,3

h,21

d,16 e,5 f,4

g,15

c,14

j,19

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

Page 27: Bellman-Ford and Dijkstra

Heaps

j,19

a,13 b,3

h,21

d,16 e,5 f,4

g,15

c,14

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

Page 28: Bellman-Ford and Dijkstra

Heaps

b,3

a,13 j,19

h,21

d,16 e,5 f,4

g,15

c,14

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

Page 29: Bellman-Ford and Dijkstra

Heaps

b,3

a,13 f,4

h,21

d,16 e,5 j,19

g,15

c,14

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

Page 30: Bellman-Ford and Dijkstra

Heaps

b,3

a,13 f,4

h,21

d,16 e,5 j,19

g,15

c,14

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

reduce value of node: bubble up value until order restored

Page 31: Bellman-Ford and Dijkstra

Heaps

b,3

a,13 f,4

h,21

d,16 e,5 j,19

g,15

c,2

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

reduce value of node: bubble up value until order restored

Page 32: Bellman-Ford and Dijkstra

Heaps

b,3

c,2 f,4

h,21

d,16 e,5 j,19

g,15

a,13

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

reduce value of node: bubble up value until order restored

Page 33: Bellman-Ford and Dijkstra

Heaps

c,2

b,3 f,4

h,21

d,16 e,5 j,19

g,15

a,13

Supported operations:delete min: delete root, replace with last leaf, swap with min-child until order restored.

binary tree, every vertex has value at most that of

its children

reduce value of node: bubble up value until order restored

all operations take O(log n) time

Page 34: Bellman-Ford and Dijkstra

Disjkstra(s) Set all vertices v undiscovered, d(v)= ∞ Set d(s) = 0, mark s discovered. while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Running time analysis:

O(mn).

Disjkstra(s) Set all vertices v undiscovered, d(v)= ∞ Set d(s) = 0, mark s discovered. Make heap. while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Running time analysis:

O((m+n) log n).

Page 35: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 36: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

s,0

a,∞ b,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

j,∞while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 37: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

j,∞

a,∞ b,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 38: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

12

j,∞

a,∞ b,12

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 39: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

12

b,12

a,∞ j,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 40: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

12

b,12

a,2 j,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 41: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

12

a,2

b,12 j,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 42: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

a,2

b,12 j,∞

h,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 43: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

h,∞

b,12 j,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 44: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

b,12

h,∞ j,∞

d,∞ e,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 45: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

3

b,12

h,∞ j,∞

d,∞ e,3 f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 46: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

3

b,12

h,∞ e,3

d,∞ j,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 47: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

12

3

e,3

h,∞ b,12

d,∞ j,∞ f,∞

g,∞

c,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 48: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

e,3

h,∞ b,12

d,∞ j,∞ f,∞

g,∞

c,7

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 49: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

e,3

c,7 b,12

d,∞ j,∞ f,∞

g,∞

h,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 50: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

e,3

c,7 b,12

d,∞ j,∞ f,∞

g,∞

h,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 51: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

e,3

c,7 b,12

d,∞ j,∞ f,∞

g,∞

h,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 52: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

g,∞

c,7 b,12

d,∞ j,∞ f,∞h,∞

while heap is not empty, delete u with minimum d(u) value from heap for each edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 53: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

g,∞ b,12

d,∞ j,∞ f,∞h,∞

Page 54: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

g,∞ b,12

d,∞ j,∞ f,∞h,5

Page 55: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

h,5 b,12

d,∞ j,∞ f,∞g,∞

Page 56: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

h,5

c,7 b,12

d,∞ j,∞ f,∞g,∞

Page 57: Bellman-Ford and Dijkstra

Dijkstra’s Algorithm

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

0

2

7

12

3

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

h,5

c,7 b,12

d,∞ j,∞ f,∞g,∞

Page 58: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

f,∞

c,7 b,12

d,∞ j,∞g,∞

Page 59: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

f,∞ b,12

d,∞ j,∞g,∞

Page 60: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

f,∞ b,12

d,∞ j,11g,∞

Page 61: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

c,7

f,∞ j,11

d,∞ b,12g,∞

Page 62: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

b,12

f,∞ j,11

d,∞g,∞

Page 63: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

j,11

f,∞ b,12

d,∞g,∞

Page 64: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

12

3

8

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

f,8

j,11 b,12

d,∞g,∞

Page 65: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

f,8

j,11 b,12

d,∞g,11

Page 66: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

11

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

f,8

j,11 b,12

d,∞g,11

Page 67: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

f,8

j,11 b,12

d,∞g,11

Page 68: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

d,∞

j,11 b,12

g,11

Page 69: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

j,11

g,11 b,12

d,∞

Page 70: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

j,10

g,11 b,12

d,∞

Page 71: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

j,10

g,11 b,12

d,∞

Page 72: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

d,∞

g,11 b,12

Page 73: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

g,11

d, ∞ b,12

Page 74: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

g,11

d, ∞ b,12

Page 75: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

b,12

d,∞

Page 76: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

b,12

d,∞

Page 77: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

d,∞

Page 78: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

13

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

d,13

Page 79: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

13

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

d,13

Page 80: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

5

11 4

2

1

5

6

3

4

2

2

Dijkstra’s Algorithm

0

2

7

11

13

12

3

8

5

10

while there is edge from undiscovered vertex to discovered vertex, let (u,v) be such edge minimizing d(u)+lu,v set d(v) = d(u) + lu,v, mark v discovered

Page 81: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

What about negative edge weights?

Assume no negative cycles.

Page 82: Bellman-Ford and Dijkstra

Claim: If graph has no negative length cycles, then shortest walk (walk = path where vertices can repeat) from s to v has at most n-1 edges, and must be a path.

Pf: Suppose not. Then by pigeonhole principle, the shortest walk must contain a cycle! Removing it gives a shorter walk. Contradiction.

sv

Page 83: Bellman-Ford and Dijkstra

Bellman-Ford For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 84: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

Bellman-Ford

Page 85: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 86: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 87: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

12

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 88: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

12

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 89: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

12

16

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 90: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

12

3

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 91: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

12

3

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 92: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

12

3

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 93: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 94: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 95: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 96: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 97: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 98: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 99: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

12

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 100: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

12

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 101: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

12

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 102: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

3

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 103: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 104: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 105: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 106: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 107: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 108: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 109: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

0

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 110: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

5

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 111: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 112: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 113: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

13

-2

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 114: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-2

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 115: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-2

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 116: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-3

2

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 117: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-3

1

-2

4

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 118: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-2

1

-2

3

-1

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 119: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

0

2

-3

1

-1

-2

1

-2

3

-3

update (u,v): d(v) = min{d(v) + l(u,v)}

Bellman-Ford

Page 120: Bellman-Ford and Dijkstra

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

Bellman-Ford

0

2

-3

1

-1

-5

1

-2

3

-3

update (u,v): d(v) = min{d(v) + l(u,v)}

Page 121: Bellman-Ford and Dijkstra

Bellman-Ford Algorithm For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Claim: If graph has no negative length cycles, then for every v, d(v) ≥ distance(s,v).

Page 122: Bellman-Ford and Dijkstra

Claim: If graph has no negative length cycles, then for every v, d(v) ≥ distance(s,v).

Pf: Initially it is true. If we update d(v) = d(u) + lu,v, then d(v) = d(u) + lu,v ≥ distance(s,u) + lu,v ≥ distance(s,v)

Bellman-Ford Algorithm For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 123: Bellman-Ford and Dijkstra

Claim: If graph has no negative length cycles, then for every v, d(v) ≥ distance(s,v).

Claim: If (s,u1),(u1,u2),...,(uk-1,uk) occur as a subsequence in the sequence of edge updates of algorithm, then d(uk) ≤ ls,u1+lu1,u2+...+luk-1,uk

Pf: After (s,u1) is updated, d(u1) is at most d(s) + ls,u1 = ls,u1. After (u1,u2) is updated, d(u2) is at most ls,u1 + lu1,u2. ...

Bellman-Ford Algorithm For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 124: Bellman-Ford and Dijkstra

Claim: If graph has no negative length cycles, then for every v, d(v) ≥ distance(s,v).

Claim: If (s,u1),(u1,u2),...,(uk-1,uk) occur as a subsequence in the sequence of edge updates of algorithm, then d(uk) ≤ ls,u1+lu1,u2+...+luk-1,uk

Claim: Every sequence of n-1 edges occurs as a subsequence of the edge sequence used in the algorithm, so d(u) is at most distance(s,u) at the end.

Bellman-Ford Algorithm For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 125: Bellman-Ford and Dijkstra

Running time analysis:

O((m+n)n).

Bellman-Ford Algorithm For all vertices set d(v)= ∞ Set d(s) = 0 for i=1,2,...,n-1 for every edge (u,v) if d(v) > d(u) + lu,v, update d(v) = d(u) + lu,v.

Page 126: Bellman-Ford and Dijkstra

Detecting Negative Cycles

• Run Bellman-Ford n times. If any value d(v) changes in the n’th iteration, there is a negative cycle!