lec16 dijkstra

24
Introduction to Algorithms 6.006 Lecture 16 Prof. Piotr Indyk

Upload: jiten-ahuja

Post on 22-Dec-2015

239 views

Category:

Documents


2 download

DESCRIPTION

pattern recognition

TRANSCRIPT

Introduction to Algorithms 6.006

Lecture 16 Prof. Piotr Indyk

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

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

BFS

a

c v x z

s d f 1

12

2

2 3

3 0

Running time: O(V+E)

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 ?

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

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.

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

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 (∝,-)

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)+

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)+

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)+

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)+

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)+

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)+

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)+

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)+

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

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)

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.

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

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)

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

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 ?