# Priority Queues

###### Priority Queues
Binary Heaps Priority QueuesPriority Queues  Priority: some property of an object that allows it to be prioritized with respect to other objects of the same type  Min Priority Queue: homogeneous collection of Comparables with the following operations (duplicates are allowed). Smaller value means higher priority.  void insert (Comparable x)  void deleteMin( )  void deleteMin ( Comparable min)  Comparable findMin( )  Construct from a set of initial values  boolean isEmpty( )  boolean isFull( )  void makeEmpty( ) www.ThesisScientist.comPriority Queue Applications  Printer management:  The shorter document on the printer queue, the higher its priority.  Jobs queue within an operating system:  Users’ tasks are given priorities. System priority high.  Simulations  The time an event “happens” is its priority.  Sorting (heap sort)  An elements “value” is its priority. www.ThesisScientist.comPossible Implementations  Use a sorted list. Sorted by priority upon insertion.  findMin( ) list.front( )  insert( ) list.insert( )  deleteMin( ) list.erase( list.begin( ) )  Use ordinary BST  findMin( ) tree.findMin( )  insert( ) tree.insert( )  deleteMin( ) tree.delete( tree.findMin( ) )  Use balanced BST  guaranteed O(lg n) for RedBlack www.ThesisScientist.comMin Binary Heap  A min binary heap is a complete binary tree with the further property that at every node neither child is smaller than the value in that node (or equivalently, both children are at least as large as that node).  This property is called a partial ordering.  As a result of this partial ordering, every path from the root to a leaf visits nodes in a non decreasing order.  What other properties of the Min Binary Heap result from this property www.ThesisScientist.comMin Binary Heap Performance  Performance (n is the number of elements in the heap)  construction O( n )  findMin O( 1 )  insert O( lg n )  deleteMin O( lg n )  Heap efficiency results, in part, from the implementation  Conceptually a complete binary tree  Implementation in an array/vector (in level order) with the root at index 1 www.ThesisScientist.comMin Binary Heap Properties  For a node at index i  its left child is at index 2i  its right child is at index 2i+1  its parent is at index i/2  No pointer storage  Fast computation of 2i and i/2 by bit shifting i 1 = 2i i 1 = i/2 www.ThesisScientist.comHeap is a Complete Binary Tree www.ThesisScientist.comWhich satisfies the properties of a Heap www.ThesisScientist.comMin BinaryHeap Definition public class BinaryHeapAnyType extends Comparable super AnyType public BinaryHeap( ) / See online code / public BinaryHeap( int capacity ) / See online code / public BinaryHeap( AnyType items )/ Figure 6.14 / public void insert( AnyType x ) / Figure 6.8 / public AnyType findMin( ) / TBD / public AnyType deleteMin( ) / Figure 6.12 / public boolean isEmpty( ) / See online code / public void makeEmpty( ) / See online code / private static final int DEFAULTCAPACITY = 10; private int currentSize; // Number of elements in heap private AnyType array; // The heap array private void percolateDown( int hole )/ Figure 6.12 / private void buildHeap( ) / Figure 6.14 / private void enlargeArray(int newSize)/ code online / www.ThesisScientist.comMin BinaryHeap Implementation public AnyType findMin( ) if ( isEmpty( ) ) throw Underflow( ); return array1; www.ThesisScientist.comInsert Operation  Must maintain  CBT property (heap shape):  Easy, just insert new element at “the end” of the array  Min heap order  Could be wrong after insertion if new element is smaller than its ancestors  Continuously swap the new element with its parent until parent is not greater than it  Called sift up or percolate up  Performance of insert is O( lg n ) in the worst case because the height of a CBT is O( lg n ) www.ThesisScientist.comMin BinaryHeap Insert (cont.) / Insert into the priority queue, maintaining heap order. Duplicates are allowed. param x the item to insert. / public void insert( AnyType x ) if( currentSize == array.length 1 ) enlargeArray( array.length 2 + 1 ); // Percolate up int hole = ++currentSize; for( ; hole 1 x.compareTo(arrayhole/2) 0; hole/=2 ) array hole = array hole / 2 ; array hole = x; www.ThesisScientist.comInsert 14 www.ThesisScientist.comDeletion Operation  Steps  Remove min element (the root)  Maintain heap shape  Maintain min heap order  To maintain heap shape, actual node removed is “last one” in the array  Replace root value with value from last node and delete last node  Siftdown the new root value  Continually exchange value with the smaller child until no child is smaller. www.ThesisScientist.comMin BinaryHeap Deletion(cont.) / Remove the smallest item from the priority queue. return the smallest item, or throw UnderflowException, if empty. / public AnyType deleteMin( ) if( isEmpty( ) ) throw new UnderflowException( ); AnyType minItem = findMin( ); array 1 = array currentSize ; percolateDown( 1 ); return minItem; www.ThesisScientist.comMinBinaryHeap percolateDown(cont.) / Internal method to percolate down in the heap. param hole the index at which the percolate begins. / private void percolateDown( int hole ) int child; AnyType tmp = array hole ; for( ; hole 2 = currentSize; hole = child ) child = hole 2; if( child = currentSize array child + 1 .compareTo( array child ) 0 ) child++; if( array child .compareTo( tmp ) 0 ) array hole = array child ; else break; array hole = tmp; www.ThesisScientist.comdeleteMin www.ThesisScientist.comdeleteMin (cont.) www.ThesisScientist.comConstructing a Min BinaryHeap  A BH can be constructed in O(n) time.  Suppose we are given an array of objects in an arbitrary order. Since it’s an array with no holes, it’s already a CBT. It can be put into heap order in O(n) time.  Create the array and store n elements in it in arbitrary order. O(n) to copy all the objects.  Heapify the array starting in the “middle” and working your way up towards the root for (int index = n/2 ; index 0; index) percolateDown( index ); www.ThesisScientist.comConstructing a Min BinaryHeap(cont.) //Construct the binary heap given an array of items. public BinaryHeap( AnyType items ) currentSize = items.length; array = (AnyType) new Comparable (currentSize + 2)11/10 ; int i = 1; for( AnyType item : items ) array i++ = item; buildHeap( ); // Establish heap order property from an arbitrary // arrangement of items. Runs in linear time. private void buildHeap( ) for( int i = currentSize / 2; i 0; i ) percolateDown( i ); www.ThesisScientist.comPerformance of Construction h1  A CBT has 2 nodes on level h1.  On level hl, at most 1 swap is needed per node.  On level h2, at most 2 swaps are needed.  …  On level 0, at most h swaps are needed.  Number of swaps = S h h1 h2 0 = 2 0 + 2 1 + 2 2 + … + 2 h h h h i i i = 2 (hi)h 2 i2  i0 i0 i0 h+1 h+1 = h(2 1) ((h1)2 +2) h+1 = 2 (h(h1))h2 h+1 = 2 h2 www.ThesisScientist.comPerformance of Construction (cont.) h+1 h  But 2 h2 = O(2 ) h i h 2   But n = 1 + 2 + 4 + … + 2 = i0 h  Therefore, n = O(2 )  So S = O(n)  A heap of n nodes can be built in O(n) time. www.ThesisScientist.comHeap Sort  Given n values we can sort them in place in O(n log n) time  Insert values into array O(n)  heapify O(n)  repeatedly delete min O(lg n), n times  Using a min heap, this code sorts in reverse (high down to low) order.  With a max heap, it sorts in normal (low up to high) order.  Given an unsorted array A of size n for (i = n1; i = 1; i) x = findMin( ); deleteMin( ); Ai+1 = x; www.ThesisScientist.comLimitations  MinBinary heaps support insert, findMin, deleteMin, and construct efficiently.  They do not efficiently support the meld or merge operation in which 2 BHs are merged into one. If H and H are of size n and n , 1 2 1 2 then the merge is in O(n + n ) . 1 2 www.ThesisScientist.comLeftist Min Heap  Supports  findMin O( 1 )  deleteMin O( lg n )  insert O( lg n )  construct O( n )  merge O( lg n ) www.ThesisScientist.comLeftist Tree  The null path length, npl(X), of a node, X, is defined as the length of the shortest path from X to a node without two children (a nonfull node).  Note that npl(NULL) = 1.  A Leftist Tree is a binary tree in which at each node X, the null path length of X’s right child is not larger than the null path length of the X’s left child . I.E. the length of the path from X’s right child to its nearest nonfull node is not larger than the length of the path from X’s left child to its nearest nonfull node.  An important property of leftist trees:  At every node, the shortest path to a nonfull node is along the rightmost path. “Proof”: Suppose this was not true. Then, at some node the path on the left would be shorter than the path on the right, violating the leftist tree definition. www.ThesisScientist.comLeftist Min Heap  A leftist min heap is a leftist tree in which the values in the nodes obey heap order (the tree is partially ordered).  Since a LMH is not necessarily a CBT we do not implement it in an array. An explicit tree implementation is used.  Operations  findMin return root value, same as MBH  deleteMin implemented using meld operation  insert implemented using meld operation  construct implemented using meld operation www.ThesisScientist.comMerge // Merge rhs into the priority queue. // rhs becomes empty. rhs must be different from this. // param rhs the other leftist heap. public void merge( LeftistHeapAnyType rhs ) if( this == rhs ) return; // Avoid aliasing problems root = merge( root, rhs.root ); rhs.root = null; // Internal method to merge two roots. // Deals with deviant cases and calls recursive merge1. private NodeAnyType merge(NodeAnyType h1, NodeAnyType h2 ) if( h1 == null ) return h2; if( h2 == null ) return h1; if( h1.element.compareTo( h2.element ) 0 ) return merge1( h1, h2 ); else return merge1( h2, h1 ); www.ThesisScientist.comMerge (cont.) / Internal method to merge two roots. Assumes trees are not empty, and h1's root contains smallest item. / private NodeAnyType merge1( NodeAnyType h1, NodeAnyType h2 ) if( h1.left == null ) // Single node h1.left = h2; // Other fields in h1 already accurate else h1.right = merge( h1.right, h2 ); if( h1.left.npl h1.right.npl ) swapChildren( h1 ); h1.npl = h1.right.npl + 1; return h1; www.ThesisScientist.comMerge (cont.)  Performance: O( lg n )  The rightmost path of each tree has at most lg(n+1) nodes. So O( lg n ) nodes will be involved. www.ThesisScientist.comwww.ThesisScientist.comwww.ThesisScientist.comwww.ThesisScientist.comStudent Exercise  Show the steps needed to merge the Leftist Heaps below. The final result is shown on the next slide. 6 8 17 12 10 15 19 20 30 25 www.ThesisScientist.comStudent Exercise Final Result 6 8 17 12 19 10 20 15 30 25 www.ThesisScientist.comMin Leftist Heap Operations  Other operations implemented using Merge( )  insert (item)  Make item into a 1node LH, X  Merge(this, X)  deleteMin  Merge(left subtree, right subtree)  construct from N items  Make N LHs from the N values, one element in each  Merge each in  one at a time (simple, but slow)  use queue and build pairwise (complex but faster) www.ThesisScientist.comLH Construct  Algorithm: Make n leftist heaps, H ….H each with one data 1 n value Instantiate QueueLeftistHeap q; for (i = 1; i = n; i++) q.enqueue(H ); i Leftist Heap h = q.dequeue( ); while ( q.isEmpty( ) ) q.enqueue( merge( h, q.dequeue( ) ) ); h = q.dequeue( ); www.ThesisScientist.com
Website URL
Comment
Presentations
Free
##### Document Information
Category:
Presentations
User Name:
RyanCanon
User Type:
Teacher
Country:
United Arab Emirates