cs 315 oct 21 goals: heap (chapter 6)
DESCRIPTION
CS 315 Oct 21 Goals: Heap (Chapter 6) priority queue definition of a heap Algorithms for Insert DeleteMin percolate-down Build-heap. Priority queue primary operations: Insert deleteMin secondary operations: Merge (union) - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/1.jpg)
CS 315 Oct 21
Goals:• Heap (Chapter 6)
• priority queue • definition of a heap • Algorithms for
• Insert• DeleteMin• percolate-down• Build-heap
![Page 2: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/2.jpg)
Priority queue
• primary operations:•Insert•deleteMin
• secondary operations:•Merge (union)•decreaseKey•increaseKey
•Performance goal:• O(log n) for all operations (worst-case)
![Page 3: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/3.jpg)
Array implementation of priority queue
• option 1: keep the array sorted• insert O(n) time• deleteMin O(1) time
• option 2: array is not sorted• insert O(1) time• deleteMin O(n) time
Similar performance can be observed with sorted array and unsorted array.
All these options require O(n) operations for one of the two operations.
![Page 4: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/4.jpg)
More efficient implementations of priority queue
• binary heap
• skew heap
• binomial heap
• binary search tree
No pointers are used (like in hashing)
Uses pointer (like a linked list)
![Page 5: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/5.jpg)
Binary Heap as an array and as a tree
Array of 10 keys stored in A[1] through A[10]
Can be viewed as a tree. Index j has index 2j and 2j+1 as children.
![Page 6: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/6.jpg)
Connection between size and height of a heap
h = 1 h = 2 h = 2 h = 3
h = 3
In general, if the number of nodes is N, height is at most = O(log N)
![Page 7: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/7.jpg)
Max-Heap property
Key at each node must be bigger than or equal to its two children.
Min-heap: parent key < = child key.
Left-child can be < or = or > than right-child. See above example.
![Page 8: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/8.jpg)
MinHeap and non-Min Heap examples
21
24
65 26 32
31 19
16
68
13
A MinHeap
Violates MinHeap property 21>6
21
6
65 26 32
31 19
16
68
13
Not a Heap
21
24
65 26 32
31 19
16
68
13
Violates heap structural property
Not a Heap
21
24
65 26 32
31 19
16
13
Violates heap structural property
Not a Heap
![Page 9: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/9.jpg)
Heap class definition
3
87
47
1
2 3
4 5
A 1 2 3 4 5 3 7 4 7 8
class BinaryHeap {private: vector<Comparable> array; int currentSize; public: // member functions }
Note: currentSize is different from the size of the vector (which is the number of allocated memory cells).
![Page 10: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/10.jpg)
3
87
472 3
5
Insert 2 into the heap
1
4
Heap Insertion Example
Size = 6, so initially, j= 6; Since H[j/2]= 4 > 2, H[3] is copied to H[6]. Thus the heap now looks as follows:
3
87
72 3
54
1
4
The new value of j=3. Since H[j/2] =H[1] = 3 is also greater than 2, H[1] copied to H[3].Now the heap looks as in the next slide.
6
Create a hole and percolate it up.
![Page 11: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/11.jpg)
87
372 3
5
1
4
The new value of j = [3/2] = 1.
Now, j/2 = 0 so the iteration stops.
The last line sets H[j] = H[1] = 2.
2
87
372 3
5
1
4
4 6
4 6
The final heap looks as follows:
Heap Insertion Example continued
![Page 12: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/12.jpg)
Code for insert
void insert(const Comparble & x) { if (currentSize == array.size() – 1) array.reSize(array.size() * 2); //percolate up int hole = ++currentSize; for (; hole > 1 && x < array[ hole / 2] >; hole/= 2) array[ hole ] = array[ hole / 2 ]; array[ hole ] = x;
}
Try some more examples and make sure that the code works correctly.
![Page 13: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/13.jpg)
Complexity of insert operation The height of a heap with n nodes is O(log n). The insert procedure percolates up along a path from a leaf to the root.
Along the path at each level, one comparison and one data movement is performed.
Conclusion: Insert performs O (log n) elementary operations (comparisons and data movements) to insert a key into a heap of size n in the worst-case.
![Page 14: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/14.jpg)
DeleteMin Operation
• Observation: The minimum key is at the root.
• FindMin() can be performed in O(1) time:
Comparable findMin() { if (currentSize == 0) cout << “heap is empty.” << endl; else return array[1]; }
• Deleting this key creates a hole at the root and we perform percolate down to fill the hole.
![Page 15: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/15.jpg)
Example of DeleteMin
87
4112 3
5
1
14
After deleting the min key, the hole is at the root. How should we fill the hole?
We also need to vacate the index 6 since the size of the heap now reduces to 5.
We need to find the right place for key 14.
6
2
87
4112 3
5 146
1
4 4
![Page 16: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/16.jpg)
Example of DeleteMin
87
4112 3
5 146
Hole should be filled with smallest key, and it is in array[2] or array[3].
![Page 17: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/17.jpg)
Example of DeleteMin
87
4112 3
5
1
87
112 3
5 146146
4
87
112 3
5
14
4Try some more examples
![Page 18: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/18.jpg)
DeleteMin – Outline of general case
L R
iHole is currently in index i.its children are 2i and 2i+1.
Suppose array[2i] = x, array[2i+1]= y.
• Case 1: (k <= x) && (k <= y) In this case, put k in array[I] and we are done.
•Case 2: (k > x) && (y > x). Thus, x is the minimum of the three keys k, x and y. We move the key x up so the hole percolates to 2i. Now the hole percolates down to 2i.
•Case 3: (k >x) && (x >y). Move y up and the hole percolates down to 2i+1.
• Case 4: the hole is at a leaf. put k there and this terminates
?
x yVacated key = k
![Page 19: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/19.jpg)
Code for delete-min
/**
* Remove the minimum item and place it in minItem.
* Throws Underflow if empty.
*/
void deleteMin( Comparable & minItem )
{
if( isEmpty( ) )
throw UnderflowException( );
minItem = array[ 1 ];
array[ 1 ] = array[ currentSize-- ];
percolateDown( 1 );
}
![Page 20: CS 315 Oct 21 Goals: Heap (Chapter 6)](https://reader035.vdocuments.mx/reader035/viewer/2022062408/56813437550346895d9b2a34/html5/thumbnails/20.jpg)
Code for percolateDown
void percolateDown( int hole )
{
int child;
Comparable tmp = array[ hole ];
for( ; hole * 2 <= currentSize; hole = child )
{
child = hole * 2;
if( child != currentSize && array[ child + 1 ] < array[ child ] )
child++;
if( array[ child ] < tmp )
array[ hole ] = array[ child ];
else
break;
}
array[ hole ] = tmp;
}