This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
Unformatted text preview: COMP 250 Winter 2010 24  building a heap (fast), heapsort 3/12/2010 (modified 3/22) Building a heap in O ( n ) (fast) In the last two lectures we discussed a method for building a heap which, in the worst case, took about n log n swaps. But suppose you want to build a heap very quickly. For example, you might be using the heap to implement a priority queue, and from time to time you want to change the definition of how any two keys/nodes are compared. This requires that you rebuild the priority queue (heap), based on the new comparison definition. So let’s now look at a faster method for building a heap. We start off with a complete binary tree with n nodes and a definition for ordering these nodes, but we make no assumption about the present state of the ordering. We want to take these nodes and build a heap. [paragraph modified 3/22] The buildHeap() algorithm from lecture 22 built a heap from the top down by swapping elements up the heap from child to parent. Given that the first i − 1 elements already defined a heap, it compared the i th element to its parent (and grandparent, etc, if need be) and carries out a sequence of swaps. Worst case was that the ith element had to climb ⌊ log i ⌋ steps to the root. The faster buildHeap algorithm goes in the opposite direction(s). We build a heap from the bottom up , by swapping elements down the heap toward the leaves. The fast buildHeap algorithm is based on the following downHeap algorithm, which takes a complete binary tree that is represented as an array a and an index i (where 1 ≤ i ≤ n ). Suppose this binary tree has the property that node i ’s two children (if they exist) are heaps, but the subtree rooted at i might itself not be a heap because i might be greater than at least one of its children. The operation downHeap turns the tree rooted at i into a heap (by swapping...
View
Full
Document
This note was uploaded on 09/25/2011 for the course COMP 250 taught by Professor Blanchette during the Spring '08 term at McGill.
 Spring '08
 BLANCHETTE
 Computer Science, Sort

Click to edit the document details