Algorithms
Shortest Path Problems
CS 8833
Algorithms
G = (V, E)
weighted directed graph
w: ER
weight function
Weight of a path p = <v0, v1,. . ., vn>
n
w( p) w(vi 1v)
i 1
Shortest path weight from u to v
p
(u, v) min{ w( p) : u v} if a u, v path exits
otherwise
Shortest path from u to v: Any path from u to v
with w(p) = (u,v)
[v]
predecessor of v on a path
CS 8833
Algorithms
CS 8833
Algorithms
Variants
Single-source shortest paths:
find shortest paths from source vertex to
every other vertex
Single-destination shortest paths:
find shortest paths to a destination from
every vertex
Single-pair shortest-path
find shortest path from u to v
All pairs shortest paths
CS 8833
Algorithms
Lemma 25.1
Subpaths of shortest paths are shortest
paths.
Given G=(G,E)
w: E R
Let p = p = <v1, v2,. . ., vk> be a shortest path
from v1 to vk
For any i,j such that 1 i j k, let pij be a
subpath from vi to vj.. Then pij is a shortest
path from vi to vj.
CS 8833
Algorithms
p
1
i
CS 8833
Algorithms
j
k
Corollary 25.2
Let G = (V,E)
w: E R
Suppose shortest path p from a source s
to vertex v can be decomposed into
p’
s
u
v
for vertex u and path p’.
Then weight of the shortest path from s to
v is
(s,v) = (s,u) + w(u,v)
CS 8833
Algorithms
Lemma 25.3
Let G = (V,E)
Source vertex s
w: E R
For all edges (u,v)E
(s,v) (s,u) + w(u,v)
CS 8833
Algorithms
u1
u2
u3
s
u4
un
CS 8833
Algorithms
v
Relaxation
Shortest path estimate
d[v] is an attribute of each vertex which is an
upper bound on the weight of the shortest
path from s to v
Relaxation is the process of
incrementally reducing d[v] until it is an
exact weight of the shortest path from s
to v
CS 8833
Algorithms
INITIALIZE-SINGLE-SOURCE(G, s)
1. for each vertex v V(G)
2.
3.
d[v]
do
[v] nil
4. d[s] 0
CS 8833
Algorithms
CS 8833
Algorithms
Relaxing an Edge (u,v)
Question: Can we improve the shortest
path to v found so far by going through
u?
If yes, update d[v] and [v]
CS 8833
Algorithms
RELAX(u,v,w)
1. if d[v] > d[u] + w(u,v)
2.
then d[v] d[u] + w(u,v)
3.
CS 8833
[v] u
Algorithms
EXAMPLE 1
s
s
Relax
u
CS 8833
v
Algorithms
u
v
EXAMPLE 2
s
s
Relax
u
CS 8833
v
Algorithms
u
v
Dijkstra’s Algorithm
Problem:
– Solve the single source shortest-path
problem on a weighted, directed graph
G(V,E) for the cases in which edge weights
are non-negative
CS 8833
Algorithms
Dijkstra’s Algorithm
Approach
– maintain a set S of vertices whose final
shortest path weights from the source s
have been determined.
– repeat
» select vertex from V-S with the minimum
shortest path estimate
» insert u in S
» relax all edges leaving u
CS 8833
Algorithms
DIJKSTRA(G,w,s)
1. INITIALIZE-SINGLE-SOURCE(G,s)
2. S
3. Q V[G]
4. while Q
5.
do u EXTRACT-MIN(Q)
6.
S S {u}
7.
for each vertex v Adj[u]
8.
do RELAX(u,v,w)
CS 8833
Algorithms
CS 8833
Algorithms
Analysis of Dijkstra’s
Algorithm
Suppose priority Q is:
– an ordered (by d) linked list
» Building the Q
» Each EXTRACT-MIN
» This is done V times
» Each edge is relaxed one time
» Total time O(V2 + E) = O(V2)
CS 8833
Algorithms
O(V lg V)
O(V)
O(V2)
O(E)
Analysis of Dijkstra’s
Algorithm
Suppose priority Q is:
– a binary heap
» BUILD-HEAP
» Each EXTRACT-MIN
» This is done V times
» Each edge is relaxation
» Each edge relaxed one time
» Total time O(V lg V + E lg V))
CS 8833
Algorithms
O(V)
O(lg V)
O(V lg V)
O(lg V)
O(E lg V)
Properties of Relaxation
Lemma 25.4
G=(V,E)
w: E R
(u,v) E
After relaxing edge (u,v) by executing
RELAX(u,v,w) we have
d[v] d[u] + w(u,v)
CS 8833
Algorithms
Lemma 25.5
– Given:
G=(V,E)
w: E R
source s V
Graph initialized by
INITIALIZE-SINGLE-SOURCE(G,s)
– then
d[v] (s,v) for all v V
and this invariant is maintained over all relaxation
steps
Once d[v] achieves a lower bound (s,v), it
never changes
CS 8833
Algorithms
Corollary 25.6
– Given:
G=(V,E)
w: E R
source s V
No path connects s to given v
– then
after initialization
d[v] (s,v)
and this inequality is maintained over all
relaxation steps.
CS 8833
Algorithms
Lemma 25.7
– Given:
G=(V,E)
w: E R
source s V
Let s - - u v be the shortest path in G
for all vertices u and v.
Suppose G initialized by INITIALIZESINGLE-SOURCE is followed by a
sequence of relaxations including
RELAX(u,v,w)
– Then d[u] = (s,u) prior to call implies that
d[u] = (s,u) after the call
CS 8833
Algorithms
Bottom Line
Therefore, relaxation causes the
shortest path estimates to descend
monotonically toward the actual
shortest-path weights.
CS 8833
Algorithms
Shortest-Paths Tree of G(V,E)
The shortest-paths tree at S of G(V,E) is
a directed subgraph G’-(V’,E’), where
V’ V, E’E, such that
– V’ is the set of vertices reachable from S in
G
– G’ forms a rooted tree with root s, and
– for all v V’, the unique simple path from s
to v in G’ is a shortest path from s to v in G
CS 8833
Algorithms
Goal
We want to show that successive
relaxations will yield a shortest-path tree
CS 8833
Algorithms
Lemma 25.8
– Given:
G=(V,E)
w: E R
source s V
Assume that G contains no negativeweight cycles reachable from s.
– Then after the graph is initialized with
INITIALIZE-SINGLE-SOURCE
• the predecessor subgraph G forms a
rooted tree with root s, and
• any sequence of relaxation steps on
edges in G maintains this property as an
invariant.
CS 8833
Algorithms
Algorithms
Bellman-Ford Algorithm
Directed-Acyclic Graphs
All Pairs-Shortest Path Algorithm
CS 8833
Algorithms
Why does Dijkstra’s greedy
algorithm work?
Because we know that when we add a
node u to the set S, the value d is the
length of the shortest path from s to u.
But, this only works if the edges of the
graph are nonnegative.
CS 8833
Algorithms
7
a
b
10
c
-4
Would Dikjstra’s Algorithm work with this
graph?
CS 8833
Algorithms
7
a
b
6
c
-14
What is the length of the shortest path from
a to c in this graph?
CS 8833
Algorithms
Bellman-Ford Algorithm
The Bellman-Ford algorithm can be
used to solve the general single source
shortest path problem
Negative weights are allowed
The algorithm detects negative cycles
and returns false if the graph contains
one.
CS 8833
Algorithms
BELLMAN-FORD(G,w,s)
1 INITIALIZE-SINGLE-SOURCE(G,s)
2 for i 1 to |V[G]| -1
3
do for each edge (u,v) E[G]
4
do RELAX(u,v,w)
5 for each edge (u,v) E[G]
6
7
do if d[v] > d[u] + w(u,v)
then return false
8 return true
CS 8833
Algorithms
When there are no cycles of negative
length, what is maximum number of
edges in a shortest path when the graph
has |V[G]| vertices and |E[G]| edges?
CS 8833
Algorithms
Dynamic Programming
Formulation
The following recurrence shows how the
Bellman Ford algorithm computes the d
values for paths of length k.
d k [u] min{ d k 1[u ], min {dist k 1[i] w(i, u )}}
i
CS 8833
Algorithms
7
a
10
Processing order
1
b
c
-4
(a,c)
(b,a)
-5
9
d
(c,b)
(c,d)
(d,b)
CS 8833
Algorithms
2
3
Complexity of the Bellman
Ford Algorithm
Time complexity:
Performance can be improved by
– adding a test to the loop to see if any d
values were updated on the previous
iteration, or
– maintain a queue of vertices whose d value
changed on the previous iteration-only
process these on the next iteration
CS 8833
Algorithms
Single-source shortest paths
in directed acyclic graphs
Topological sorting is the key to efficient
algorithms for many DAG applications.
A topological sort of a DAG is a linear
ordering of all of its vertices such that if
G contains an edge (u,v), then u
appears before v in the ordering.
CS 8833
Algorithms
b
e
c
a
g
d
a
d
CS 8833
f
c
b
Algorithms
e
f
g
DAG-SHORTEST-PATHS(G,w,s)
1 topologically sort the vertices of G
2 INITIALIZE-SINGLE-SOURCE(G,s)
3 for each vertex u taken in topological order
4
do for each vertex v Adj[u]
5
do RELAX(u,v,w)
CS 8833
Algorithms
Topological Sorting
TOPOLOGICAL-SORT(G)
1 call DFS(G) to compute finishing times f[v] for each
vertex v
2 as each vertex is finished, insert it onto the front of
a linked list
3 return the linked list of vertices
CS 8833
Algorithms
Depth-first search
Goal: search all edges in the graph one
time
Strategy: Search deeper in the graph
whenever possible
Edges are explored out of the most
recently discovered vertex v that still
has unexplored edges leaving it.
Backtrack when a dead end is
encountered
CS 8833
Algorithms
Predecessor subgraph
The predecessor subgraph of a depth
first search
– forms a depth-first forest
– composed of depth-first trees
The edges in E are called tree edges
CS 8833
Algorithms
Vertex coloring scheme
All vertices are initially white
A vertex is colored gray when it is
discovered
A vertex is colored black when it is
finished (all vertices adjacent to the
vertex have been examined completely)
CS 8833
Algorithms
Time Stamps
Each vertex v has two time-stamps
– d[v] records when v is first discovered (and
grayed)
– f[v] records when the search finishes
examining its adjacency list (and is
blackened)
For every vertex u
– d[u] < f[u]
CS 8833
Algorithms
Color and Time Stamp
Summary
Vertex u is
– white before d[u]
– gray between d[u] and f[u]
– black after f[u]
Time is a global variable in the
pseudocode
CS 8833
Algorithms
DFS(G)
1 for each vertex u V[G]
2
3
do color[u] white
[u] nil
4 time 0
5 do for each vertex u Adj[u]
6
do if color[u] = white
7
then DFS-VISIT(u)
CS 8833
Algorithms
DFS-VISIT(u)
1 color[u] gray
2 d[u] time
time time +1
3 for each vertex v Adj[u]
4
do if color[v] = white
then [v] u
5
6
DFS-VISIT(v)
7 color[u] black
8 f[u] time
CS 8833
time time +1
Algorithms
b
e
1/
a
c
g
d
CS 8833
Algorithms
f
b 2/
1/
a
e
c
g
d
CS 8833
Algorithms
f
b 2/
1/
a
3/
c
g
d
CS 8833
e
Algorithms
f
b 2/
1/
a
3/
4/
c
g
d
CS 8833
e
Algorithms
f
b 2/
1/
a
3/
4/5
c
g
d
CS 8833
e
Algorithms
f
b 2/
1/
a
3/6
4/5
c
g
d
CS 8833
e
Algorithms
f
b 2/7
1/
a
3/6
4/5
c
g
d
CS 8833
e
Algorithms
f
b 2/7
1/
a
8/ c
e
4/5
g
d
CS 8833
3/6
Algorithms
f
b 2/7
1/
a
8/9 c
e
4/5
g
d
CS 8833
3/6
Algorithms
f
b 2/7
1/
a
3/6
8/9 c
4/5
g
10/
d
CS 8833
e
Algorithms
f
b 2/7
1/
a
8/9 c
e
4/5
g
10/
d
CS 8833
3/6
Algorithms
11/
f
b 2/7
1/
a
8/9 c
e
4/5
g
10/
d
CS 8833
3/6
Algorithms
11/12
f
b 2/7
1/
a
8/9 c
e
4/5
g
10/13
d
CS 8833
3/6
Algorithms
11/12
f
b 2/7
1/14
3/6
8/9 c
4/5
a
g
10/13
d
CS 8833
e
Algorithms
11/12
f
Running time of DFS
lines 1-3 of DFS
lines 5-7 of DFS
lines 2-6 of DFS-VISIT
CS 8833
Algorithms
Running Time of Topological
Sort
DFS
Insertion in linked list
CS 8833
Algorithms
8
b 7
e
6
4
7
7
10
2
9 c
14
a
5
6
1
3
12
13
d
CS 8833
Algorithms
9
f
g
Running Time for DAGSHORTEST-PATHS
Topological sort
Initialize-single source
3-5 each edge examined one time
CS 8833
Algorithms
© Copyright 2026 Paperzz