Professional Documents
Culture Documents
6.046J/18.401J LECTURE 17
Shortest Paths I Properties of shortest paths Dijkstras algorithm Correctness Analysis Breadth-first search Prof. Erik Demaine
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.1
Paths in graphs
Consider a digraph G = (V, E) with edge-weight function w : E R. The weight of path p = v1 v2 L vk is defined to be
w( p ) = w(vi , vi +1 ) .
i =1
k 1
L17.2
Paths in graphs
Consider a digraph G = (V, E) with edge-weight function w : E R. The weight of path p = v1 v2 L vk is defined to be w( p ) = w(vi , vi +1 ) .
i =1 k 1
Example:
v v11
v v22
v v33
v v44
v v55 w(p) = 2
L17.3
Shortest paths
A shortest path from u to v is a path of minimum weight from u to v. The shortestpath weight from u to v is defined as (u, v) = min{w(p) : p is a path from u to v}.
Note: (u, v) = if no path from u to v exists.
L17.4
Optimal substructure
Theorem. A subpath of a shortest path is a shortest path.
L17.5
Optimal substructure
Theorem. A subpath of a shortest path is a shortest path.
L17.6
Optimal substructure
Theorem. A subpath of a shortest path is a shortest path.
L17.7
Triangle inequality
Theorem. For all u, v, x V, we have (u, v) (u, x) + (x, v).
L17.8
Triangle inequality
Theorem. For all u, v, x V, we have (u, v) (u, x) + (x, v).
Proof. u u
(u, x) (u, v)
v v
(x, v)
x x
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.9
L17.10
<0
u u
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson
v v
L17.11
Dijkstras algorithm
d [ s] 0 for each v V {s} do d[v] S QV Q is a priority queue maintaining V S
L17.13
Dijkstras algorithm
d [ s] 0 for each v V {s} do d[v] S QV Q is a priority queue maintaining V S while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v)
L17.14
Dijkstras algorithm
d [ s] 0 for each v V {s} do d[v] S QV Q is a priority queue maintaining V S while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] relaxation do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v) step
Implicit DECREASE-KEY
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.15
B B
1 4
2 8
D D
7 9
A A
3
C C
E E
L17.16
B B
2 8
D D
7 9
0 A A Q: A B C D E
0
1 4 3
C C
E E
S: {}
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.17
B B
2 8
D D
7 9
0 A A Q: A B C D E
0
1 4 3
C C
E E
S: { A }
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.18
10 B B
2 8
D D
7 9
0 A A Q: A B C D E
0 10 3
1 4 3
C C 3
E E
S: { A }
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.19
10 B B
2 8
D D
7 9
0 A A Q: A B C D E
0 10 3
1 4 3
C C 3
E E
S: { A, C }
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.20
7 B B
2 8
11 D D
7 9
0 A A Q: A B C D E
0 10 7 3 11 5
1 4 3
C C 3
E E 5
S: { A, C }
L17.21
7 B B
2 8
11 D D
7 9
0 A A Q: A B C D E
0 10 7 3 11 5
1 4 3
C C 3
E E 5
S: { A, C, E }
L17.22
7 B B
2 8
11 D D
7 9
0 A A Q: A B C D E
0 10 7 7 3 11 11 5
1 4 3
C C 3
E E 5
S: { A, C, E }
L17.23
7 B B
2 8
11 D D
7 9
0 A A Q: A B C D E
0 10 7 7 3 11 11 5
1 4 3
C C 3
E E 5
S: { A, C, E, B }
L17.24
7 B B
2 8
9 D D
7 9
0 A A Q: A B C D E
0 10 7 7 3 11 11 9 5
1 4 3
C C 3
E E 5
S: { A, C, E, B }
L17.25
7 B B
2 8
9 D D
7 9
0 A A Q: A B C D E
0 10 7 7 3 11 11 9 5
1 4 3
C C 3
E E 5
S: { A, C, E, B, D }
L17.26
Correctness Part I
Lemma. Initializing d[s] 0 and d[v] for all v V {s} establishes d[v] (s, v) for all v V, and this invariant is maintained over any sequence of relaxation steps.
L17.27
Correctness Part I
Lemma. Initializing d[s] 0 and d[v] for all v V {s} establishes d[v] (s, v) for all v V, and this invariant is maintained over any sequence of relaxation steps. Proof. Suppose not. Let v be the first vertex for which d[v] < (s, v), and let u be the vertex that caused d[v] to change: d[v] = d[u] + w(u, v). Then, d[v] < (s, v) supposition (s, u) + (u, v) triangle inequality (s,u) + w(u, v) sh. path specific path d[u] + w(u, v) v is first violation Contradiction.
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.28
Correctness Part II
Lemma. Let u be vs predecessor on a shortest path from s to v. Then, if d[u] = (s, u) and edge (u, v) is relaxed, we have d[v] = (s, v) after the relaxation.
L17.29
Correctness Part II
Lemma. Let u be vs predecessor on a shortest path from s to v. Then, if d[u] = (s, u) and edge (u, v) is relaxed, we have d[v] = (s, v) after the relaxation. Proof. Observe that (s, v) = (s, u) + w(u, v). Suppose that d[v] > (s, v) before the relaxation. (Otherwise, were done.) Then, the test d[v] > d[u] + w(u, v) succeeds, because d[v] > (s, v) = (s, u) + w(u, v) = d[u] + w(u, v), and the algorithm sets d[v] = d[u] + w(u, v) = (s, v).
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.30
L17.31
s s
x x
y y
L17.32
Since u is the first vertex violating the claimed invariant, we have d[x] = (s, x). When x was added to S, the edge (x, y) was relaxed, which implies that d[y] = (s, y) (s, u) < d[u]. But, d[u] d[y] by our choice of u. Contradiction.
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.33
Analysis of Dijkstra
while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v)
L17.34
Analysis of Dijkstra
|V | times while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] do if d[v] > d[u] + w(u, v) then d[v] d[u] + w(u, v)
L17.35
Analysis of Dijkstra
|V | times while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] degree(u) do if d[v] > d[u] + w(u, v) times then d[v] d[u] + w(u, v)
L17.36
Analysis of Dijkstra
|V | times while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] degree(u) do if d[v] > d[u] + w(u, v) times then d[v] d[u] + w(u, v)
L17.37
Analysis of Dijkstra
|V | times while Q do u EXTRACT-MIN(Q) S S {u} for each v Adj[u] degree(u) do if d[v] > d[u] + w(u, v) times then d[v] d[u] + w(u, v)
L17.39
L17.40
L17.41
Unweighted graphs
Suppose that w(u, v) = 1 for all (u, v) E. Can Dijkstras algorithm be improved?
L17.43
Unweighted graphs
Suppose that w(u, v) = 1 for all (u, v) E. Can Dijkstras algorithm be improved? Use a simple FIFO queue instead of a priority queue.
L17.44
Unweighted graphs
Suppose that w(u, v) = 1 for all (u, v) E. Can Dijkstras algorithm be improved? Use a simple FIFO queue instead of a priority queue. Breadth-first search
while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + 1 ENQUEUE(Q, v)
L17.45
Unweighted graphs
Suppose that w(u, v) = 1 for all (u, v) E. Can Dijkstras algorithm be improved? Use a simple FIFO queue instead of a priority queue. Breadth-first search
while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + 1 ENQUEUE(Q, v)
ff g g
h h
ii
a a d d b b e e c c Q: a
0
ff g g
h h
ii
L17.48
a a b b
ff g g
h h
d d
1
e e c c
1 1
ii
Q: a b d
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.49
a a b b
ff g g
h h
d d
1
e e
2
ii
c c
2 1 2 2
Q: a b d c e
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.50
a a b b
ff g g
h h
d d
1
e e
2
ii
2 2
c c
Q: a b d c e
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.51
a a b b
ff g g
h h
d d
1
e e
2
ii
2
c c
Q: a b d c e
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.52
a a b b
ff
3
h h
d d
1
g g ii
3
e e
2
c c
2 3 3
Q: a b d c e g i
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.53
a a b b
ff
3
h h
d d
1
g g ii
3 3 4
e e
2
c c
Q: a b d c e g i f
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.54
a a b b
ff
3
h h
d d
1
g g ii
3 4 4
e e
2
c c
Q: a b d c e g i f h
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.55
a a b b
ff
3
h h
d d
1
g g ii
3 4
e e
2
c c
Q: a b d c e g i f h
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.56
a a b b
ff
3
h h
d d
1
g g ii
3
e e
2
c c
Q: a b d c e g i f h
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.57
a a b b
ff
3
h h
d d
1
g g ii
3
e e
2
c c
Q: a b d c e g i f h
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.58
Correctness of BFS
while Q do u DEQUEUE(Q) for each v Adj[u] do if d[v] = then d[v] d[u] + 1 ENQUEUE(Q, v)
Key idea: The FIFO Q in breadth-first search mimics the priority queue Q in Dijkstra. Invariant: v comes after u in Q implies that d[v] = d[u] or d[v] = d[u] + 1.
November 14, 2005 Copyright 2001-5 by Erik D. Demaine and Charles E. Leiserson L17.59