Loading...

PPT – 308-203A Introduction to Computing II Lecture 16: Dijkstra PowerPoint presentation | free to download - id: e63c2-ZDc1Z

The Adobe Flash plugin is needed to view this content

308-203A Introduction to Computing II Lecture

16 Dijkstras Algorithm

Fall Session 2000

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

Example

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

Weight of a Path Problems

For a path, P P ( v1, v2, vi ) The weight

of the path is WP ? weight(vi, v(i1))

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

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

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

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

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

A 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

A 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

A 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

Dijkstras 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

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

Dijkstra (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)

Helper 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

Example

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 ?

Example

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

Example

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

Example

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

Example

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

Example

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

Example

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

Example

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

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

Proof 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

Any questions?