250 likes | 359 Vues
This lecture from CS2420 at Utah State University introduces HeapSort and the foundational properties of heaps. It covers the minimal and maximal heap properties, the structure of heaps as complete binary trees, and methods for packing heaps into arrays using level-order traversal. Key operations to maintain the heap property during insertions and deletions are discussed, along with examples to illustrate the restoration of heaps. Additionally, the lecture includes asymptotic analysis for building heaps and maintaining their integrity.
E N D
CS2420: Lecture 20 Vladimir Kulyukin Computer Science Department Utah State University
Outline • HeapSort (Chapter 7)
The Heap Property • A Heap is a Complete Binary Tree. All levels are filled except possibly the last one. • The Heap Property: • Minimal heap property: for every node X with parent P, the key in P is smaller than or equal to the key in X. • Maximum heap property: for every node X with parent P, the key in P is greater than or equal to the key in X.
The Heap Property P P X X The minimum heap property The maximum heap property
Packing Heaps into Arrays 1 16 2 3 14 10 We can convert this heap into a one dimensional array by doing a level-order traversal on it. 4 5 6 7 8 7 9 3 8 9 10 2 4 1
Packing Heaps into Arrays 1 16 We can convert this heap into an array by doing a level-order traversal on it. 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 Note that the index count of the array starts with 1. 2 4 1 1 2 3 4 5 6 7 8 9 10 0 16 14 10 8 7 9 3 2 4 1
Packing Heaps into Arrays 1 16 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 2 4 1 1 2 3 4 5 6 7 8 9 10 0 16 14 10 8 7 9 3 2 4 1
Interval Nodes and Leaves 1 16 2 3 14 10 4 5 6 7 8 7 9 3 8 9 10 2 4 1 1 2 3 4 5 6 7 8 9 10 0 16 14 10 8 7 9 3 2 4 1 Internal Nodes Leaves
Maintaining the Heap Property • A heap is a container so items can be inserted and deleted at any time. • The problem is that if we insert/delete an item, the heap property may be broken after the insertion/deletion. • We need to make sure that the heap property is restored after every insertion and deletion.
Maintaining the Property: Max Heap Example Heap Property is broken. 4 7 14 2 8 1 0 1 2 3 4 5 6 7 4 14 7 2 8 1
Maintaining the Property: Example 4 We swap 4 with the maximum of 14 and 7. 7 14 2 8 1 0 1 2 3 4 5 6 7 4 14 7 2 8 1
Maintaining the Property: Example 14 We swap 4 with the maximum of 2 and 8. 7 4 2 8 1 0 1 2 3 4 5 6 7 14 4 7 2 8 1
Maintaining the Property: Example 14 7 The heap property is now restored at every node. 8 2 4 1 0 1 2 3 4 5 6 7 14 8 7 2 4 1
RestoreHeap: Maintaining The Heap Property RestoreHeap(A, i) { int Max = 0; int LCH = LeftChild(i); int RCH = RightChild(i); If ( LCH <= A.size() && A[LCH] > A[i] ) { Max = LCH; } Else { Max = i; } If ( RCH <= A.size() && A[RCH] > A[MAX] ) { Max = RCH; } If ( Max != i ) { Swap(A[i], A[Max]); RestoreHeap(A, Max); } }
Building a Heap • Given the dimensions of the array A, discard all the leaves. The leaf indices are [N/2 + 1, N]. • Start from the Rightmost Inner (Non-Leaf) Node and go up the tree restoring the heap property at every inner node until you reach and restore the heap property at the root node.
Building a Max Heap: Example 1 10 2 3 5 20 4 5 6 7 11 15 21 34 There are 7 nodes in the heap; so the inner node range is [1, 3]. Thus, we start with node 3.
Building a Max Heap: Example 1 10 RestoreHeap(3) 5 2 20 3 5 4 6 7 11 15 21 34
Building a Max Heap: Example 1 10 RestoreHeap(2) 5 2 34 3 5 4 6 7 11 15 21 20
Building a Max Heap: Example RestoreHeap(1) 1 10 15 2 34 3 5 4 6 7 11 5 21 20
Building a Max Heap: Example 1 34 RestoreHeap(3) 3 15 2 10 5 4 6 7 11 5 21 20
Building a Max Heap: Example 1 34 3 15 2 21 5 4 6 7 11 5 10 20