Shortest Paths
08-07-2006
PowerPoint adapted from Alan Tam’s Shortest Path, 2004
with slight modifications
08-07-2006 2
Breadth First Search (BFS)
Techniques to Enumerate all Vertices for Goal
BFS needs O(V) queue and O(V) set for duplicate elimination and runs in O(V + E) time
BFS can find Shortest Path if Graph is Not Weighted
BFS works because a Queue ensures a specific Order
08-07-2006 3
What Order?
Define d[v] be the length of shortest path from s to v
At any time, vertices are classified into: Black With known d[v] Grey With some known path White Not yet touched
The Grey vertex with shortest known path has potential to become Black
The Head of Queue is always the case in an unweighted graph
Why?
08-07-2006 4
Weighted Graph
Queue does not promise smallest d[v] anymore
Expanding weighted edge causeds unnecessary searching of artificial vertices
We can simply pick the real vertex nearest to the starting vertex
We need “Sorted Queue” which “dequeues” vertices in increasing order of d[v].
It is called a “Priority Queue” and negation of d[v] is called the Priority of vertex v
08-07-2006 5
0 3
1
31
32
3
08-07-2006 6
0
3
2
3
1
31
32
3
3
08-07-2006 7
0
3
3
2
5
3
1
31
32
3
Done?
08-07-2006 8
0
3
3
2
4
3
1
31
32
3
Done?
08-07-2006 9
0
3
3
2
4
3
1
31
32
3
08-07-2006 10
0
3
3
2
4
3
1
31
32
3
Done?
08-07-2006 11
Dijkstra’s Algorithm
d ← ∞d[s] ← 0enqueue(queue, s)while not empty(queue) do
u = dequeue(queue)for-each v where (u, v) in E
if d[v] > d[u] + wuv thend[v] = d[u] + wuv
enqueue(queue, v)
Note that d[v] represents the known shortest distance of v from s during the process and may not be the real shortest distance until v is marked black.
08-07-2006 12
Requirements for Priority Queue
Map<V, int> Store temporary values of d[v]
PriorityQueue<V, function: V→int > Extract vertices in increasing order of d[v]
Initially all d[v] are infinity When we visit a White vertex
Set d[v] Insert v into Queue
When we visit a Gray vertex Update d[v] What to do to the Priority Queue?
08-07-2006 13
Implementing Priority Queue? Usage:
Insert: V Extract: V Decrease: E - V
Array Insert: O(1) Extract: O(n) Decrease: O(1)
Sorted Array Insert: O(n) Extract: O(1) Decrease: O(n)
Heap Insert: O(lg n) Extract: O(lg n) Decrease: O(lg n)
Fibonacci Heap Insert: O(1) Extract: Amortized O(lg
n) Decrease: O(1)
08-07-2006 14
Time Complexity
Worst Case Big-Oh Memory Time
Array V
Array (Lazy)
Sorted Array
Heap
Heap (Lazy)
Fibonacci Heap V E + V lg V
08-07-2006 15
Time Complexity
Worst Case Big-Oh Memory Time
Array V V2
Array (Lazy) E VE
Sorted Array V VE
Heap V E lg V
Heap (Lazy) E E lg V
Fibonacci Heap V E + V lg V
08-07-2006 16
Another Attempt
Consider the following code segment:
For each edge (u, v)
If d[v] > d[u] + wuv
d[v] ← d[u] + wuv Assume one of the shortest paths is
(s, v1, v2, …, vk) If d[vi] = its shortest path from s After this loop, d[vi+1] = its shortest path from s By MI, After k such loops, found shortest path from s
to vk
08-07-2006 17
Bellman-Ford Algorithm
All v1, v2, …,vk distinct?
Do V-1 times
for-each (u, v) in E
if d[v] > d[u] + wuv then
d[v] ← d[u] + wuv
Order = O(VE) Support Negative-weight Edges
08-07-2006 18
Another Attempt
Number vertices as v1, v2, …, vV
Define no≤k-path as a path which does not pass through vertices v1, v2, …, vk
A path s-t must either be a no≤1-path, or concatenation of a no≤1-path s-v1 and a no≤1-path v1-
t A no≤1-path s-t must either be
a no≤2-path, or concatenation of a no≤2-path s-v2 and a no≤2-path v2-
t By MI …
08-07-2006 19
Trivial Paths
S T
For all S
For all TDirect Path
from S to T
08-07-2006 20
R S
For all R
For all SDirect Path
from R to SS T
For all S
For all TDirect Path
from S to T
For S = vV
Direct Path
from R to T
08-07-2006 21
no≤(V-1)-Paths
S T
For all S
For all TShortest Path
from S to Tvia vV
08-07-2006 22
R S
For all R
For all SShortest Path
from R to Svia vV
S T
For all S
For all TShortest Path
from S to Tvia vV
For S = vV-1
Shortest Path
from R to Tvia vV
08-07-2006 23
no≤(V-2)-Paths
S T
For all S
For all TShortest Path
from S to Tvia vV-1,vV
08-07-2006 24
no≤2-Paths
S T
For all S
For all TShortest Path
from S to Tvia v3,v4,...,vV
08-07-2006 25
R S
For all R
For all SShortest Path
from R to Svia v3,v4,...,vV
S T
For all S
For all TShortest Path
from S to Tvia v3,v4,...,vV
For S = V2
Shortest Path
from R to Tvia v3,v4,...vV
08-07-2006 26
no≤1-Paths
S T
For all S
For all TShortest Path
from S to Tvia v2,v3,...,vV
08-07-2006 27
R S
For all R
For all SShortest Path
from R to Svia v2,v3,...,vV
S T
For all S
For all TShortest Path
from S to Tvia v2,v3,...,vV
For S = V1
Shortest Path
from R to Tvia v2,v3,...vV
08-07-2006 28
Shortest Paths
S T
For all S
For all TShortest Path
from S to Tvia v1,v2,...,vV
08-07-2006 29
Warshall-Floyd Algorithm
for-each (u, v) in Ed[u][v] ← wuv
for-each i in Vfor-each j in V
for-each k in Vif d[j][k] > d[j][i] + d[i][k]
d[j][k] ← d[j][i] + d[i][k]
Time Complexity: O(V3)
08-07-2006 30
Graph Modeling
Conversion of a problem into a graph problem
Sometimes a problem can be easily solved once its underlying graph model is recognized
Graph modeling appears almost every year in NOI or IOI
(cx, 2004)
08-07-2006 31
Basics of Graph Modeling
A few steps: identify the vertices and the edges identify the objective of the problem state the objective in graph terms implementation:
• construct the graph from the input instance• run the suitable graph algorithms on the graph• convert the output to the required format
(cx, 2004)
Top Related