Bellman-Ford and Dijkstra

Preview:

Citation preview

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.

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

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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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).

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

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

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

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

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

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

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

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

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

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).

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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,∞

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

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,∞

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,∞

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,∞

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,∞

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,∞

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,∞

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,∞

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,∞

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,∞

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,∞

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

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

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

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

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,∞

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,∞

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,∞

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

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

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

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,∞

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,∞

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,∞

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

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

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

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.

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

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.

s b

c

da

e

g

f

j

h

12

2

-5

11 4

-2

1

5

-6

3

4

2

2

Bellman-Ford

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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)}

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).

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.

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.

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.

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.

Detecting Negative Cycles

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

Recommended