Motivation
The shortest way to drive from A to B Google maps “get directions”
Formulation: Problem on a weighted graph G(V, E), W: E → R
Two Algorithms: Dijkstra O(V log V + E) assumes non-negative edge weights; Bellman-Ford O(VE) is a general algorithm;
Model as a weighted graph G(V, E), W: E → R
- V = vertices (street intersections)
- E = edges (street, roads); directed edges (one way roads)
- W(U, V ) = weight of edge from u to v (distance, toll)
path
- find p with minimum weight
Weighted Graph
Shortest path weight from u to v as
Single Source Shortest Paths:
Given G = (V, E), w, and a source vertex S find δ(S, V ) [and the best path] from S to each v ∈ V.
Data structures:
d[v] = value inside circle
d[v] decreases as we find better paths to v
Π[v] = predecessor on best path to v, Π[s] = NIL
Negative-Weight Edges
- Natural in some applications (e.g., logarithms used for weights)
- Some algorithms disallow negative weight edges (e.g., Dijkstra)
- If you have negative weight edges, you might also have negative weight cycles =⇒ may make certain shortest paths undefined!
The General structure of S.P. Algorithms (no negative cycles)
Initialize: for v ∈ V:
d[v] ← ∞
Π[v] ← NIL
d[S] ← 0
Main: repeat
select edge (u, v)
"Relax" edge (u, v) if d[v] > d[u] + w(u, v):
d[v] ← d[u] + w(u, v)
Π[v] ← u
until all edges have d[v] ≤ d[u] + w(u, v)
Optimal Substructure
Theorem: Subpaths of shortest paths are shortest paths
Triangle Inequality:
Theorem: For all u, v, x ∈ X, we have δ (u, v) ≤ δ (u, x) + δ (x, v)