dijkstra’s algorithm lauren mclaughlin - 11/7/06
TRANSCRIPT
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