Dijkstra’s Algorithm Lauren McLaughlin - 11/7/06

Preview:

Citation preview

Dijkstra’s AlgorithmLauren McLaughlin - 11/7/06

Quotes

• “Object-oriented programming is an exceptionally bad idea which could only have originated in California.”

• “Don't compete with me: firstly, I have more experience, and secondly, I have chosen the weapons.”

Quotes

• “Program testing can be used to show the presence of bugs, but never to show their absence!”

• “Perfecting oneself is as much unlearning as it is learning.”

Traveling Salesman

• Objective:Find the cheapest way of visiting all of the cities

and returning to your starting point

Dining Philosophers

• Objective:To prevent deadlocks and starvation

Dining Philosophers

Shortest Path Algorithm

Edge

• Ordered pair

• u = Vertex @ Beginning of path

• v = Vertex @ End of path

• Has a value assigned• Cost

• (u,v)

Data Structures

• Set of vertices whose shortest path has been determined (F)

• Set of remaining vertices (R)

• Array containing shortest path (length)

• Adjacency Array (W)

• Array holding current vertex (touch)

Basic Steps

• Set F to empty set

• Initialize arrays

• Find shortest path

• Place its vertex in F

• Remove vertex from R

• Relax vertices in R

• Change length of shortest vertex to -1

Edge Relaxation

• After vertex u is placed in F, every edge in R is relaxed

• Get current shortest distance (length[v])

• Determine distance by going through the recently placed vertex in R

• If the path is shorter when going through u, set length[v] to that amount

Pseudocodeindex i, vnear;char touch[n];int length[n];

//Empty setF = 0;

for(i = 0; i < n; i++){ touch[ i ] = source; if(W[source][ i ] == 0)

W[source][ i ] = oo;

length[ i ] = W[source][ i ];}

}

repeat(n - 1 times){ int min = oo; for(i = 0; i < n; i++) { if(i != source) { if(0 <= length[ i ] < min) { min = length[ i ]; vnear = i; } }

Pseudocode

add vnear to F; remove vnear from R; for(i = 0; i < n; i++) { if(length[vnear] + W[vnear][i] < length[i]) { length[i] = length[vnear] + W[vnear][i]; touch[i] = vnear; } } length[vnear] = -1;}

Example Objective

• Find shortest path from source node, A, to all other nodes

7

46

2

1

1

5

3

A

E B

CD

F = AR = B, C, D, E

Shortest Paths

A B C D E

A 0 7 4 6 1

B 0

C 2 0 5

D 3 0

E 1 0

Shortest Paths

A B C D E

A ∞ 7 4 6 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

Shortest Paths

A B C D E

A ∞ 7 4 6 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

7

46

2

1

1

5

3

A

E B

CD

F = A, ER = B, C, D

Shortest Paths

A B C D E

A ∞ 7 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

Shortest Paths

A B C D E

A ∞ 7 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

7

46

2

1

1

5

3

A

E B

CD

F = A, D, ER = B, C

Shortest Paths

A B C D E

A ∞ 5 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

Shortest Paths

A B C D E

A ∞ 5 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

7

46

2

1

1

5

3

A

E B

CD

F = A, C, D, ER = B

Shortest Paths

A B C D E

A ∞ 5 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

Shortest Paths

A B C D E

A ∞ 5 4 2 1

B ∞C 2 ∞ 5

D 3 ∞E 1 ∞

7

46

2

1

1

5

3

A

E B

CD

F = A, B, C, D, ER = EMPTY

Running Time

• O(V2)• Linear Search• Vertices stored in array or linked list

• O((E + V)logV)• Binary heap used as priority queue• Vertices stored in adjacency lists

• O(E + V logV)• Fibonacci heap used as priority queue• Vertices stored in adjacency lists

Binary vs. FibonacciBinary

• Binary Tree

• More Structure

Fibonacci

• Collection of trees satisfying the minimum-heap priority

• Maintains pointer to root of tree with smallest priority

• More flexible

• “The competent programmer is fully aware of the limited size of his own skull. He therefore approaches his task with full humility, and avoids clever tricks like the plague.”

Movie

• \\10.1.154.4\Classes\Comp349\Dijkstra

Recommended