410 likes | 838 Views
Single-Source Shortest Path. How does Google Maps work?. Single-Source Shortest Path. How many ways can I go from SPSU to KSU? How can I represent the map? What are vertices? What are edges? What are weights?. Single-Source Shortest Path. For this problem Disallow cycles
E N D
Single-Source Shortest Path Jeff Chastine
How does Google Maps work? Jeff Chastine
Single-Source Shortest Path • How many ways can I go from SPSU to KSU? • How can I represent the map? • What are vertices? • What are edges? • What are weights? Jeff Chastine
Single-Source Shortest Path • For this problem • Disallow cycles • Still have weight function • Calculate path p and shortest path where • Note: Breadth works for non-weighted edges Jeff Chastine
Single-Source Shortest Path • Has optimal sub-structure. Why? • Path is is fastest • Assume faster way between x and w • Cut and paste faster way and you get optimal! • Graph can’t have a negative cycle. Why? • Can the graph have a positive cycle? • Can the shortest path contain a positive cycle? Jeff Chastine
How it’s Done in General • A node v has a predecessor node • Tells us how we got there • NIL for first node • End with a directed graph rooted at start node s • Relaxation (pay attention!) • Maintain an upper-bound cost for each node d[v] • Initially, all nodes are marked as ∞ • If we find a cheaper path to node v, relax (update) the cost and predecessor Jeff Chastine
Relaxation Example(using a breadth-first traversal) b ∞ 2 5 11 a d 0 ∞ 3 99 c ∞ Original Graph Predecessor and Cost INITIALIZE-SINGLE-SOURCE(G, s) Jeff Chastine
Relaxation Example b ∞ 2 5 11 a d 0 ∞ 3 99 c ∞ Original Graph Predecessor and Cost Start with source node Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 ∞ 3 99 c 99 Original Graph Predecessor and Cost Update connected nodes Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 ∞ 3 99 c 99 Original Graph Predecessor and Cost Continue with Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 99 Original Graph Predecessor and Cost Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 99 Original Graph Predecessor and Cost This guy can chill out… RELAX! Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 13 Original Graph Predecessor and Cost Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 13 Original Graph Predecessor and Cost But wait! We’re not done! Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 13 Original Graph Predecessor and Cost No relaxation Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 13 Original Graph Predecessor and Cost Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 13 Original Graph Predecessor and Cost Needs to relax again! Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 10 Original Graph Predecessor and Cost Needs to relax again! Jeff Chastine
Relaxation Example b 2 2 5 11 a d 0 7 3 99 c 10 Original Graph Predecessor and Cost Final Predecessor and Cost Jeff Chastine
How does Google Maps work? PWND! Jeff Chastine
Bellman-Ford Algorithm • Works with negatively weighted edges • Detects if negative cycle exists • Consistently uses relaxation • Runs in Jeff Chastine
Bellman-Ford Algorithm BELLMAN-FORD(G, w, s) • INITIALIZE-SINGLE-SOURCE(G, s) • fori← 1 to |V[G]| -1 • foreach edge (u, v) E[G] • RELAX(u, v, w) • foreach edge (u, v) E[G] • if d[v] > d[u] + w(u, v) • then return FALSE • return TRUE Jeff Chastine
Dijkstra’s Algorithm • Is more efficient than Bellman-Ford • Doesn’t work with negative edges • Has a set S of vertices that it has already traversed. Heapifies V. • In general • Picks vertex u from V - S with minimum estimate • Relaxes everything connected to u • Adds u to S • Repeats untilV - Sis the empty set Jeff Chastine
Dijkstra’s Algorithm DIJKSTRA (G, w, s) • INITIALIZE-SINGLE-SOURCE(G, s) • S ← • Q ← V[G] • while Q • do u ← EXTRACT-MIN(Q) • S←S {u} • foreach vertex v Adj[u] • do RELAX(u, v, w) Jeff Chastine
Summary • Both algorithms use • A predecessor graph • Costs to each node • Relaxation • Bellman-Ford () • Works with negative weights • Detects negative cycles • Dijkstra () • More efficient • Doesn’t work with negative weights Jeff Chastine