320 likes | 490 Views
Dijkstra’s Algorithm. Lauren 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.
E N D
Dijkstra’s Algorithm Lauren 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
Ordered pair u = Vertex @ Beginning of path v = Vertex @ End of path Has a value assigned Cost (u,v) Edge
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
index i, vnear; char touch[n]; int length[n]; //Empty set F = 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
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
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 Binary Tree More Structure Fibonacci Collection of trees satisfying the minimum-heap priority Maintains pointer to root of tree with smallest priority More flexible Binary vs. Fibonacci
“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