W-11 - L-2 - Single Source Shortest-Path (SSSP) Dijkstra's Algorithm
W-11 - L-2 - Single Source Shortest-Path (SSSP) Dijkstra's Algorithm
B 210 B
A A
450
60 190
C unweighted C weighted
graph graph
200 130
D D
E E
Shortest Path Problems
• How can we find the shortest route between two points
on a map?
• Model the problem as a graph problem:
• Road map is a weighted graph:
vertices = cities
edges = road segments between cities
edge weights = road distances
• Goal: find a shortest path between two vertices (cities)
3
Shortest Path Problems
• Input: t x
6
• Directed graph G = (V, E) 3 9
3
4
• Weight function w : E → R 2 1
s 0
2 7
• Weight of path p = 〈v0, v1, . . . , vk〉 5 3
1
5
6 1
y z
∞ otherwise
5
Shortest-Path Representation
For each vertex v ∈ V:
t x
• d[v] = δ(s, v): a shortest-path estimate 3
6
9
• Initially, d[v]=∞ 3
4
2 1
• Reduces as algorithms progress s 0
2 7
3
• π[v] = predecessor of v on a shortest path 5
1
5
from s y
6 1
z
• If no predecessor, π[v] = NIL
• π induces a tree—shortest-path tree
• Shortest paths & shortest path trees are not
unique
6
Initialization
Alg.: INITIALIZE-SINGLE-SOURCE(V, s)
1. for each v ∈ V
2. do d[v] ← ∞
3. π[v] ← NIL
4. d[s] ← 0
7
Dijkstra’s Algorithm
• Single-source shortest path problem:
• No negative-weight edges: w(u, v) > 0 ∀ (u, v) ∈ E
8. do RELAX(u, v, w) ∞
5 2
∞
y z
9
Example t x t x
1 1
1 1 11
8 ∞ 8
0 4 43
10 9 10 9
2 3 4 6 2 3 4 6
s 0 s 0
5 7 5 7
5 7
∞ 5 7
2 2
y z y z
t x t 1 x
1
1 8 9
8 9
9
3 10 9
10
2 4 2 3 4 6
s 0 3 6 s 0
7 5 7
5
5 7 5 7
2 2
y z y z
10
Dijkstra’s Pseudo Code
• Graph G, weight function w, root s
relaxing
edges
Dijkstra (G, w, s)
1. INITIALIZE-SINGLE-SOURCE(V, s) Θ(V)
2. S← ∅
3. Q ← V[G] O(V) build min-heap
4. while Q ≠ ∅ Executed O(V) times
5. do u ← EXTRACT-MIN(Q) O(lgV)
6. S ← S ∪ {u}
7. for each vertex v ∈ Adj[u]
8. do RELAX(u, v, w) O(E) times; O(lgV)
Running time: O(VlgV + ElgV) = O(ElgV)
12
Dijkstra’s Running Time
• Extract-Min executed |V| time
• Decrease-Key executed |E| time
• Time = |V| TExtract-Min + |E| TDecrease-Key
• T depends on different Q implementations