heaps chapter 6 in clrs. motivation dijkstra’s algorithm for single source shortest path prim’s...

77
Heaps Chapter 6 in CLRS

Post on 19-Dec-2015

219 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Heaps

Chapter 6 in CLRS

Page 2: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Motivation

• Dijkstra’s algorithm for single source shortest path

• Prim’s algorithm for minimum spanning trees

Page 3: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Motivation

• Want to find the shortest route from New York to San Francisco

• Model the road-map with a graph

Page 4: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

A Graph G=(V,E)

V is a set of vertices

E is a set of edges (pairs of vertices)

Page 5: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Model driving distances by weights on the edges

2 19

9

1

5

13

1710

148

21

V is a set of vertices

E is a set of edges (pairs of vertices)

Page 6: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Source and destination

V is a set of vertices

E is a set of edges (pairs of vertices)

2 19

9

1

5

13

1710

148

21

Page 7: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Dijkstra’s algorithm

• Assume all weights are non-negative

• Finds the shortest path from some fixed vertex s to every other vertex

Page 8: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

Example

Page 9: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Maintain an upper bound d(v) on the shortest path to v

0

s

s15

103

1

4

2s3

s2

s4

15 8

Example

Page 10: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

Maintain an upper bound d(v) on the shortest path to v

0

A node is either scanned (in S) or labeled (in Q)

Initially S = and Q = V

Page 11: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

Pick a vertex v in Q with minimum d(v) and add it to S

0

Initially S = and Q = V

Page 12: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

Pick a vertex v in Q with minimum d(v) and add it to S

0

Initially S = and Q = V

v

w15

For every edge (v,w) where w in Q relax(v,w)

Page 13: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

Relax(v,w)

If d(v) + w(v,w) < d(w) then d(w) ← d(v) + w(v,w) π(w) ← v

0

v

w

For every edge (v,w) where w in Q relax(v,w)

15

Page 14: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

S = {s}

Relax(s,s4)

Page 15: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

15

Relax(s,s4)

S = {s}

Page 16: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

15

Relax(s,s4)Relax(s,s3)

S = {s}

Page 17: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

15

10

Relax(s,s4)Relax(s,s3)

S = {s}

Page 18: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

15

10

Relax(s,s4)Relax(s,s3)Relax(s,s1)

S = {s}

Page 19: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

10

Relax(s,s4)Relax(s,s3)Relax(s,s1)

S = {s}

Page 20: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

10

S = {s}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 21: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

10

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 22: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

10

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s1,s3)

Page 23: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

9

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s1,s3)

Page 24: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

15

9

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s1,s3)Relax(s1,s2)

Page 25: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

9

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s1,s3)Relax(s1,s2)

Page 26: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

9

S = {s,s1}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 27: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

9

S = {s,s1,s2}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 28: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

9

S = {s,s1,s2}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s2,s3)

Page 29: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2}

Pick a vertex v in Q with minimum d(v) and add it to S

Relax(s2,s3)

Page 30: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 31: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2,s3}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 32: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2,s3,s4}

Pick a vertex v in Q with minimum d(v) and add it to S

Page 33: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2,s3,s4}

When Q = then the d() values are the distances from s

The π function gives the shortest path tree

Page 34: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

s

s15

103

1

4

2s3

s2

s4

15 8

0

5

6

15

8

S = {s,s1,s2,s3,s4}

When Q = then the d() values are the distances from s

The π function gives the shortest path tree

Page 35: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Implementation of Dijkstra’s algorithm

• We need to find efficiently the vertex with minimum d() in Q

• We need to update d() values of vertices in Q

Page 36: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Required ADT

• Maintain items with keys subject to

• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ)

Page 37: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Required ADT

• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ): Can simulate

by Delete(x,Q), insert(x-Δ,Q)

Page 38: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ): Can simulate

by Delete(x,Q), insert(x-Δ,Q)

How many times we do these operations ?

n = |V|

n

n

m = |E|

Page 39: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Do we know an algorithm for this ADT ?

• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ): Can simulate

by Delete(x,Q), insert(x-Δ,Q)Yes! Use balanced binary search trees (RB-trees)

Page 40: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Heap

• Heap is A complete binary tree The items at the children of v are

greater than the one at v

Heap-ordered tree

23

7

17

3365

1924 2629

7940

Page 41: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

• Representing a heap with an array Get the elements from top to

bottom, from left to right

Array Representation

23

7

17

3365

1924 2629

7 23 17 24 29 26 19 65 33 40 79

7940

Q

Page 42: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Array Representation

23

7

17

3365

1924 2629

7 23 17 24 29 26 19 65 33 40 79

7940

• Left(i): 2i+1• Right(i): 2i+2• Parent(i): (i-1)/2

Q

Page 43: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Find the minimum

23

7

17

3365

1924 2629

7 23 17 24 29 26 19 65 33 40 79

7940

• Return Q[0]

Q

Page 44: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23

7

17

3365

1924 2629

7 23 17 24 29 26 19 65 33 40 79

7940

Q

Page 45: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23 17

3365

1924 2629

23 17 24 29 26 19 65 33 40 79

7940

Q

Page 46: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23

79

17

3365

1924 2629

79 23 17 24 29 26 19 65 33 40

40

Q

Page 47: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23

17

79

3365

1924 2629

17 23 79 24 29 26 19 65 33 40

40

Q

Page 48: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40

40

Q

Page 49: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Delete the minimum

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40

40

Q

Q[0] ← Q[size(Q)-1]

Heapify-down(Q,0)

size(Q) ← size(Q)-1

Page 50: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Heapify-down(Q,i)• Heapify-down(Q, i)• l ← left(i)• r ← right(i)• smallest ← i• if l < size(Q) and Q[l] < Q[smallest]

then smallest ← l• if r < size(Q) and Q[r] < Q[smallest]

then smallest ← r• if smallest > i then Q[i] ↔ Q[smallest]• Heapify-down(Q,

smallest)

Page 51: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Inserting an item

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40

40

Q

Insert(15,Q)

Page 52: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Inserting an item

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40 15

40

Q

Insert(15,Q)Q[size(Q)] ← 15

15

Heapify-up(Q,size(Q))size(Q) ← size(Q) + 1

Page 53: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Inserting an item

23

17

19

3365

7924 2615

17 23 19 24 15 26 79 65 33 40 29

40

Q

29

Page 54: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Inserting an item

15

17

19

3365

7924 2623

17 15 19 24 23 26 79 65 33 40 29

40

Q

29

Page 55: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Inserting an item

17

15

19

3365

7924 2623

15 17 19 24 23 26 79 65 33 40 29

40

Q

29

Page 56: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Q

Heapify-up

• Heapify-up(Q, i)• while i > 0 and Q[i] <

Q[parent(i)]• do Q[i] ↔ Q[parent(i)]• i ← parent(i)

17

15

19

3365

7924 2623

40 29

15 17 19 24 23 26 79 65 33 40 29

Page 57: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Other operations

• Decrease-key(x,Q,Δ)• Delete(x,Q)

• Can implement them easily using heapify

Page 58: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Heapsort (Williams, Floyd, 1964)

• Put the elements in an array• Make the array into a heap• Do a deletemin and put the

deleted element at the last position of the array

Page 59: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Put the elements in the heap

65

79

26

3323

2924 1519

79 65 26 24 19 15 29 23 33 40 7

740

Q

Page 60: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

26

3323

2924 1519

79 65 26 24 19 15 29 23 33 40 7

740

Q

Make the elements into a heap

Page 61: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Make the elements into a heap

65

79

26

3323

2924 1519

79 65 26 24 19 15 29 23 33 40 7

740

Q

Heapify-down(Q,4)

Page 62: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

26

3323

2924 157

79 65 26 24 7 15 29 23 33 40 19

1940

Q

Heapify-down(Q,4)

Page 63: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

26

3323

2924 157

79 65 26 24 7 15 29 23 33 40 19

1940

Q

Heapify-down(Q,3)

Page 64: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

26

3324

2923 157

79 65 26 23 7 15 29 24 33 40 19

1940

Q

Heapify-down(Q,3)

Page 65: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

26

3324

2923 157

79 65 26 23 7 15 29 24 33 40 19

1940

Q

Heapify-down(Q,2)

Page 66: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

15

3324

2923 267

79 65 15 23 7 26 29 24 33 40 19

1940

Q

Heapify-down(Q,2)

Page 67: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

65

79

15

3324

2923 267

79 65 15 23 7 26 29 24 33 40 19

1940

Q

Heapify-down(Q,1)

Page 68: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

7

79

15

3324

2923 2665

79 7 15 23 65 26 29 24 33 40 19

1940

Q

Heapify-down(Q,1)

Page 69: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

7

79

15

3324

2923 2619

79 7 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,1)

Page 70: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

7

79

15

3324

2923 2619

79 7 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

Page 71: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

79

7

15

3324

2923 2619

7 79 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

Page 72: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

19

7

15

3324

2923 2679

7 19 15 23 79 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

Page 73: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

19

7

15

3324

2923 2640

7 19 15 23 40 26 29 24 33 79 65

6579

Q

Heapify-down(Q,0)

Page 74: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

23

7

15

3379

2924 2619

6540

We have at most n/2 nodes heapified at height 1

How much time does it take to build the heap this way ?

We have at most n/4 nodes heapified at height 2We have at most n/8 nodes heapified at height 3Total time =

Page 75: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

23

7

15

3379

2924 2619

6540

We have at most n/2 nodes heapified at height 1

How much time does it take to build the heap this way ?

We have at most n/4 nodes heapified at height 2We have at most n/8 nodes heapified at height 3Total time =

Page 76: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

Summary

• We can build the heap in linear time

• We still have to deletemin the elements one by one in order to sort that will take O(nlog(n))

Page 77: Heaps Chapter 6 in CLRS. Motivation Dijkstra’s algorithm for single source shortest path Prim’s algorithm for minimum spanning trees

An example

• Given an array of length n, find the k smallest numbers.

77