Priority Queues and Binary Heaps Fundamental Data Structures and Algorithms Peter Lee February 4, 2003.

Slides:



Advertisements
Similar presentations
DATA STRUCTURES AND ALGORITHMS Lecture Notes 9 Prepared by İnanç TAHRALI.
Advertisements

CMSC 341 Binary Heaps Priority Queues. 8/3/2007 UMBC CSMC 341 PQueue 2 Priority Queues Priority: some property of an object that allows it to be prioritized.
Heaps, Heap Sort, and Priority Queues. Sorting III / Slide 2 Background: Binary Trees * Has a root at the topmost level * Each node has zero, one or two.
Priority Queues and Heaps Fundamental Data Structures and Algorithms Margaret Reid-Miller 29 January 2004.
Priority Queues And the amazing binary heap Chapter 20 in DS&PS Chapter 6 in DS&AA.
Priority Queue (Heap) & Heapsort COMP171 Fall 2006 Lecture 11 & 12.
CMPT 225 Priority Queues and Heaps. Priority Queues Items in a priority queue have a priority The priority is usually numerical value Could be lowest.
1 Chapter 6 Priority Queues (Heaps) General ideas of priority queues (Insert & DeleteMin) Efficient implementation of priority queue Uses of priority queues.
CS 315 March 24 Goals: Heap (Chapter 6) priority queue definition of a heap Algorithms for Insert DeleteMin percolate-down Build-heap.
Binary Heaps What is a Binary Heap? Array representation of a Binary Heap MinHeap implementation Operations on Binary Heaps: enqueue dequeue deleting an.
Binary Heaps What is a Binary Heap? Array representation of a Binary Heap MinHeap implementation Operations on Binary Heaps: enqueue dequeue deleting an.
Priority Queues. Container of elements where each element has an associated key A key is an attribute that can identify rank or weight of an element Examples.
Lecture 11 Binary Heap King Fahd University of Petroleum & Minerals College of Computer Science & Engineering Information & Computer Science Department.
1 Binary Heaps What is a Binary Heap? Array representation of a Binary Heap MinHeap implementation Operations on Binary Heaps: enqueue dequeue deleting.
1 Priority Queues (Heaps)  Sections 6.1 to The Priority Queue ADT  DeleteMin –log N time  Insert –log N time  Other operations –FindMin  Constant.
data ordered along paths from root to leaf
CMSC 341 Binary Heaps Priority Queues. 2 Priority: some property of an object that allows it to be prioritized WRT other objects (of the same type) Priority.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 8 Prepared by İnanç TAHRALI.
Priority Queues and Heaps. October 2004John Edgar2  A queue should implement at least the first two of these operations:  insert – insert item at the.
Priority Queues (Heaps)
CE 221 Data Structures and Algorithms Chapter 6: Priority Queues (Binary Heaps) Text: Read Weiss, §6.1 – 6.3 1Izmir University of Economics.
CMSC 341 Binary Heaps Priority Queues. 2 Priority: some property of an object that allows it to be prioritized WRT other objects (of the same type) Priority.
Intro. to Data Structures Chapter 6 Priority Queue (Heap) Veera Muangsin, Dept. of Computer Engineering, Chulalongkorn University 1 Priority Queue.
HEAPS. Review: what are the requirements of the abstract data type: priority queue? Quick removal of item with highest priority (highest or lowest key.
FALL 2005CENG 213 Data Structures1 Priority Queues (Heaps) Reference: Chapter 7.
AVL Trees and Heaps. AVL Trees So far balancing the tree was done globally Basically every node was involved in the balance operation Tree balancing can.
Priority Queues and Heaps Fundamental Data Structures and Algorithms Klaus Sutner January 29, 2004.
Course: Programming II - Abstract Data Types HeapsSlide Number 1 The ADT Heap So far we have seen the following sorting types : 1) Linked List sort by.
1 Priority Queues (Heaps). 2 Priority Queues Many applications require that we process records with keys in order, but not necessarily in full sorted.
Priority Queues and Heaps. John Edgar  Define the ADT priority queue  Define the partially ordered property  Define a heap  Implement a heap using.
Heaps and Priority Queues What is a heap? A heap is a binary tree storing keys at its internal nodes and satisfying the following properties:
Heaps and Heap Sort. Sorting III / Slide 2 Background: Complete Binary Trees * A complete binary tree is the tree n Where a node can have 0 (for the leaves)
CSE373: Data Structures & Algorithms Priority Queues
CS 201 Data Structures and Algorithms
Priority Queues (Heaps)
Priority Queues and Heaps
October 30th – Priority QUeues
Source: Muangsin / Weiss
Binary Heaps What is a Binary Heap?
Bohyung Han CSE, POSTECH
Heaps, Heap Sort, and Priority Queues
Priority Queues (Heaps)
Binary Heaps What is a Binary Heap?
Binary Heaps What is a Binary Heap?
ADT Heap data structure
Map interface Empty() - return true if the map is empty; else return false Size() - return the number of elements in the map Find(key) - if there is an.
7/23/2009 Many thanks to David Sun for some of the included slides!
CSCI2100 Data Structures Tutorial 7
Heaps, Heap Sort, and Priority Queues
CMSC 341: Data Structures Priority Queues – Binary Heaps
CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued
Binary Heaps Priority Queues
Instructor: Lilian de Greef Quarter: Summer 2017
CMSC 341 Lecture 14 Priority Queues & Heaps
Instructor: Lilian de Greef Quarter: Summer 2017
Heaps and the Heapsort Heaps and priority queues
Tree Representation Heap.
Binary Heaps Priority Queues
Hassan Khosravi / Geoffrey Tien
CE 221 Data Structures and Algorithms
CSE 332: Data Structures Priority Queues – Binary Heaps Part II
Heaps and Priority Queues
CSE373: Data Structures & Algorithms Lecture 7: Binary Heaps, Continued Dan Grossman Fall 2013.
Priority Queues (Heaps)
Priority Queues CSE 373 Data Structures.
CSE 373, Copyright S. Tanimoto, 2002 Priority Queues -
Heaps & Multi-way Search Trees
Priority Queues Binary Heaps
Priority Queues (Heaps)
Presentation transcript:

Priority Queues and Binary Heaps Fundamental Data Structures and Algorithms Peter Lee February 4, 2003

Announcements HW3 is available  due Monday, Feb.10, 11:59pm  start today! Quiz #1 available Thursday  an online quiz  requires up to one hour of uninterrupted time with a web browser  must be completed by Friday, 11:59pm HW4 in teams of two  go to recitation for details

Priority Queues

Priority queues Today we consider a useful abstract data type called the priority queue.

Priority queue ADT Assume we have objects x that can be compared using the < and == operators.  These are Comparable objects. insert(k, o)  Inserts comparable object k into the priority queue with object o. deleteMin()  Returns and removes the minimum element from the priority queue.

The priority queue interface create insert void insert (Comparable key, Object r) findMin Comparable findMin () deleteMin Comparable deleteMin ()

Priority Queues: Applications Event simulations (key is time) Shortest paths in a graph Huffman codes Sorting

Linked list  deleteMinO(1)O(N)  insert O(N)O(1) Search trees  All operationsO(log N) Heaps avg (assume random)worst  deleteMinO(log N) O(log N)  insert2.6O(log N) special case :  buildheapO(N)O(N) i.e., insert*N or Possible priority queue implementations

Linked list  deleteMinO(1)O(N)  insert O(N)O(1) Search trees  All operationsO(log N) Heaps avg (assume random)worst  deleteMinO(log N) O(log N)  insert2.6O(log N) special case :  buildheapO(N)O(N) i.e., insert*N or Possible priority queue implementations

Linked list  deleteMinO(1)O(N)  insert O(N)O(1) Search trees  All operationsO(log N) Heaps avg (assume random)worst  deleteMinO(log N) O(log N)  insert2.6O(log N) special case :  buildheapO(N)O(N) i.e., insert*N or Possible priority queue implementations

A Digression: Perfect and Complete Binary Trees

Perfect binary trees

Perfect binary trees

Perfect binary trees

Perfect binary trees How many nodes?

Perfect binary trees How many nodes?  N = = h=3h=3 N=15

Perfect binary trees How many nodes?  N = = 15   Most of the nodes are ______ h=3h=3 N=15

Perfect binary trees How many nodes?  N = = 15   Most of the nodes are leaves h=3 How many edges? h=3 N=15

Perfect binary trees How many nodes?  N = = 15  In general: N =  Most of the nodes are leaves h=3h=3 N=15

Perfect binary trees How many nodes?  N = = 15  In general: N = = 2 h  Most of the nodes are leaves h=3h=3 N=15

Quiz Break

Red-green quiz In a perfect binary tree, what is the sum of the heights of the nodes?  Give a mathematical characterization.  Give a tight upper bound (in big-O terms)

Perfect binary trees What is the sum of the heights? S = < N = O(N) h=3 N=15

Complete binary trees

Complete binary trees

Representing complete binary trees Linked structures?

Representing complete binary trees Linked structures? No! Instead, use arrays!

Representing complete binary trees Arrays  Parent at position i in the array  Children at positions 2i and 2i

Representing complete binary trees Arrays ( 1-based )  Parent at position i  Children at 2i and 2i

Representing complete binary trees Arrays ( 1-based )  Parent at position i  Children at 2i and 2i

Representing complete binary trees Arrays ( 1-based )  Parent at position i  Children at 2i (and 2i+1)

Representing complete binary trees Arrays ( 1-based )  Parent at position i  Children at 2i and 2i+1. public class BinaryHeap { private Comparable[] heap; private int size; public BinaryHeap(int capacity) { size=0; heap = new Comparable[capacity+1]; }...

Representing complete binary trees Arrays  Parent at position i  Children at 2i and 2i+1. Example: find the leftmost child int left=1; for(; left<size; left*=2); return heap[left/2]; Example: find the rightmost child int right=1; for(; right<size; right=right*2+1); return heap[(right-1)/2];

Back to Our Main Topic: Implementing Priority Queues with Binary Heaps

Binary heaps: the invariant Representation invariants 1. Structure property Complete binary tree (i.e. the elements of the heap are stored in positions 1…size of the array) 2. Heap order property Parent keys less than children keys

Heaps Representation invariant 1. Structure property Complete binary tree Hence: efficient compact representation 2. Heap order property Parent keys less than children keys Hence: rapid insert, findMin, and deleteMin O(log(N)) for insert and deleteMin O(1) for findMin

The heap order property Each parent is less than each of its children. Hence: Root is less than every other node.  (obvious proof by induction)

Operating with heaps Representation invariant: All methods must: 1. Produce complete binary trees 2. Guarantee the heap order property All methods may assume 1. The tree is initially complete binary 2. The heap order property holds

Constructor method All methods must: 1. Produce complete binary trees Trivially true 2. Guarantee the heap order property Also trivially true This is the base case

findMin () The code public boolean isEmpty() { return size == 0; } public Comparable findMin() { if(isEmpty()) return null; return heap[1]; } Does not change the tree  Trivially preserves the invariant

insert (Comparable x) Process 1. Create a “hole” at the next tree cell for x. heap[size+1] This preserves the completeness of the tree. 2. Percolate the hole up the tree until the heap order property is satisfied. This assures the heap order property is satisfied.

insert (Comparable x) Process 1. Create a “hole” at the next tree cell for x. heap[size+1] This preserves the completeness of the tree assuming it was complete to begin with. 2. Percolate the hole up the tree until the heap order property is satisfied. This assures the heap order property is satisfied assuming it held at the outset.

Percolation up public void insert(Comparable x) throws Overflow { if(isFull()) throw new Overflow(); int hole = ++size; for(; hole>1 && x.compareTo(heap[hole/2])<0; hole/=2) heap[hole] = heap[hole/2]; heap[hole] = x; }

Percolation up Bubble the hole up the tree until the heap order property is satisfied. hole = 11 HOP false Not really there... 21

Percolation up Bubble the hole up the tree until the heap order property is satisfied. hole = 11hole = 5 HOP falseHOP false

Percolation up Bubble the hole up the tree until the heap order property is satisfied. hole = 5hole = 2 HOP falseHOP true done

Percolation up public void insert(Comparable x) throws Overflow { if(isFull()) throw new Overflow(); int hole = ++size; for(; hole>1 && x.compareTo(heap[hole/2])<0; hole/=2) heap[hole] = heap[hole/2]; heap[hole] = x; } Integer division

deleteMin() /** * Remove the smallest item from the priority queue. the smallest item, or null, if empty. */ public Comparable deleteMin( ) { if(isEmpty()) return null; Comparable min = heap[1]; heap[1] = heap[size--]; percolateDown(1); return min; } Temporarily place last element at top Grab min element !!!

Percolation down Bubble the transplanted leaf value down the tree until the heap order property is satisfied

Percolation down Bubble the transplanted leaf value down the tree until the heap order property is satisfied

Percolation down Bubble the transplanted leaf value down the tree until the heap order property is satisfied done

percolateDown(int hole) private void percolateDown( int hole ) { int child = hole; Comparable tmp = heap[hole]; for( ; hole*2 <= size; hole=child ) { child = hole * 2; if(child!=size && heap[child+1].compareTo(heap[child]) < 0) child++; if(array[child].compareTo(tmp) < 0) heap[hole] = heap[child]; else break; } heap[hole] = tmp; } Is there a right child? Bubble up if smaller than tmp Initially 1 Select smaller child Finally, place the orphan Start at left child Exit loop if not bubbling

deleteMin () Observe that both components of the representation invariant are preserved by deleteMin. 1. Completeness The last cell ( heap[size] ) is vacated, providing the value to percolate down. This assures that the tree remains complete. 2. Heap order property

deleteMin () Observe that both components of the representation invariant are preserved by deleteMin. 1. Completeness The last cell ( heap[size] ) is vacated, providing the value to percolate down. This assures that the tree remains complete. 2. Heap order property

deleteMin () Observe that both components of the representation invariant are preserved by deleteMin. 1. Completeness The last cell ( heap[size] ) is vacated, providing the value to percolate down. This assures that the tree remains complete. 2. Heap order property The percolation algorithm assures that the orphaned value is relocated to a suitable position.

buildHeap() Start with complete (unordered) tree Starting from bottom, repeatedly call percolateDown() Void buildHeap () { for (int i = size/2; i>0; i--) percolateDown(i); }

buildHeap() performance At each iteration, have to do work proportional to the height of the current node Therefore, total running time is bounded by the sum of the heights of all of the nodes

Another Digression: Invariants

Representation Invariants Necessary for a clear understand an algorithm or piece of code. The most useful kind of comment you can make in a piece of code!

(Invariants) Plus ça change, plus c’est la même chose The role of an induction hypothesis

(Invariants and induction) Induction hypothesis  What you are allowed to assume At the start About the result values of a recursive call About the object state when a method is called  What you must deliver At the end Of the result values when the recursive call returns About the object state when the method returns

(Invariants and induction) Induction hypothesis  What you are allowed to assume At the start of a loop iteration About the result values of a recursive call About the object state when a method is called  What you must deliver At the end of the loop iteration Of the result values when the recursive call returns About the object state when the method returns

(Invariants and induction) Induction hypothesis  What you are allowed to assume About the result values of a recursive call About the object state when a method is called  What you must deliver Of the result values when the recursive call returns About the object state when the method returns

(Invariants and induction) Induction hypothesis  What you are allowed to assume At the start of a loop iteration About the result values of a recursive call About the object state when a method is called  What you must deliver At the end of the loop iteration Of the result values when the recursive call returns About the object state when the method returns

(Invariants and induction) Induction hypothesis  What you are allowed to assume At the start of a loop iteration About the result values of a recursive call About the object state when a method is called  What you must deliver At the end of the loop iteration Of the result values when the recursive call returns About the object state when the method returns

(Invariants) Plus ça change, plus c’est la même chose The role of an induction hypothesis Invariants in programs  Loop invariants  Recursion invariants  Representation invariants

(Representation invariant) What must always be true of the data structure when an operation completes. Theorem :  Suppose each constructor assures the representation invariant is initially correct.  Suppose each method preserves the representation invariant, assuming it is true initially.  Then the representation invariant will always be true at the completion of each method.

(Representation invariant) What must always be true of the data structure when an operation completes. Theorem :  Suppose each constructor assures the representation invariant is initially correct.  Suppose each method preserves the representation invariant, assuming it is true initially.  Then the representation invariant will always be true at the completion of each method.

(Representation invariants) What must always be true of the data structure when an operation completes. Theorem:  Suppose each constructor assures the representation invariant is initially correct.  Suppose each method preserves the representation invariant, assuming it is true initially.  Then the representation invariant will always be true at the completion of each method.  Assuming the code is not concurrent!

Heapsort Obviously we can use a priority queue to sort... just insert all the keys then do repeated deleteMins However we can take advantage of the fact that the heap always uses the first part of the array to do this with no extra space. This is called heapsort.

Heapsort Reverse the sense of the heap order (largest at the root) Start from position 0 in the array (children are 2i+1 and 2i+2) Call it percDown(a, i, len) Public static void heapsort(Comparable[] a) { for(int i = a.length/2; i>=0; i--) percDown(a, i, a.length); for (int j = a.length-1; j>0; j--) { swapReferences(a, 0, j); percDown(a, 0, j); }

Heapsort invariant At the start of the loop over j:  a[j]…a[a.length-1] are sorted  a[0]…a[j-1] are a heap