Top Banner
Introduction to Algorithms 6.006 Lecture 16 Prof. Piotr Indyk
24

lec16 dijkstra

Dec 22, 2015

Download

Documents

Jiten Ahuja

pattern recognition
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: lec16   dijkstra

Introduction to Algorithms 6.006

Lecture 16 Prof. Piotr Indyk

Page 2: lec16   dijkstra

Introduction to Algorithms 4/5/11 2

Menu

•  Last week: Bellman-Ford –  O(VE) time –  general weights

•  Today: Dijkstra – O( (V+E)logV ) time –  non-negative weights

Page 3: lec16   dijkstra

Introduction to Algorithms 4/5/11 3

Single source shortest path problem

•  Problem: Given a digraph G = (V, E) with non-negative edge-weight function w, and a node s, find δ(s, v)* for all v in V •  Want a fast algorithm… •  Question: what if all edge weights are equal to 1 ?

*Paths can be found as well

a

c vxz

s d f

Page 4: lec16   dijkstra

BFS

a

c v x z

s d f 1

12

2

2 3

3 0

Running time: O(V+E)

Page 5: lec16   dijkstra

Weighted graphs

Introduction to Algorithms 4/5/11 5

7

s

b

d

c

g

f 3

8

5

5

2

5

4

Question II: what if all edge weights are integers in the range 1…W ?

Page 6: lec16   dijkstra

Weighted graphs

Introduction to Algorithms 4/5/11 6

7

s

b

d

c

g

f 3

8

5

5

2

5

4

Algorithm: •  Create an unweighted graph by splitting each edge with weight w into w pieces •  Run BFS

Running time: O(V+WE)

3

5

Page 7: lec16   dijkstra

Introduction to Algorithms 4/5/11 7

Greedy approach

IDEA: Greedy. 1.  Maintain a set S of vertices whose shortest-

path distances from s are known. 2.  At each step add to S the vertex v ∈ V – S

whose distance estimate from s is minimal. 3.  Update the distance estimates of vertices

adjacent to v.

Page 8: lec16   dijkstra

Introduction to Algorithms 4/5/11 8

Dijkstra’s algorithm d[s] ← 0 for each v ∈ V – {s}

do d[v] ← ∞ S ← ∅ Q ← V ⊳ Q is a priority queue maintaining V – S while Q ≠ ∅

do u ← EXTRACT-MIN(Q) S ← S ∪ {u} for each v ∈ Adj[u]

do if d[v] > d[u] + w(u, v) then d[v] ← d[u] + w(u, v)

relaxation step

Implicit DECREASE-KEY

Page 9: lec16   dijkstra

Dijkstra: Example 7 (∝,-)

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(∝,-)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

initialization (∝,-)

Page 10: lec16   dijkstra

Dijkstra: Example 7 (∝,-)

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(5,a)

(8,a)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

1st iteration (3,a)+

Page 11: lec16   dijkstra

Dijkstra: Example

Introduction to Algorithms 4/5/11 11

(10,b)

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(3,a)+

(8,a)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

2nd iteration

(5,a)+

Page 12: lec16   dijkstra

Dijkstra: Example

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(3,a)+ (10,b)

(9,d)

(∝,-)

(∝,-)

(∝,-)

(∝,-)

3rd iteration

(5,a)+

(7,d)+

Page 13: lec16   dijkstra

Dijkstra: Example

Introduction to Algorithms 4/5/11 13

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(5,a)+

(3,a)+

(7,d)+

(10,b)

(15,c)

(∝,-)

(∝,-)

(∝,-)

4th iteration

(9,d)+

Page 14: lec16   dijkstra

Dijkstra: Example

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(3,a)+

(9,d)+

(15,c)

(∝,-)

(13,g)

(∝,-)

5th iteration

(5,a)+

(7,d)+

(10,b)+

Page 15: lec16   dijkstra

Dijkstra: Example

Introduction to Algorithms 4/5/11 15

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(5,a)+

(3,a)+

(7,d)+

(10,b)+

(15,c)

(16,f)

(∝,-)

6th iteration

(9,d)+ (13,g)+

Page 16: lec16   dijkstra

Dijkstra: Example

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(3,a)+

(9,d)+

(16,f)

(13,g)+

(19,i)

7th iteration

(5,a)+

(7,d)+

(10,b)+

(14,i)+

Page 17: lec16   dijkstra

Dijkstra: Example

Introduction to Algorithms 4/5/11 17

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(5,a)+

(3,a)+

(7,d)+

(10,b)+

(14,i)+ (19,i)

8th iteration

(9,d)+ (13,g)+

(15,e)+

Page 18: lec16   dijkstra

Dijkstra: Example

a

b

d

c

g

f

e h

i

j 3

8

5

5

2

7

5

8

4

5

6

6

1

4

1 6

2

(0,*)+

(3,a)+

(9,d)+

(15,e)+

(13,g)+

9th iteration

(17,h)+

(5,a)+

(7,d)+

(10,b)+

(14,i)+

(10,b)+

a

b

d

c

g

f

e h

i

j 3

5 2

7

4

1

4

1

2

(0,*)+

(5,a)+

(3,a)+

(7,d)+

(9,d)+

(14,i)+

(15,e)+

(13,g)+

(17,h)+

Shortest-path tree

Page 19: lec16   dijkstra

Introduction to Algorithms 4/5/11 19

Correctness — Part I Lemma. Initializing d[s] ← 0 and d[v] ← ∞ for all v ∈ V – {s} establishes d[v] ≥ δ(s, v) for all v ∈ V, and this invariant is maintained over any sequence of relaxation steps.

s u

v

d[u] w(u, v)

d[v]

Proof. Recall relaxation step:

if d[v] > d[u] + w(u, v) set d[v] ← d[u] + w(u, v)

Page 20: lec16   dijkstra

Introduction to Algorithms 4/5/11 20

Correctness — Part II Theorem. Dijkstra’s algorithm terminates with d[v] = δ(s, v) for all v ∈ V. Proof. •  It suffices to show that d[v] = δ(s, v) for every v ∈ V when v is added to S •  Suppose u is the first vertex added to S for which d[u] ≠ δ(s, u) . Let y be the first vertex in V – S along a shortest path from s to u, and let x be its predecessor:

s x y

u

S, just before adding u.

Page 21: lec16   dijkstra

Introduction to Algorithms 4/5/11 21

Correctness — Part II (continued)

•  Since u is the first vertex violating the claimed invariant, we have d[x] = δ(s, x) •  Since subpaths of shortest paths are shortest paths, it follows that d[y] was set to δ(s, x) + w(x, y) = δ(s, y) just after x was added to S •  Consequently, we have d[y] = δ(s, y) ≤ δ(s, u) ≤ d[u] •  But, d[y] ≥ d[u] since the algorithm chose u first •  Hence d[y] = δ(s, y) = δ(s, u) = d[u] - contradiction

s x y

uS

Page 22: lec16   dijkstra

Introduction to Algorithms 4/5/11 22

Analysis of Dijkstra

degree(u) times

|V | times

DECREASE-KEY

Time = Θ(V)·TEXTRACT-MIN + Θ(E)·TDECREASE-KEY

while Q ≠ ∅ do u ← EXTRACT-MIN(Q)

S ← S ∪ {u} for each v ∈ Adj[u]

do if d[v] > d[u] + w(u, v) then d[v] ← d[u] + w(u, v)

Page 23: lec16   dijkstra

Introduction to Algorithms 4/5/11 23

Analysis of Dijkstra (continued)

Time = Θ(V)·TEXTRACT-MIN + Θ(E)·TDECREASE-KEY

Q TEXTRACT-MIN TDECREASE-KEY Total

array O(V) O(1) O(V2) binary heap O(lg V) O(lg V) O(E lg V)

Fibonacci heap

O(lg V) amortized

O(1) amortized

O(E + V lg V) worst case

Page 24: lec16   dijkstra

Introduction to Algorithms 4/5/11 24

Tuesday: generic algorithm

d[s] ← 0 for each v ∈ V – {s}

do d[v] ← ∞ initialization

while there is an edge (u, v) ∈ E s. t. d[v] > d[u] + w(u, v) do select one such edge “somehow” set d[v] ← d[u] + w(u, v) endwhile

relaxation step

s u

v

d[u] w(u, v)

d[v] How to do it in O( (V+E)logV ) time ?