SINGLE-SOURCE SHORTEST PATHS
Shortest Path Problems
Directed weighted graph.
Path length is sum of weights of edges on path.
The vertex at which the path begins is the source vertex.
The vertex at which the path ends is the destination vertex.
t
3
s 0
x
9
6
4
2
5
y
11
z
Example
1
2
16
3
5
10
4
2
3
14
Consider Source node 1 and destination node 7
A direct path between Nodes 1 and 7 will cost 14
Example
1
2
16
3
5
10
4
2
3
14
A shorter path will cost only 11
Shortest-Path Variants
Single-source single-destination (1-1): Find the shortest
path from source s to destination v.
Single-source all-destination(1-Many): Find the shortest
path from s to each vertex v.
Single-destination shortest-paths (Many-1): Find a shortest
path to a given destination vertex t from each vertex v.
All-pairs shortest-paths problem (Many-Many): Find a
shortest path from u to v for every pair of vertices u and v.
We talk about directed, weighted graphs
Shortest-Path Variants (Contd)
For un-weighted graphs, the shortest path problem is mapped to BFS
Since all weights are the same, we search for the smallest number of edges
BFS creates a tree called BFS-Tree
2
2
3
4
0 s
Shortest-Path Variants
No need to consider different solution or algorithm for each variant
(we reduce it into two types)
Single-source single-destination (1-1): Find the shortest
path from source s to destination v.
Single-source all-destination(1-Many): Find the shortest
path from s to each vertex v.
Single-destination shortest-paths (Many-1): Find a shortest
path to a given destination vertex t from each vertex v.
All-pairs shortest-paths problem (Many-Many): Find a
shortest path from u to v for every pair of vertices u and v.
Shortest-Path Variants
Single-Source Single-Destination (1-1)
Single-Source All-Destination (1-M)
-No good solution that beats 1-M variant
-Thus, this problem is mapped to the 1-M
variant
-Need to be solved (several algorithms)
-We will study this one
All-Sources Single-Destination (M-1)
All-Sources All-Destinations (M-M)
-Reverse all edges in the graph
-Thus, it is mapped to the (1-M) variant
-Need to be solved (several algorithms)
-We will study it (if time permits)
Shortest-Path Variants
Single-Source Single-Destination (1-1)
Single-Source All-Destination (1-M)
-No good solution that beats 1-M variant
-Thus, this problem is mapped to the 1-M
variant
-Need to be solved (several algorithms)
-We will study this one
All-Sources Single-Destination (M-1)
All-Sources All-Destinations (M-M)
-Reverse all edges in the graph
-Thus, it is mapped to the (1-M) variant
-Need to be solved (several algorithms)
-We will study it (if time permits)
Introduction
Generalization of BFS to handle weighted graphs
Direct Graph G = ( V, E ), edge weight fn ; w : E R
In BFS w(e)=1 for all e E
Weight of path p = v1 v2 vk is
k 1
w( p) w(vi , vi 1 )
i 1
Shortest Path
Shortest Path = Path of minimum weight
(u,v)=
min{(p) : u
v}; if there is a path from u to v,
otherwise.
Several Properties
1- Optimal Substructure Property
Theorem: Subpaths of shortest paths are also shortest paths
Let (1,k) = <v1, ..i, .. j.., .. ,vk > be a shortest path from v1 to vk
Let (i,j) = <vi, ... ,vj > be subpath of (1,k) from vi to vj
for any i, j
Then (I,j) is a shortest path from vi to vj
1- Optimal Substructure Property
Proof: By cut and paste
v0
v1
v2
v3
v4
v5
v6
v7
If some subpath were not a shortest path
We could substitute a shorter subpath to create a shorter
total path
Hence, the original path would not be shortest path
2- No Cycles in Shortest Path
Definition:
(u,v) = weight of the shortest path(s) from u to v
Negative-weight cycle: The problem is undefined
can always get a shorter path by going around the cycle again
cycle
<0
Positive-weight cycle : can be taken out and reduces the cost
3- Negative-weight edges
No problem, as long as no negative-weight cycles are
reachable from the source (allowed)
4- Triangle Inequality
Lemma 1: for a given vertex s in V and for every edge (u,v) E,
(s,v) (s,u) + w(u,v)
Proof: shortest path s v is no longer than any other path.
in particular the path that takes the shortest path s v and
then takes cycle (u,v)
u
s
Algorithms to Cover
Dijkstras Algorithm
Shortest Path is DAGs
Initialization
Maintain d[v] for each v in V
d[v] is called shortest-path weight estimate
and it is upper bound on (s,v)
INIT(G, s)
for each v V do
d[v]
[v] NIL
d[s] 0
Upper bound
Parent node
Relaxation
When you find an edge (u,v) then
check this condition and relax d[v] if
possible
RELAX(u, v)
if d[v] > d[u]+w(u,v) then
d[v] d[u]+w(u,v)
[v] u
u
Change d[v]
No chnage
Algorithms to Cover
Dijkstras Algorithm
Shortest Path is DAGs
Dijkstras Algorithm For Shortest Paths
Non-negative edge weight
Like BFS: If all edge weights are equal, then use BFS,
otherwise use this algorithm
Use Q = min-priority queue keyed on d[v] values
Dijkstras Algorithm For Shortest Paths
DIJKSTRA(G, s)
INIT(G, s)
S > set of discovered nodes
QV[G]
while Q do
uEXTRACT-MIN(Q)
SS U {u}
for each v in Adj[u] do
RELAX(u, v)
> May cause
> DECREASE-KEY(Q, v, d[v])
Example: Initialization Step
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
10
QV[G]
s
while Q do
uEXTRACT-MIN(Q)
5
SS U {u}
for each v in Adj[u] do
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
v
1
Example
u
10
s
Example
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
10
QV[G]
while Q do
uEXTRACT-MIN(Q)
s
SS U {u}
for each v in Adj[u] do
5
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
v
1
Example
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
10
QV[G]
while Q do
s
uEXTRACT-MIN(Q)
SS U {u}
for each v in Adj[u] do
5
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
v
1
Example
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
10
QV[G]
while Q do
s
uEXTRACT-MIN(Q)
SS U {u}
for each v in Adj[u] do
5
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
v
1
Example
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
10
QV[G]
while Q do
uEXTRACT-MIN(Q)
s
SS U {u}
for each v in Adj[u] do
5
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
v
1
Example
u
10
s
Dijkstras Algorithm Analysis
O(V)
DIJ KSTRA(G, s)
INIT(G, s)
S
> set of discovered nodes
QV[G]
O(V Log V)
while Q do
uEXTRACT-MIN(Q)
Total in the loop: O(V Log V)
SS U {u}
for each v in Adj[u] do
RELAX(u, v) > May cause
>DECREASE-KEY(Q, v, d[v])
Total in the loop: O(E Log V)
Time Complexity: O (E Log V)
Algorithms to Cover
Dijkstras Algorithm
Shortest Path is DAGs
Key Property in DAGs
If there are no cycles it is called a DAG
In DAGs, nodes can be sorted in a linear order such that all
edges are forward edges
Topological sort
Single-Source Shortest Paths in DAGs
Shortest paths are always well-defined in dags
no cycles => no negative-weight cycles even if
there are negative-weight edges
Idea: If we were lucky
To process vertices on each shortest path from left
to right, we would be done in 1 pass
Single-Source Shortest Paths in DAGs
DAG-SHORTEST PATHS(G, s)
TOPOLOGICALLY-SORT the vertices of G
INIT(G, s)
for each vertex u taken in topologically sorted order do
for each v in Adj[u] do
RELAX(u, v)
Example
6
r
s
0
1
u
7
4
3
Example
6
r
s
0
1
u
7
4
3
Example
6
r
s
0
t
2
1
u
7
4
3
Example
6
r
s
0
t
2
1
u
7
4
3
v
6
w
4
Example
6
r
s
0
t
2
1
u
7
4
3
v
5
w
4
Example
6
r
s
0
t
2
1
u
7
4
3
v
5
w
3
Example
6
r
s
0
t
2
1
u
7
4
3
v
5
w
3
Single-Source Shortest Paths in DAGs:
Analysis
O(V+E)
DAG-SHORTEST PATHS(G, s)
TOPOLOGICALLY-SORT the vertices of G
O(V)
INIT(G, s)
for each vertex u taken in topologically sorted order do
for each v in Adj[u] do
RELAX(u, v)
Total O(E)
Time Complexity: O (V + E)