CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued Tyler Robison Summer 2010 1.

Slides:



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

COL 106 Shweta Agrawal and Amit Kumar
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 the amazing binary heap Chapter 20 in DS&PS Chapter 6 in DS&AA.
Heaps, Heap Sort, and Priority Queues
CSE332: Data Abstractions Lecture 4: Priority Queues Dan Grossman Spring 2010.
Priority Queue (Heap) & Heapsort COMP171 Fall 2006 Lecture 11 & 12.
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 CSE 373 Data Structures Lecture 11. 2/5/03Binary Heaps - Lecture 112 Readings Reading ›Sections
Heaps and heapsort COMP171 Fall Sorting III / Slide 2 Motivating Example 3 jobs have been submitted to a printer in the order A, B, C. Sizes: Job.
Priority queues CS310 – Data Structures Professor Roch Weiss, Chapter 6.9, 21 All figures marked with a chapter and section number are copyrighted © 2006.
Chapter 6: Priority Queues Priority Queues Binary Heaps Mark Allen Weiss: Data Structures and Algorithm Analysis in Java Lydia Sinapova, Simpson College.
Priority Queues  Queues: first-in first-out in printer schedule  Disadvantage: short job, important job need to wait  Priority queue is a data structure.
1 Binary heaps binary tree that satisfy two properties –structural property (is a complete tree) –heap-ordering property (minimum item on top) Can have.
0 Course Outline n Introduction and Algorithm Analysis (Ch. 2) n Hash Tables: dictionary data structure (Ch. 5) n Heaps: priority queue data structures.
CSE 326: Data Structures Lecture #17 Priority Queues Alon Halevy Spring Quarter 2001.
CSE 326: Data Structures Binomial Queues Ben Lerner Summer 2007.
1 Chapter 8 Priority Queues. 2 Implementations Heaps Priority queues and heaps Vector based implementation of heaps Skew heaps Outline.
CS 146: Data Structures and Algorithms June 23 Class Meeting Department of Computer Science San Jose State University Summer 2015 Instructor: Ron Mak
The Binary Heap. Binary Heap Looks similar to a binary search tree BUT all the values stored in the subtree rooted at a node are greater than or equal.
data ordered along paths from root to leaf
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 9.
CSE373: Data Structures & Algorithms Lecture 6: Priority Queues Dan Grossman Fall 2013.
1 Heaps (Priority Queues) You are given a set of items A[1..N] We want to find only the smallest or largest (highest priority) item quickly. Examples:
DATA STRUCTURES AND ALGORITHMS Lecture Notes 8 Prepared by İnanç TAHRALI.
Priority Queues (Heaps)
David Luebke 1 12/23/2015 Heaps & Priority Queues.
CSE373: Data Structures & Algorithms Lecture 6: Priority Queues Kevin Quinn Fall 2015.
CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued Dan Grossman Spring 2012.
Data StructuresData Structures Priority Queue. Recall Queues FIFO:First-In, First-Out Some contexts where this seems right? Some contexts where some things.
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.
David Luebke 1 2/5/2016 CS 332: Algorithms Introduction to heapsort.
1 CSE 326: Data Structures Priority Queues (Heaps) Lecture 9: Monday, Jan 27, 2003.
CSE373: Data Structures & Algorithms Lecture 8: Priority Queues Aaron Bauer Winter 2014.
CSE 332 Data Abstractions: Priority Queues, Heaps, and a Small Town Barber Kate Deibel Summer 2012 June 25, 2012CSE 332 Data Abstractions, Summer
2 Binary Heaps What if we’re mostly concerned with finding the most relevant data?  A binary heap is a binary tree (2 or fewer subtrees for each node)
CSE373: Data Structures & Algorithms Lecture 8: AVL Trees and Priority Queues Catie Baker Spring 2015.
CSE373: Data Structures & Algorithms Lecture 9: Priority Queues and Binary Heaps Linda Shapiro Spring 2016.
CSE 326: Data Structures Lecture #6 Putting Our Heaps Together Steve Wolfman Winter Quarter 2000.
CSE332: Data Abstractions Lecture 4: Priority Queues Dan Grossman Spring 2012.
Nov 2, 2001CSE 373, Autumn Hash Table example marking deleted items + choice of table size.
Heaps, Heap Sort, and Priority Queues. Background: Binary Trees * Has a root at the topmost level * Each node has zero, one or two children * A node that.
CSE373: Data Structures & Algorithms Lecture 8: AVL Trees and Priority Queues Linda Shapiro Spring 2016.
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
CSE373: Data Structure & Algorithms
CSE373: Data Structures & Algorithms
CSE373: Data Structures & Algorithms More Heaps; Dictionaries; Binary Search Trees Riley Porter Winter 2016 Winter 2017.
October 30th – Priority QUeues
Heaps, Heap Sort, and Priority Queues
Instructor: Lilian de Greef Quarter: Summer 2017
Heaps, Heap Sort, and Priority Queues
CMSC 341: Data Structures Priority Queues – Binary Heaps
CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued
Instructor: Lilian de Greef Quarter: Summer 2017
CSE332: Data Abstractions Lecture 4: Priority Queues
Instructor: Lilian de Greef Quarter: Summer 2017
Heaps and the Heapsort Heaps and priority queues
CSE 332: Data Structures Priority Queues – Binary Heaps Part II
CSE373: Data Structures & Algorithms Lecture 7: Binary Heaps, Continued Dan Grossman Fall 2013.
CSE 373 Data Structures and Algorithms
Priority Queues CSE 373 Data Structures.
CSE 373: Data Structures and Algorithms
Priority Queues Binary Heaps
Presentation transcript:

CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued Tyler Robison Summer

Review 2  Priority Queue ADT: insert comparable object, deleteMin  Binary heap data structure: Complete binary tree where each node has a lesser priority than its parent (greater value)  O(height-of-tree)=O( log n) insert and deleteMin operations  insert : put at new last position in tree and percolate-up  deleteMin : remove root, put last element at root and percolate-down  But: tracking the “last position” is painful and we can do better insert deleteMin

Clever Trick: Array Representation of Complete Binary Trees 3 G ED CB A JKHI F L From node i : left child: i*2 right child: i*2+1 parent: i/2 (wasting index 0 is convenient) ABCDEFGHIJKL implicit (array) implementation: We can use index 0 to store other info, such as the size 12

Judging the array implementation 4 Plusses:  Non-data space: just index 0 and unused space on right  In conventional tree representation, one edge per node (except for root), so n-1 wasted space (like linked lists)  Array would waste more space if tree were not complete  For reasons you learn in CSE351 / CSE378, multiplying and dividing by 2 is very fast  size is the index of the last node Minuses:  Same might-be-empty or might-get-full problems we saw with array stacks and queues (resize by doubling as necessary) Plusses outweigh minuses: “this is how people do it”

Pseudocode: insert 5 Note this pseudocode inserts ints, not useful data with priorities void insert(int val) { if(size==arr.length-1) resize(); size++; i=percolateUp(size,val); arr[i] = val; } int percolateUp(int hole, int val) { while(hole > 1 && val < arr[hole/2]) arr[hole] = arr[hole/2]; hole = hole / 2; } return hole; } O(logn): Or is it…

Pseudocode: deleteMin 6 Note this pseudocode deletes ints, not useful data with priorities int deleteMin() { if(isEmpty()) throw… ans = arr[1]; hole = percolateDown (1,arr[size]); arr[hole] = arr[size]; size--; return ans; } int percolateDown(int hole, int val) { while(2*hole <= size) { left = 2*hole; right = left + 1; if(arr[left] < arr[right] || right > size) target = left; else target = right; if(arr[target] < val) { arr[hole] = arr[target]; hole = target; } else break; } return hole; } O(logn)

Example 7 1. insert: 16, 32, 4, 69, 105, 43, 2 2. deleteMin

Example: After insertion 8 1. insert: 16, 32, 4, 69, 105, 43, 2 2. deleteMin

Example: After deletion 9 1. insert: 16, 32, 4, 69, 105, 43, 2 2. deleteMin

Other operations 10  decreaseKey : given pointer to object in priority queue (e.g., its array index), lower its priority value by p  Change priority and percolate up  increaseKey : given pointer to object in priority queue (e.g., its array index), raise its priority value by p  Change priority and percolate down  remove : given pointer to object, take it out of the queue  decreaseKey : set to - , then deleteMin Running time for all these operations? O(logn)

Insert run-time: Take 2 11  Insert: Place in next spot, percUp  How high do we expect it to go?  Aside: Complete Binary Tree  Each full row has 2x nodes of parent row  …+2 k = 2 k+1 -1  Bottom level has ~1/2 of all nodes  Second to bottom has ~1/4 of all nodes  PercUp Intuition:  Move up if value is less than parent  Inserting a random value, likely to have value not near highest, nor lowest; somewhere in middle  Given a random distribution of values in the heap, bottom row should have the upper half of values, 2 nd from bottom row, next 1/4  Expect to only raise a level or 2, even if h is large  Worst case: still O(logn)  Expected case: O(1)  Of course, there’s no guarantee; it may percUp to the root

Build Heap 12  Suppose you started with n items to put in a new priority queue  Call this the buildHeap operation  create, followed by n insert s works  Only choice if ADT doesn’t provide buildHeap explicitly  O(n log n)  Why would an ADT provide this unnecessary operation?  Convenience  Efficiency: an O(n) algorithm called Floyd’s Method

Floyd’s Method Use n items to make any complete tree you want  That is, put them in array indices 1,…,n 2. Treat it as a heap by fixing the heap-order property  Bottom-up: leaves are already in heap order, work up toward the root one level at a time void buildHeap() { for(i = size/2; i>0; i--) { val = arr[i]; hole = percolateDown(i,val); arr[hole] = val; }

Example 14  Say we start with  [12,5,11,3,10,2,9,4,8,1,7,6]  In tree form for readability  Red for node not less than descendants  Heap-order violation  Notice no leaves are red  Check/fix each non-leaf bottom-up (6 steps here)

15  Happens to already be less than children (er, child) Step 1 Example

16  Percolate down (notice that moves 1 up) Step Example

17  Another nothing-to-do step Step Example

18  Percolate down as necessary (steps 4a and 4b) Step Example

19 Step Example

20 Step Example

But is it right? 21  “Seems to work”  Let’s prove it restores the heap property (correctness)  Then let’s prove its running time (efficiency) void buildHeap() { for(i = size/2; i>0; i--) { val = arr[i]; hole = percolateDown(i,val); arr[hole] = val; }

Correctness 22 Loop Invariant: For all j > i, arr[j] is less than its children  True initially: If j > size/2, then j is a leaf  Otherwise its left child would be at position > size  True after one more iteration: loop body and percolateDown make arr[i] less than children without breaking the property for any descendants So after the loop finishes, all nodes are less than their children: Equivalent to the heap ordering property void buildHeap() { for(i = size/2; i>0; i--) { val = arr[i]; hole = percolateDown(i,val); arr[hole] = val; }

Efficiency 23 Easy argument: buildHeap is O(n log n) where n is size  size/2 loop iterations  Each iteration does one percolateDown, each is O( log n) This is correct, but there is a more precise (“tighter”) analysis of the algorithm… void buildHeap() { for(i = size/2; i>0; i--) { val = arr[i]; hole = percolateDown(i,val); arr[hole] = val; }

Efficiency 24 Better argument: buildHeap is O(n) where n is size  size/2 total loop iterations: O(n)  1/2 the loop iterations percolate at most 1 step  1/4 the loop iterations percolate at most 2 steps  1/8 the loop iterations percolate at most 3 steps ……  ((1/2) + (2/4) + (3/8) + (4/16) + (5/32) + …) < 2 (page 4 of Weiss)  So at most 2(size/2) total percolate steps: O(n) void buildHeap() { for(i = size/2; i>0; i--) { val = arr[i]; hole = percolateDown(i,val); arr[hole] = val; }

Lessons from buildHeap 25  Without buildHeap, our ADT already let clients implement their own in   (n log n) worst case  Worst case is inserting lower priority values later  By providing a specialized operation internally (with access to the data structure), we can do O(n) worst case  Intuition: Most data is near a leaf, so better to percolate down  Can analyze this algorithm for:  Correctness: Non-trivial inductive proof using loop invariant  Efficiency:  First analysis easily proved it was O(n log n)  A “tighter” analysis shows same algorithm is O(n)

What we’re skipping (see text if curious) 26  d-heaps: have d children instead of 2  Makes heaps shallower  Approximate height of a complete d-ary tree with n nodes?  How does this affect the asymptotic run-time (for small d’s)?  Aside: How would we do a ‘merge’ for 2 binary heaps?  Answer: Slowly; have to buildHeap; O(n) time  Will always have to copy over data from one array  Different data structures for priority queues that support a logarithmic time merge operation (impossible with binary heaps)  Leftist heaps, skew heaps, binomial queue: Insert & deleteMin defined in terms of merge, which is logn  Special case: How might you merge binary heaps if one heap is much smaller than the other?