* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Lecture 10
Survey
Document related concepts
Transcript
Priority Queues CS 110: Data Structures and Algorithms First Semester, 2010-2011 Definition ► The Priority Queue Data Structure stores elements with assigned priorities ► insertion of an object must include a priority level (key) ► removal of an object is based on the priority levels of the elements in the queue; the object whose level is smallest gets removed first ► ► Need an Entry interface/class Entry encapsulates a key and the object/record stored ► Could be an interface so the actual class containing the key and object implements this interface ► PriorityQueue Interface public interface PriorityQueue Could be an Object instead of { int to allow for other key types; e.g. String public int size(); public boolean isEmpty(); public Entry insert( int key, Object value) public Entry min() throws EmptyPriorityQueueException; public Entry removeMin() throws EmptyPriorityQueueException; } List-based Implementations ► Using either an array or a linked list, the elements can be stored as a sequence of entries ► The sequence of entries can be stored in the order the elements arrive (unsorted list implementation ) ► Or, sorted by key (sorted list implementation) Unsorted List Implementation ► Insertion is done such that the incoming element is appended to the list ► An O( 1 ) operation ► Removal involves scanning the array or the linked list and determining the element with the minimum-valued key If using an array, elements need to be adjusted upon removal ► An O( n ) operation regardless because of the scan ► Sorted List Implementation ► Insertion is done such that the incoming element is stored or inserted in its proper place (elements are sorted by key) ► An O( n ) operation ► Removal ► ► ► operation: If using an array, the sequence is stored in decreasing order, and removal involves returning the last element If using a linked list, the sequence is stored in increasing order, and removal involves returning the first element (head of the list) An O( 1 ) operation regardless Using a Heap ►A heap is a (complete) binary tree of entries such that for every node except for the root, the node’s key is greater than or equal to its parent’s ► The root of a heap contains the element with the minimum-valued key (highest priority) ► Insertion and removal operations for a heap both run in O( log n ) time Heap Data Structure (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) Heaps and BTs using Arrays ► Heaps are complete (all levels filled up except perhaps for last level) which makes an array implementation of a binary tree most appropriate ► But… we need to ensure that the completeness of binary tree stays even after insertion or removal of elements Insertion into a Heap Add new element at the end of the array ► Compare the key of the newly added element with it’s parent’s key to check if heap property is observed ► If heap property is violated, swap element at last position with element at its parent ► ► ► ► repeat this process for the parent stop once heap property is satisfied In effect, the new element is “promoted” to its appropriate level Inserting into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) (2,T) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) (2,T) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) (2,T) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (2,T) (20,B) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (2,T) (20,B) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (2,T) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (6,Z) (20,B) Insertion into a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (2,T) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (6,Z) (20,B) Insertion into a Heap (2,T) (5,A) (15,K) (16,X) (25,J) (4,C) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (6,Z) (20,B) Removal from a Heap ► Vacate root position of the tree ► Element in the root to be returned by the method Get last element in the array, place it in the root position ► Compare this element’s key with the root’s children’s keys, and check if the heap property is observed ► If heap property is violated, swap root element with the child with minimum key value ► ► ► repeat process for the child position stop when heap property is satisfied Removal from a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) Removal from a Heap (4,C) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) Removal from a Heap (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (13,W) (20,B) Removal from a Heap (13,W) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (13,W) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (13,W) (5,A) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (5,A) (13,W) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (5,A) (13,W) (15,K) (16,X) (25,J) (6,Z) (9,F) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (5,A) (9,F) (15,K) (16,X) (25,J) (6,Z) (13,W) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (5,A) (9,F) (15,K) (16,X) (25,J) (6,Z) (13,W) (14,E) (12,H) (7,Q) (11,S) (20,B) Removal from a Heap (5,A) (9,F) (15,K) (16,X) (25,J) (6,Z) (12,H) (14,E) (13,W) (7,Q) (11,S) (20,B) Why O( log n )? Worst-case number of swaps is proportional to the height of the tree ► What is the height h of a binary tree with n nodes? ► If binary tree is complete: ► ► ► ► ► ► 2h <= n < 2h+1 log 2h <= log n < log 2h+1 h <= log n < h+1 h is O( log n ) Insertion and removal for a heap is O( log n ) Time Complexity Summary Operation Insertion Unsorted List O( 1 ) Removal O( n ) Sorted List O( n ) O( 1 ) Heap O( log n ) O( log n ) About Priority Queues ► Choose an implementation that fits the application’s requirements ► Note trade-off between insertion and removal time complexity ► Keys need not be integers Need the concept of a comparator (e.g., can’t use ≤ operator for String values ) ► Value of the key parameter in the insert method needs to be validated if the key is of type Object ►