Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
(Dijkstras Algorithm)
Shortest Path Problems
What is shortest path ?
shortest length between two vertices for an
unweighted graph:
smallest cost between two vertices for a weighted
graph:
B 210 B
A A
450
60 190
C unweighted C weighted
graph graph
200 130
D D
E E
Shortest Path Problems
How can we find the shortest route between two
points on a map?
Model the problem as a graph problem:
Road map is a weighted graph:
vertices = cities
edges = road segments between cities
edge weights = road distances
Goal: find a shortest path between two vertices (cities)
3
Shortest Path Problems
Input: t
6
x
3 9
Directed graph G = (V, E) 3
4
2 1
Weight function w : E R s 0
2 7
5 3
Weight of path p = v0, v1, . . . , vk 5 11
k 6
w( p ) w( vi 1 , vi ) y z
i 1
otherwise
5
Optimal Substructure of Shortest Paths
Given: vj
pjk
A weighted, directed graph G = (V, E) v1 pij
p1i
A weight function w: E R, pij vk
A shortest path p = v1, v2, . . . , vk from v1 to vk vi
8
Relaxation
Relaxing an edge (u, v) = testing whether we
can improve the shortest path to v found so far
by going through u
If d[v] > d[u] + w(u, v)
we can improve the shortest path to v
update d[v] and [v]
s s
u v u v
5
2
9
2 After relaxation:
5 6
d[v] d[u] + w(u, v)
RELAX(u, v, w) RELAX(u, v, w)
u v u v
2 2
5 7 5 6
9
RELAX(u, v, w)
1. if d[v] > d[u] + w(u, v)
2. then d[v] d[u] + w(u, v)
3. [v] u
10
Dijkstras Algorithm
Single-source shortest path problem:
No negative-weight edges: w(u, v) > 0 (u, v) E
do u EXTRACT-MIN(Q)
t x
5.
10
1
6. S S {u} 10
2
9
4
s 0 3 6
7. for each vertex v Adj[u] 5 7
8. do RELAX(u, v, w)
5 2
y z
12
Example
t 1 x t 1 x
8
10
14 8 13
14
10 9 10 9
2 3 4 6 2 3 4 6
s 0 s 0
5 7 5 7
5
7 5 7
2 2
y z y z
t x t 1 x
1
8 13
9 8 9
10 9 10 9
2 4 2 3 4 6
s 0 3 6 s 0
7 5 7
5
5 7 5 7
2 2
y z y z
13
Dijkstra's Shortest Path Algorithm
Find shortest path from s to t.
24
2 3
9
s
18
14
2 6
6
30 4 19
11
15 5
5
6
20 16
t
7 44
14
Dijkstra's Shortest Path Algorithm
S={ }
PQ = { s, 2, 3, 4, 5, 6, 7, t }
24
2 3
0 9
s
18
14 2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
distance
15 label
Dijkstra's Shortest Path Algorithm
S={ }
PQ = { s, 2, 3, 4, 5, 6, 7, t }
delmin
24
2 3
0 9
s
18
14 2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
distance
16 label
Dijkstra's Shortest Path Algorithm
S={s}
PQ = { 2, 3, 4, 5, 6, 7, t }
decrease key
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
distance
17 label 15
X
Dijkstra's Shortest Path Algorithm
S={s}
PQ = { 2, 3, 4, 5, 6, 7, t }
delmin
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
distance
18 label 15
X
Dijkstra's Shortest Path Algorithm
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
19 15
X
Dijkstra's Shortest Path Algorithm
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
decrease key
33
X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
20 15
X
Dijkstra's Shortest Path Algorithm
S = { s, 2 }
PQ = { 3, 4, 5, 6, 7, t }
33
X
X 9
24
2 3
0 9
delmin
s
18
14
X 14
2 6
6
30 11
4 19
15 5
5
6
20 16
t
7 44
21 15
X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 6 }
PQ = { 3, 4, 5, 7, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
44
30
X 11
4 19
15 5
5
6
20 16
t
7 44
22 15
X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 6, 7 }
PQ = { 3, 4, 5, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
44
30
X 11
4 19
15 5
5
6
20 16
t
7 44
23 15
X delmin
Dijkstra's Shortest Path Algorithm
S = { s, 2, 6, 7 }
PQ = { 3, 4, 5, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
X 35
44
30
X 11
4 19
15 5
5
6
20 16
t
7 44
24 15
X
59 X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 6, 7 } delmin
PQ = { 3, 4, 5, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
X 35
44
30
X 11
4 19
15 5
5
6
20 16
t
7 44
25 15
X
59 X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 6, 7 }
PQ = { 4, 5, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
26 15
X 51 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 6, 7 }
PQ = { 4, 5, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
delmin
t
7 44
27 15
X 51 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 5, 6, 7 }
PQ = { 4, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
28 15
X 50 51
X 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 5, 6, 7 }
PQ = { 4, t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5 delmin
5
6
20 16
t
7 44
29 15
X 50 51
X 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 4, 5, 6, 7 }
PQ = { t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
30 15
X 50 51
X 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 4, 5, 6, 7 }
PQ = { t }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
31 15
X
delmin 50 51
X 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 4, 5, 6, 7, t }
PQ = { }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
32 15
X 50 51
X 59
X X
Dijkstra's Shortest Path Algorithm
S = { s, 2, 3, 4, 5, 6, 7, t }
PQ = { }
32
33
X X
X 9
24
2 3
0 9
s
18
14
X 14
2 6
6
45 X
X 35
44 X 34
30
X 11
4 19
15 5
5
6
20 16
t
7 44
33 15
X 50 51
X 59
X X
Dijkstras Pseudo Code
Graph G, weight function w, root s
relaxing
edges
Dijkstra (G, w, s)
1. INITIALIZE-SINGLE-SOURCE(V, s) (V)
2. S
3. Q V[G] O(V) build min-heap
4. while Q Executed O(V) times
5. do u EXTRACT-MIN(Q) O(lgV)
6. S S {u}
7. for each vertex v Adj[u]
8. do RELAX(u, v, w) O(E) times; O(lgV)
Running time: O(VlgV + ElgV) = O(ElgV)
35
Dijkstras Running Time