Title: 308-203A Introduction to Computing II Lecture 16: Dijkstra
1308-203AIntroduction to Computing IILecture
16 DijkstrasAlgorithm
Fall Session 2000
2Graphs with Weighted Edges
Graphs frequently come with extra satellite
data for the vertices or edges. A common
varient is assigning each edge some
positive weight.
Graph G (V, E) weight E ? ? (i.e. a
mapping from edges to real numbers)
3Example
The paradigmatic example is a map of
highways labelled with distances
Roberval
101
Val-dOr
Chicoutimi
259
318
211
531
Rivière-du-Loup
206
Québec
Trois-Rivières
130
142
158
Montréal
147
Sherbrooke
4Weight of a Path Problems
For a path, P P ( v1, v2, vi ) The weight
of the path is WP ? weight(vi, v(i1))
5Shortest-Path Problems
There is a general class of problems on
such graphs involving finding paths of minimal
weight. Some are easy to solve and some are
hard.
6A Hard Problem
The Travelling Salesman Problem find a
shortest path through a connected graph which
visits all of the vertices exactly once.
This problem is NP-Complete, which means there
is no computationally tractable
solution (according to decades of empirical
evidence, NP-Complete problems require
exponential time to solve)
7A Not-So-Hard Problem
The Single-Source Shortest Path Problem Given a
vertex, v, find the shortest path from v to every
vertex reachable from v. A nice solution is
Dijkstras algorithm, which is a kind of
algorithm known as a Greedy algorithm.
8Greedy algorithms
A Greedy algorithm is an algorithm based on
the principle of always taking the choice which
looks best in the short-run. In most cases, this
does not actually yield an optimal long-term
solution (or even a good one)
9A Greedy Algorithm that Works
Say youre on a long drive. Clearly, the way to
minimize the number of gas stops is to stop at a
gas station only when you know youll run out of
gas before you see another one. This is greedy
because given the choice to stop or not to stop,
you always choose the one which appears to
minimize the total number of stops.
10A Flawed Greedy Algorithm
A greedy algorithm does not work for the
Travelling Salesman Problem
Assume we start from a
b
c
1
10
a
5
8
3
d
14
e
11A Flawed Greedy Algorithm
Best greedy choices gives the path P (a,
b, c, d, e)
Weight 30
b
c
1
10
a
5
8
3
d
14
e
12A Flawed Greedy Algorithm
But I can find a better path P (a, b, e, c,
d)
Weight 26
b
c
1
10
a
5
8
3
d
14
e
13Dijkstras Algorithm
For the Single-Source Shortest Path Problem,
the Greedy approach actually does work.
Idea 1) Label all vertices with a best-known
distance so far 2) Initialize distance to 0
for the starting vertex and ? for all others
14Dijkstras Algorithm
Idea (continued) 3) Maintain a list, A, of
unexplored vertices, which is initialized
to all vertices 4) Choose vertices from A to
explore by a greedy strategy always take
the one with minimum distance 5) When you
explore a vertex, update the best known
distance to its neighbors and remove it from A.
15Dijkstra (pseudocode)
for each v ? V, distance(v) ? distance(
startVertex ) 0 A V // Initialize B
Ø for j 1 to ( V - 1 ) // Grow set B
u Extract-Min( A ) // Greedy choice
B B ? u for each v ? Neighbors( u
) // Update distances Relax(v, u)
16Helper Routine
Updates are performed by checking whether
u yields a better way to get to v
Relax(Vertex v, Vertex u) newWeight
distance( u ) weight( u, v ) if
(newWeight lt distance( v ) ) distance( v )
newWeight
17Example
Initialize starting vertex to 0 and all others to
?
5
?
?
0
a
b
c
7
2
1
3
d
e
f
?
?
3
?
8
A a, b, c, d, e, f
B ?
18Example
Remove minimum element from A and call Relax()
5
5
?
0
a
b
c
7
2
1
3
d
e
f
3
?
3
?
8
A b, c, d, e, f
B a
19Example
Remove minimum element from A and call Relax()
5
5
?
0
a
b
c
7
2
1
3
d
e
f
3
?
3
?
8
A b, c, d, e, f
B a
20Example
Now d is the minimum in A
5
5
?
0
a
b
c
7
2
1
3
d
e
f
3
8
3
?
11
8 3 11
A b, c, e, f
B a, d
21Example
Now b is the minimum in A We find we now have
a better path to e
5
5
?
0
a
b
c
7
2
52 7
1
3
d
e
f
3
8
3
?
7
A c, e, f
B a, b, d
22Example
Now e is the minimum in A
5
5
7 7 14
0
a
b
c
7
2
1
3
d
e
f
3
8
3
7
7 3 10
A c, f
B a, b, d, e
23Example
Now f is the minimum in A
5
5
11
0
a
b
c
10 1 11
7
2
1
3
d
e
f
3
8
3
7
10
A f
B a, b, c, d, e
24Example
Done!
5
5
11
0
a
b
c
7
2
1
3
d
e
f
3
8
3
7
10
A f
B a, b, c, d, e
25Running time
Like for Depth and Breadth-First Searches, we
execute a body of code once per vertex, and that
code looks only at the neighbors of the vertex it
is run for ? O( V E )
26Proof of Correctness
Since Greedy Algorithms dont always give
optimal solutions, we must furnish a proof that,
in the particular case of Dijkstras algorithm,
one actually does compute the shortest possible
paths
27Any questions?