3. Shortest Path
• Minimum length path from one
node to another (e.g. from a to
e, the shortest path is 2)
• Algorithms
b
a
c
d
e
– Breadth-First-Search, O(n2) in the
worst case
– Floyd’s, O(n3); but finds all
– BFS, starting at each node,
O(nm), which beats Floyd’s for
sparse graphs
Discussion #35
Chapter 7, Section 5.5
3/15
4. Shortest Path in Weighted Graphs
• Weights on edges: positive numbers
• Algorithms
– Simple BFS no longer works (e.g. the
shortest path from a to b is not the
edge that connects them)
– Floyd’s, O(n3); finds all
b
5
2
2
a
1
c
10
d
1
1
e
• Is there an algorithm that beats
Floyd’s?
– for the single best path?
– for all paths?
Discussion #35
Chapter 7, Section 5.5
4/15
5. Dijkstra’s Algorithm
• Find the shortest weighted path
between two given nodes.
(Easier to find the minimum
from one to all.)
• Intuitively, special BFS: choose
smallest accumulated path length
• Algorithm
b
5
2
2
a
c
10
1
d
1
1
e
1. Initialize D (distance) table.
2. Until all nodes are settled,
2a. find smallest distance & settle node.
2b. adjust distances in D for unsettled nodes.
Discussion #35
Chapter 7, Section 5.5
5/15
6. Important Aside: Greedy Algorithms
• A greedy algorithm always takes the best
immediate or local solution while finding an
answer.
• Greedy algorithms find optimal solutions for some
optimization problems, but may find (far) lessthan-optimal solutions for other optimization
problems.
– Dijkstra’s algorithm is greedy.
– There is no greedy algorithm for the traveling salesman
problem (find the shortest path to visit all nodes).
• When greedy algorithms work, they are usually
best.
Discussion #35
Chapter 7, Section 5.5
6/15
7. b
Trace of Dijkstra’s Algorithm
5
1. Initialize D (start=a)
2. Until all nodes are settled:
-find smallest distance & settle node.
-adjust distances in D for unsettled nodes.
iteration
adjust w/d
adjust w/c
adjust w/e
0
1
2
3
4
b
5
5
54
4
4
c
2
2
2
2
a
settled
d
1
1
e
∞
∞2
2
2
c
10
1
distance
a
0
2
d
1
1
e
a
a,d
a,d,c
a,d,c,e
a,d,c,e,b
all nodes settled
Circled numbers: shortest path lengths from a.
Discussion #35
Chapter 7, Section 5.5
7/15
8. b
Trace with Different Weights
1. Initialize D (start=a)
2. Until all nodes are settled:
-find smallest distance & settle node.
-adjust distances in D for unsettled nodes.
iteration
adjust w/d
adjust w/e
adjust w/c
0
1
2
3
4
b
6
6
6
65
5
c
4
4
43
3
2
4
a
settled
d
1
1
e
∞
∞2
2
c
10
1
distance
a
0
6
d
1
1
e
a
a,d
a,d,e
a,d,e,c
a,d,e,c,b
all nodes settled
Circled numbers: shortest path lengths from a.
Discussion #35
Chapter 7, Section 5.5
8/15
9. Proof that Dijkstra’s Algorithm Works
• Loop Invariant: For each settled node x, the
minimum distance from the start node s to x is
D(x).
• Additional observations (which help us in the
proof) are also loop invariants.
– (a) The shortest path from s to any settled node v
consists only of settled nodes.
– (b) The shortest path from s to any unsettled node
y is at least the largest settled difference so far.
Discussion #35
Chapter 7, Section 5.5
9/15
10. Proof by Induction
(on the number of iterations)
• Basis: 0 iterations: x = s, D(s) = 0 (which is the
minimum since all weights are positive)
– For (a): initially s = v, the only settled node
– For (b): initially all nodes except s are unsettled, and
the shortest path to each is at least 0, indeed > 0.
• Induction: Assume that the main loop invariant
and the loop invariants (a) and (b) hold for k
iterations and show that they hold for k+1
iterations.
Discussion #35
Chapter 7, Section 5.5
10/15
11. Proof of Induction Part (Sketch)
k settled
Assume Dijkstra’s
algorithm selects x
to be settled.
s...v x
k+1 settled
s...v x
Assume that the main loop invariant does not hold for the k+1st iteration, then there
is a shorter path from s to x. By the induction hypotheses, since Dijkstra’s algorithm
s .. . . v x
..w
y
Discussion #35
chooses x, the path from s to x is the shortest using
settled nodes, and the path from s to y is no shorter than
s to x. Since all weights are positive, the path from y to
x is at least 1, so that the assumed shorter path cannot
exist. Further (a) and (b) continue to hold: (a) After
settling x, the path from s to x consists of only settled
nodes. (b) The adjustments are only for paths from x to
any unsettled nodes. Since the distance from s to any
unsettled node y is at least D(x), and D(x) is the largest
settled distance so far.
Chapter 7, Section 5.5
11/15
12. Big-Oh for Dijkstra’s Algorithm
Adjacency List:
b
5
d
1
(c,2)
b
(a,5)
(c,2)
c
(a,2)
1
e
(b,5)
2
1
a
5
c
10
1
√ 0
2
2
a
D(x)
d
n
+n+
…
(a,1) + k1 (c,10) k2 +(e,1)+ n + k(n-1)
∞
e
(d,1)
(d,1)
Unroll the loop:
(b,2)
(d,10)
(e,1)
(c,1)
1. Initialize D (start=a)
2. Until all nodes are settled:
2a. find smallest distance & settle node. = (n−1)n = O(n2)
2b. adjust distances in D for unsettled nodes.
1.
= 2(m − # of edges in the
O(n) visit at most all edges for a node can’t=be more than
initialization) O(m)
{
2
O(n2.
)
dominates
n
O(n) each node needs to be settled
2a.
O(n) look through D(x) list to find smallest
2b.
O(k) for chosen node, go through list of length k
Discussion #35
Over all iterations, the k’s add up to 2(m − # of edges in the initialization).
Chapter 7, Section 5.5
12/15
13. Big-Oh for Dijkstra’s Algorithm
Adjacency List:
b
5
d
1
(c,2)
b
(a,5)
(c,2)
c
(a,2)
(b,2)
(d,10)
1
d
(a,1)
(c,10)
(e,1)
∞
e
(b,5)
2
1
a
5
c
10
1
√ 0
2
2
a
D(x)
e
(d,1)
(c,1)
(d,1)
(e,1)
1. Initialize D (start=a)
2. Until all nodes are settled:
2a. find smallest distance & settle node.
2b. adjust distances in D for unsettled nodes.
Clever using POTs:
1.
2.
O(mlogn)
O(nlogn) POT (Partially Ordered Tree) construction dominates
O(n) each node needs to be settled
2a.
O(logn) swap and bubble down
2b.
O(klogn) for chosen node, go through list of length k
{
dominates
Discussion #35
Over all iterations, the k’s add up to 2(m − # of edges in the initialization).
Chapter 7, Section 5.5
13/15
14. POT Construction/Manipulation
b
5
POT construction (start = a)
2
2
a
c
10
1
d
(b,5) ⇒
(b,5)
(c,2)
⇒
(c,2)
(b,5)
⇒
(d,1)
(d,1)
⇒
⇒
(b,5) (d,1) (b,5) (c,2)
(b,5) (c,2)
1
1
(c,2)
(e,∞)
e
Find smallest always on top; then swap and bubble down
no
swap
bubble down
adjust
bubbling
(d,1)
(e,∞)
(c,2)
(c,2)
(c,2)
⇒
⇒
⇒
⇒ needed ⇒
⇒
(b,5) (c,2)
(b,5) (e,∞) (b,5) (e,2)
(b,5) (c,2)
(b,5) (e,2)
(e,∞)
(d,1)
Adjust distances POT doubly linked to adjacency list nodes bubble up and
down, as needed, when going through list of chosen node to adjust values
Discussion #35
Chapter 7, Section 5.5
14/15
…
15. Dijkstra’s Algorithm vs. Floyd’s
• Dijkstra’s algorithm is O(mlogn) = O(n2logn) in the
worst case.
• Floyd’s algorithm is O(n3), but computes all shortest
paths.
• Dijkstra’s algorithm can compute all shortest paths
by starting it n times, once for each node. Thus, to
compute all paths, Dijkstra’s algorithm is O(nmlogn)
= O(n3logn) in the worst case.
• Which is better depends on the application.
– Dijkstra’s algorithm is better if only a path from a single
node to another or to all others is needed.
– For all paths, Dijkstra’s algorithm is better for sparse
graphs, and Floyd’s algorithm is better for dense graphs.
Discussion #35
Chapter 7, Section 5.5
15/15
Editor's Notes
Distances from a
if two the same, choose the first one
All circled nodes are shortest distances from node a to node x
Settled nodes are the shortest distances
Can I derive a shortest path?
Distances from a
if two the same, choose the first one
All circled nodes are shortest distances from node a to node x
Settled nodes are the shortest distances
Can I derive a shortest path?