0% found this document useful (0 votes)
9 views

Slides09 - Dijkstra

dijkstra algorithm pdf ppt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views

Slides09 - Dijkstra

dijkstra algorithm pdf ppt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

Dijkstra’s Algorithm

Shortest Path Problem


Directed graph G = (V, E)
Source s
le = length of edge e
le ≥ 0 for all edges e

Shortest path problem: (Google Maps!) find shortest path


from s to all other nodes
1
a c
2
1 3 1 e 1 f
4
b d
1
Simplification

For now, let’s just find the lengths of the


shortest paths to every other node

We’ll show how to recover the paths later


Dijkstra’s Algorithm
Idea: explore outward by distance
Maintain set S of explored nodes: for u ∈ S, we know
the length d(u) of the shortest path from s to u.
Initialize S = { s }, d(s) = 0.
Repeatedly find shortest path to any node v ∉ S that
remains in S until the final edge e = (u, v)
S = S ∪ {v}, d(v) = d(u) + le

1
a c
2
3 1
S 1 1 e f
4
b d
1
Dijkstra’s Algorithm
Repeatedly find shortest path to any node v ∉ S that
remains in S until the final edge e = (u, v)

Minimize:
d’(v) = min { d(u) + le : u ∈ S, e = (u, v) ∈ E }

1
a c
2
3 1
S 1 1 e f
4
b d
1
Dijkstra’s Algorithm

Node d()
1
a c
2
1 3 1 e 1 f
4
b d
1
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f
4
b d
1
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f b 1
4
b d
1
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f b 1
4 c 1
b d
1
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f b 1
4 c 1
b d
1 d 2
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f b 1
4 c 1
b d
1 d 2
e 3
Dijkstra’s Algorithm

Node d()
a
1
c
2
a 0
1 3 1 e 1 f b 1
4 c 1
b d
1 d 2
e 3
f 4
Example

Second example on board


Dijkstra’s Algorithm: Implementation

Dijkstra’s Algorithm (G, s) {


" S = {s} // S is the set of explored nodes
" d(s) = 0" // d is the distance to the node from s

" while S ≠ V { // there are unexplored nodes


select a node v ∉ S with at least one edge from S to
minimize d’(v) = min { d(u) + le : u ∈ S, e = (u, v) ∈ E }
" " add v to S
" " d(v) = d’(v)
"}

How do we recover a path with length d(v)?


Dijkstra’s Algorithm: Implementation

Dijkstra’s Algorithm (G, s) {


" S = {s} // S is the set of explored nodes
" d(s) = 0" // d is the distance to the node from s

" while S ≠ V { // there are unexplored nodes


select a node v ∉ S with at least one edge from S to
minimize d’(v) = min { d(u) + le : u ∈ S, e = (u, v) ∈ E }
" " add v to S
" " d(v) = d’(v)
prev(v) = argmin { d(u) + le : u ∈ S, e = (u, v) ∈ E }
"}
Proof of correctness: start in
small groups, complete on board
Dijkstra’s Algorithm: Implementation

Dijkstra’s Algorithm (G, s) {


" S = {s} // S is the set of explored nodes
" d(s) = 0" // d is the distance to the node from s

" while S ≠ V { // there are unexplored nodes


select a node v ∉ S with at least one edge from S to
minimize d’(v) = min { d(u) + le : u ∈ S, e = (u, v) ∈ E }
" " add v to S
" " d(v) = d’(v)
prev(v) = argmin { d(u) + le : u ∈ S, e = (u, v) ∈ E }
"}
How do we implement this efficiently?
Dijkstra’s Algorithm (G, s) {
" S = {s} // S is the set of explored nodes
" d’(s) = 0" // explicitly maintain the d’ values
d’(v) = ∞ for all v ∉ S

while S != V { // there are unexplored nodes


Let v be the node that minimizes d’(v)
d(v) = d’(v)
for each edge (v, w) where v ∈ S, w ∉ S {
" " " d’(v) = min( d’(v), d(v) + l(v, w) )
"" }
"}
}

Data structure?
Running Time

With heap-based priority queue, running time


of Dijkstra’s algorithm is:

O(m) - traverse edges

O(n log n) - n extractMin operations

O(m log n) - m changeKey operations

Total: O(m log n)

You might also like