Data Structures

80
Data Structures Haim Kaplan & Uri Zwick December 2013 Binary Heaps 1

description

Data Structures. Binary Heaps. Haim Kaplan & Uri Zwick December 2013. Required ADT. Maintain items with keys subject to Insert(x,Q) min(Q) Deletemin(Q) Decrease-key(x,Q, Δ ) Delete(x,Q). Required ADT. Decrease-key(x,Q, Δ ): Can simulate by Delete(x,Q), insert(x- Δ ,Q). - PowerPoint PPT Presentation

Transcript of Data Structures

Data Structures

Haim Kaplan & Uri ZwickDecember 2013

Binary Heaps

1

Required ADT

• Maintain items with keys subject to

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

2

Required ADT

• Decrease-key(x,Q,Δ): Can simulate by

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

We can use Red-Black trees to implement all operations in O(log n) time

We want to implement Decrease-key in O(1) (amortized) time

3

Motivation

• Dijkstra’s algorithm for single source shortest path

• Prim’s algorithm for minimum spanning trees

4

Motivation

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

• Model the road-map with a graph

5

A Graph G=(V,E)

V is a set of vertices

E is a set of edges (pairs of vertices)

6

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)

7

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

8

Dijkstra’s algorithm

• Assume all weights are non-negative

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

9

s

s1

5

103

1

4

2s3

s2

s4

15 8

Example

10

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

0

s

s1

5

103

1

4

2s3

s2

s4

15 8

Example

11

s

s1

5

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

12

s

s1

5

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

13

s

s1

5

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

s

s1

5

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

15

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

S = {s}

Relax(s,s4)

16

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

15

Relax(s,s4)

S = {s}

17

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

15

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

S = {s}

18

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

15

10

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

S = {s}

19

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

15

10

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

S = {s}

20

s

s1

5

103

1

4

2s3

s2

s4

15 8

0

5

15

10

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

S = {s}

21

s

s1

5

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

22

s

s1

5

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

23

s

s1

5

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)

24

s

s1

5

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)

25

s

s1

5

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)

26

s

s1

5

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)

27

s

s1

5

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

28

s

s1

5

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

29

s

s1

5

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)

30

s

s1

5

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)

31

s

s1

5

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

32

s

s1

5

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

33

s

s1

5

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

34

s

s1

5

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

35

s

s1

5

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

36

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

37

Required ADT

• Maintain items with keys subject to

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

38

Required ADT

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

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

39

• 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|

Total running time: O(m log n) → O(m + n log n)

40

Heap• Heap is

An almost 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

41

• 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

Q42

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

Q43

0 1 2 3 4 5 6 7 8 9 10

Heap Representation I

info29key

11

Q

arraylen

9n

Store associated information directly in the array

Should only be used only for succinct information

john

Heap Representation II

info

key

11

Q

arraylen

9n

Store pointers to associated information

29

4

29

4infokey

pos

x

Heap Representation III

11

Q

arraylen

9n

Allow decrease-key operations

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 47

Delete the minimum

23

7

17

3365

1924 2629

7 23 17 24 29 26 19 65 33 40 79

7940

Q 48

Delete the minimum

23 17

3365

1924 2629

23 17 24 29 26 19 65 33 40 79

7940

Q 49

Delete the minimum

23

79

17

3365

1924 2629

79 23 17 24 29 26 19 65 33 40

40

Q 50

Delete the minimum

23

17

79

3365

1924 2629

17 23 79 24 29 26 19 65 33 40

40

Q 51

Delete the minimum

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40

40

Q 52

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

53

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

Inserting an item

23

17

19

3365

7924 2629

17 23 19 24 29 26 79 65 33 40

40

Q

Insert(15,Q)

55

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

56

Heapify-up

23

17

19

3365

7924 2615

17 23 19 24 15 26 79 65 33 40 29

40

Q

29

57

15

17

19

3365

7924 2623

17 15 19 24 23 26 79 65 33 40 29

40

Q

29

58

Heapify-up

17

15

19

3365

7924 2623

15 17 19 24 23 26 79 65 33 40 29

40

Q

29

59

Heapify-up

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 60

Other operations

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

• Can implement them easily using heapify

61

Heapsort (Williams, Floyd, 1964)

• Put the elements in an array• Turn the array into a heap• Do a delete-min and put the

deleted element at the last position of the array

• Reverse the array, or use a max-heap

62

65

79

26

3323

2924 1519

79 65 26 24 19 15 29 23 33 40 7

740

Q

Turn an array into a heap

63

0

1 2

3 4 5 6

7 8 9 10

65

79

26

3323

2924 1519

79 65 26 24 19 15 29 23 33 40 7

740

Q

Heapify-down(Q,4)

64

4

Turn an array into a heap

65

79

26

3323

2924 157

79 65 26 24 7 15 29 23 33 40 19

1940

Q

Heapify-down(Q,4)

65

Turn an array into a heap

65

79

26

3323

2924 157

79 65 26 24 7 15 29 23 33 40 19

1940

Q

Heapify-down(Q,3)

66

3

Turn an array into a heap

65

79

26

3324

2923 157

79 65 26 23 7 15 29 24 33 40 19

1940

Q

Heapify-down(Q,3)

67

Turn an array into a heap

65

79

26

3324

2923 157

79 65 26 23 7 15 29 24 33 40 19

1940

Q

Heapify-down(Q,2)

68

2

Turn an array into a heap

65

79

15

3324

2923 267

79 65 15 23 7 26 29 24 33 40 19

1940

Q

Heapify-down(Q,2)

69

Turn an array into a heap

65

79

15

3324

2923 267

79 65 15 23 7 26 29 24 33 40 19

1940

Q

Heapify-down(Q,1)

70

1

Turn an array into a heap

7

79

15

3324

2923 2665

79 7 15 23 65 26 29 24 33 40 19

1940

Q

Heapify-down(Q,1)

71

Turn an array into a heap

7

79

15

3324

2923 2619

79 7 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,1)

72

Turn an array into a heap

7

79

15

3324

2923 2619

79 7 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

73

0

Turn an array into a heap

79

7

15

3324

2923 2619

7 79 15 23 19 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

74

Turn an array into a heap

19

7

15

3324

2923 2679

7 19 15 23 79 26 29 24 33 40 65

6540

Q

Heapify-down(Q,0)

75

Turn an array into a heap

19

7

15

3324

2923 2640

7 19 15 23 40 26 29 24 33 79 65

6579

Q

Heapify-down(Q,0)

76

Turn an array into a heap

23

7

15

3379

2924 2619

6540

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

Total time = 77

At most n/2 nodes heapified at height 1

At most n/4 nodes heapified at height 2

At most n/8 nodes heapified at height 3

23

7

15

3379

2924 2619

6540

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

Total time = 78

At most n/2 nodes heapified at height 1

At most n/4 nodes heapified at height 2

At most n/8 nodes heapified at height 3

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

79

An example

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

80