CSE 373: Data Structures and Algorithms

Slides:



Advertisements
Similar presentations
COL 106 Shweta Agrawal and Amit Kumar
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.
1 HeapSort CS 3358 Data Structures. 2 Heapsort: Basic Idea Problem: Arrange an array of items into sorted order. 1) Transform the array of items into.
Version TCSS 342, Winter 2006 Lecture Notes Priority Queues Heaps.
1 TCSS 342, Winter 2005 Lecture Notes Priority Queues and Heaps Weiss Ch. 21, pp
CSE 326: Data Structures Binomial Queues Ben Lerner Summer 2007.
CSE 373 Data Structures and Algorithms Lecture 13: Priority Queues (Heaps)
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.
Chapter 21 Binary Heap.
Data StructuresData Structures Priority Queue. Recall Queues FIFO:First-In, First-Out Some contexts where this seems right? Some contexts where some things.
Intro. to Data Structures Chapter 6 Priority Queue (Heap) Veera Muangsin, Dept. of Computer Engineering, Chulalongkorn University 1 Priority Queue.
FALL 2005CENG 213 Data Structures1 Priority Queues (Heaps) Reference: Chapter 7.
1 Heap Sort. A Heap is a Binary Tree Height of tree = longest path from root to leaf =  (lgn) A heap is a binary tree satisfying the heap condition:
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 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)
Priority Queues A priority queue is an ADT where:
CS 201 Data Structures and Algorithms
Heaps (8.3) CSE 2011 Winter May 2018.
Priority Queues and Heaps Suggested reading from Weiss book: Ch. 21
Heapsort CSE 373 Data Structures.
October 30th – Priority QUeues
Hashing Exercises.
March 31 – Priority Queues and the heap
Bohyung Han CSE, POSTECH
Heaps, Heap Sort, and Priority Queues
Priority Queues (Heaps)
ADT Heap data structure
CSE373: Data Structures & Algorithms Lecture 6: Binary Search Trees
CMSC 341: Data Structures Priority Queues – Binary Heaps
CSE 326: Data Structures Lecture #4 Heaps more Priority Qs
CSE332: Data Abstractions Lecture 5: Binary Heaps, Continued
Data Structures & Algorithms Priority Queues & HeapSort
Instructor: Lilian de Greef Quarter: Summer 2017
Dr. David Matuszek Heapsort Dr. David Matuszek
CSE 373: Data Structures and Algorithms
CMSC 341 Lecture 14 Priority Queues & Heaps
B-Tree Insertions, Intro to Heaps
CSE 332: Data Structures Priority Queues – Binary Heaps
BuildHeap The general algorithm is to place the N keys in an array and consider it to be an unordered binary tree. The following algorithm will build a.
CSE 373 Data Structures and Algorithms
Heaps and the Heapsort Heaps and priority queues
Tree Representation Heap.
Ch. 8 Priority Queues And Heaps
CSE 373: Data Structures and Algorithms
Hassan Khosravi / Geoffrey Tien
Computer Science 2 Heaps.
CE 221 Data Structures and Algorithms
CSE 326: Data Structures Priority Queues & Binary Heaps
Data Structures Lecture 30 Sohail Aslam.
CSE 332: Data Structures Priority Queues – Binary Heaps Part II
Heapsort.
CSE 326: Data Structures Sorting
Heapsort CSE 373 Data Structures.
CSE 373: Data Structures and Algorithms
CSE 12 – Basic Data Structures
CSE373: Data Structures & Algorithms Lecture 7: Binary Heaps, Continued Dan Grossman Fall 2013.
CSE 373 Data Structures and Algorithms
Priority Queues (Heaps)
Priority Queues CSE 373 Data Structures.
Heapsort.
CSE 373, Copyright S. Tanimoto, 2002 Priority Queues -
CSE 326: Data Structures Lecture #5 Heaps More
Heapsort.
Heaps & Multi-way Search Trees
Priority Queues Binary Heaps
CO 303 Algorithm Analysis and Design
EE 312 Software Design and Implementation I
CSE 373: Data Structures and Algorithms
Presentation transcript:

CSE 373: Data Structures and Algorithms Lecture 13: Priority Queues (Heaps) III

The compareTo method The standard way for a Java class to define a comparison function for its objects is to define a compareTo method. Example: in the String class, there is a method: public int compareTo(String other) A call of A.compareTo(B) will return: a value < 0 if A comes "before" B in the ordering, a value > 0 if A comes "after" B in the ordering, or 0 if A and B are considered "equal" in the ordering.

Comparable public interface Comparable<E> { public int compareTo(E other); } A class can implement the Comparable interface to define a natural ordering function for its objects. A call to the compareTo method should return: a value < 0 if the other object comes "before" this one, a value > 0 if the other object comes "after" this one, or 0 if the other object is considered "equal" to this.

Comparable template public class name implements Comparable<name> { ... public int compareTo(name other) { } Exercise: Add a compareTo method to the PrintJob class such that PrintJobs are ordered according to their priority (ascending – lower priorities are more important than higher ones).

Comparable example public class PrintJob implements Comparable<PrintJob> { private String user; private int number; private int priority; public PrintJob(int number, String user, int priority) { this.number = number; this.user = user; this.priority = priority; } public int compareTo(PrintJob otherJob) { return this.priority - otherJob.priority; public String toString() { return this.number + " (" + user + "):" + this.priority;

Other Priority Queue Operations

More Min-Heap Operations decreasePriority given a reference of an element in the queue, reduce its priority value Solution: change priority and ____________________________ increasePriority given a reference of an element in the queue, increase its priority value Solution: change priority and _____________________________ percolateUp Why do I insist on a pointer to each item in decreaseKey, increaseKey, and remove? Because it’s hard to find an item in a heap; it’s easy to delete the minimum, but how would you find some arbitrary element? This is where the Dictionary ADT and its various implementations which we will study soon come up. decreaseKey: percolateUp increaseKey: percolateDown percolateDown Why do we need a reference? Why not simply data value? It’s hard to find in a pQ

More Min-Heap Operations remove given a reference to an object in the queue, remove the object from the queue Solution: set priority to negative infinity, percolate up to root and deleteMin findMax Why do I insist on a pointer to each item in decreaseKey, increaseKey, and remove? Because it’s hard to find an item in a heap; it’s easy to delete the minimum, but how would you find some arbitrary element? This is where the Dictionary ADT and its various implementations which we will study soon come up. buildHeap: Just call insert N times: N log N worst case, O(n) average case Can we get guaranteed linear time? What about build heap? Is that really a necessary operation? It turns out that the necessity for this is based _purely_ on the fact that we can do it faster than the naïve implementation! Call insert n times Θ(n log n) worst, Θ(n) average

Building a Heap At every point, the new item may need to percolate all the way through the heap Adding the items one at a time is (n log n) in the worst case (what is the average case?) A more sophisticated algorithm does it in (n)

O(N) buildHeap Algorithm idea 10 11 12 0 1 2 3 Algorithm idea First, add all elements arbitrarily maintaining the completeness property Then fix the heap order property by performing a "bubble down" operation on every node that is not a leaf, starting from the rightmost internal node and working back to the root why does this buildHeap operation work? Red nodes need to percolate down 6 60 14 18 21 45 32 Let’s try pretending it’s a heap already and just fixing the heap-order property. The red nodes are the ones that are out of order. Question: which nodes MIGHT be out of order in any heap?

buildHeap practice problem 10 11 12 0 1 2 3 Each element in the list [12, 5, 11, 3, 10, 6, 9, 4, 8, 1, 7, 2] has been inserted into a heap such that the completeness property has been maintained. Now, fix the heap's order property by "bubbling down" every internal node, starting from the rightmost internal node working back to the root 2 7 1 8 4 9 6 10 3 11 5 12 Red nodes need to percolate down Let’s try pretending it’s a heap already and just fixing the heap-order property. The red nodes are the ones that are out of order. Question: which nodes MIGHT be out of order in any heap?

12 5 11 3 10 2 9 4 8 1 7 6

12 12 5 11 5 11 3 10 2 9 3 1 2 9 4 8 1 7 6 4 8 10 7 6

12 12 5 11 5 11 3 10 2 9 3 1 2 9 4 8 1 7 6 4 8 10 7 6 12 5 2 3 1 6 9 4 8 10 7 11

12 12 5 11 5 11 3 10 2 9 3 1 2 9 4 8 1 7 6 4 8 10 7 6 12 12 5 2 1 2 3 1 6 9 3 5 6 9 4 8 10 7 11 4 8 10 7 11

Final State of the Heap - Runtime bounded by sum of heights of nodes, which is linear. O(n) - How many nodes at height 1, and height 2, up to root, - See text, Thm. 6.1 p. 194 for detailed proof. 1 3 2 4 5 6 9 How long does this take? Well, everything above the fringe might move 1 step. Everything height 2 or greater might move 2 steps. Most nodes move only a small number of steps  the runtime is O(n). (see text for proof) Full sum = (I=0 to height) SUM (h-I) * 2^i 12 8 10 7 11

Successive inserts (n log n): Different Heaps - Runtime bounded by sum of heights of nodes, which is linear. O(n) - How many nodes at height 1, and height 2, up to root, - See text, Thm. 6.1 p. 194 for detailed proof. Successive inserts (n log n): buildHeap (n): 11 7 10 8 12 9 6 4 5 2 3 1 11 7 10 8 12 9 6 5 4 2 3 1 But it doesn't matter because they are both heaps.

d-Heaps

Generalization: d-Heaps Each node has d children Still can be represented by array Good choices for d are a power of 2 How does height compare to binary heap? 4 9 6 5 3 2 1 8 10 12 7 11 D-heaps address all these problems. Note that will reduce the height of the tree: insert is faster.

Operations on d-Heap insert: runtime = remove: runtime = Does this help insert or remove more? depth of tree decreases, (logd n) worst bubbleDown requires comparison to find min, (d logd n), worst/ave 20

Heap Sort

Heap sort heap sort: an algorithm to sort an array of N elements by turning the array into a heap, then doing a remove N times the elements will come out in sorted order! we can put them into a new sorted array what is the runtime?

A max-heap the heaps shown have been minimum heaps because the elements come out in ascending order a max-heap is the same thing, but with the elements in descending order

Improved heap sort the heap sort shown requires a second array we can use a max-heap to implement an improved version of heap sort that needs no extra storage O(n log n) runtime no external storage required! useful on low-memory devices elegant

Improved heap sort 1 use an array heap, but with 0 as the root index max-heap state after buildHeap operation:

Improved heap sort 2 state after one remove operation: modified remove that moves element to end

Improved heap sort 3 state after two remove operations: notice that the largest elements are at the end (becoming sorted!)

Sorting algorithms review Best case Average case ( † ) Worst case Selection sort n 2 n 2 n 2 Bubble sort n n 2 n 2 Insertion sort n n 2 n 2 Mergesort n log n n log n n log n 2 2 2 Heapsort n log n n log n n log n 2 2 2 Treesort n log n n log n n 2 2 2 Quicksort n log n n log n n 2 2 2 † According to Knuth, the average growth rate of Insertion sort is about 0.9 times that of Selection sort and about 0.4 times that of Bubble Sort. Also, the average growth rate of Quicksort is about 0.74 times that of Mergesort and about 0.5 times that of Heapsort.