![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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/5.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/23.jpg)
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](https://reader036.vdocuments.us/reader036/viewer/2022071021/5fd52e9bcaa9be3f9e29d08a/html5/thumbnails/24.jpg)
24
Example
• Insert 12 into the above heap.