bellman-ford and dijkstra
Post on 28-Nov-2021
10 Views
Preview:
TRANSCRIPT
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!
top related