Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf ·...

24
1 Heapsort Chapter 6 09/09/13 CS380 Algorithm Design and Analysis

Transcript of Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf ·...

Page 1: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

1

Heapsort

Chapter 6

09/09/13 CS380 Algorithm Design and Analysis

Page 2: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

2

Review of Binary Trees

• What is a binary tree?

• What is the depth of the node?

• What is the height of a node?

• What is the height of the tree?

• What is a complete binary tree?

09/09/13 CS380 Algorithm Design and Analysis

Page 3: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

3

Facts about Perfect Binary Trees

09/09/13 CS380 Algorithm Design and Analysis

Page 4: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

4

Complete Binary Trees

• Nodes at depth h (the lowest level) are as far left as possible

• What is the relationship between the height and the number of nodes?

09/09/13

CS380 Algorithm Design and Analysis

Page 5: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

5

Heaps

• A heap is an complete binary tree

• Extra nodes go from left to right at the lowest level

• Where the value at each node is ≥ the values at its children (if any)

• This is called the heap property for max-heaps

• Max or Min Heap

09/09/13 CS380 Algorithm Design and Analysis

Page 6: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

6

Example

09/09/13 CS380 Algorithm Design and Analysis

Page 7: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

7

Storing Heaps

• As arrays!

• Root of tree is:

• Parent of A[i] is:

• Left child of A[i] is:

• Right child of A[i] is:

09/09/13 CS380 Algorithm Design and Analysis

Page 8: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

8

Example

• n = 13

92 85 73 81 44 59 64 13 23 36 32 18 54

09/09/13 CS380 Algorithm Design and Analysis

Page 9: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

9

Functions on Heaps

• MAX-HEAPIFY

• BUILD-MAX-HEAP

• HEAPSORT

• MAX-HEA-INSERT

• HEAP-EXTRACT-MAX

• HEAP-INCREASE-KEY

• HEAP-MAXIMUM

09/09/13 CS380 Algorithm Design and Analysis

Page 10: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

10

MAX-HEAPIFY, p 154

1 int L = left(i)

2 int r = right(i)

3 if (L <= A.heap_size and A[L] > A[i] )

4 largest = L

5 else Largest = i

6 if (Right <= A.heap_size and A[R]> A[largest])

7 largest = R

8 if largest != i

9 swap ( A[i], A[largest] )

10 Max_Heapify(A, largest)

Max_Heapify(A, i) // A: Array, i: int

Page 11: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

11

Example

• 15 6 4 8 5 3 1 2 7 i = 2

09/09/13

CS380 Algorithm Design and Analysis

Page 12: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

12

Build_Max_Heap, p 157

1 A.heap_size = A.length

2 for i = floor ( A.length/2) to 1

3 Max_Heapify(A,i)

Build_Max_Heap (A) // A: Array

Page 13: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

13

Example

09/09/13

CS380 Algorithm Design and Analysis

• 4 3 7 13 1 20 12 16 2 18

Page 14: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

14

HeapSort, p 160

1 Build_Max_Heap(A)

2 for i = A.length to 2

3 swap(A[1], A[i])

4 A.heap_size = A.heap_size - 1

5 Max_Heapify(A, 1)

HeapSort(A) // A: Array

Page 15: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

15

Example

09/09/13

CS380 Algorithm Design and Analysis

• 20 18 12 16 3 7 4 13 2 1

Page 16: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

16

Priority Queues

• Priority Queues are an example of an application of heaps.

• A priority queue is a data structure for maintaining a set of elements, each with an associated key.

Page 17: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

17

Priority Queues

• Max-priority queue supports dynamic set operations:o INSERT(S, x): inserts element x into set S.

o MAXIMUM(S): returns element of S with largest key.

o EXTRACT-MAX(S): removes and returns element S with largest key.

o INCREASE-KEY(S, x, k): increases value of element x’s key to k. Assume k >= x’s current key value.

Page 18: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

18

HEAP-MAXIMUM(A)

Page 19: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

19

HEAP-EXTRACT-MAX

1 if A.heap_size < 1

2 error “underflow”

3 max = A[1]

4 A[1] = A[A.heap_size]

5 A.heap_size = A.heap_size -1

6 Max_Heapify(A,1)

7 return max

Heap_Extract_Max(A) // A: Array

Page 20: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

20

Example

• 15 6 4 8 5 3 1 2 7

Page 21: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

21

Heap_Increase_Key, p 164

1 if key < A[i]

2 error “new key is smaller than current key”

3 A[i] = key

4 while i > 1 and A[Parent(i)] < A[i]

5 swap (A[i], A[Parent(i)] )

6 i = Parent(i)

Heap_Increase_Key(A, i, key) // A: Array; i,key: ints

Why?

Page 22: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

22

Example

• Increase key of node 6 in previous example to 20

Page 23: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

23

MAX-HEAP-INSERT

• Given a key k to insert into the heap:o Insert a new node in the very last position in the

tree with the key -infinity.

o Increase the -infinity key to k using the HEAP-INCREASE-KEY procedure.

1 A.heap_size = A.heap_size + 1

2 A[A.heap_size] = - infinity

3 Heap_Increase_Key(A, A.heap_size, key)

Max_Heap_Insert(A, key) // A:array; key:int

// could replace Heap_Increase_Key with what?

Page 24: Heapsort - Pacific Universityzeus.cs.pacificu.edu/chadd/cs380f13/Lectures/04Lecture.pdf · HeapSort(A) // A: Array. 15 Example 09/09/1 3 CS380 Algorithm Design and Analysis

24

Example

• Insert 12 into the above heap.