Priority Queues and Heaps CSE 373 Winter 2020

Priority Queues and Heaps CSE 373 Winter 2020

L10: Priority Queues CSE373, Winter 2020 Priority Queues and Heaps CSE 373 Winter 2020 Instructor: Hannah C. Tang Teaching Assistants: Aaron Johnston Ethan Knutson Nathan Lipiarski Amanda Park Farrell Fileas Sam Long Anish Velagapudi Howard Xiao Yifan Bai Brian Chan Jade Watkins Yuma Tou Elena Spasova Lea Quan L10: Priority Queues CSE373, Winter 2020 pollev.com/uwcse373 About how long did Homework 3 take? A. 0-2 Hours B. 2-4 Hours C. 4-6 Hours D. 6-10 Hours E. 10-14 Hours F. 14+ Hours G. I haven’t finished yet / I don’t want to say 3 L10: Priority Queues CSE373, Winter 2020 Announcements ❖ Homework 4: Heap is released and due Wednesday ▪ Hint: you will need an additional data structure to improve the runtime for changePriority(). This data structure may or may not be a (classic) Red-Black tree. ❖ Workshop this Friday @ 11:30am, CSE 203 ▪ Topics include 2-3 Trees and LLRBs ❖ Please attend 373 DITs, not other classes’! 4 L10: Priority Queues CSE373, Winter 2020 Questions from Reading Quiz ❖ When do we use Priority Queues? ❖ How is a Queue and Priority Queue different? ❖ How do we handle duplicate values? 5 L10: Priority Queues CSE373, Winter 2020 Lecture Outline ❖ Priority Queues and Review: Binary Trees ❖ Binary Heaps ❖ Binary Heap Representation 6 L10: Priority Queues CSE373, Winter 2020 ADTs So Far (1 of 3) Map ADT. A collection of keys, each Set ADT. A collection of values. associated with a value. • A set has a size defined as the • A map has a size defined as the number of elements in the set. number of elements in the map. • You can add and remove values. • You can add and remove (key, • Each value is accessible via a “get” value) pairs. or “contains” operation. • Each value is accessible by its key via a “get” or “contains” operation. 7 L10: Priority Queues CSE373, Winter 2020 ADTs So Far (2 of 3) List ADT. A collection storing an ordered sequence of elements. • Each element is accessible by a zero-based index. • A list has a size defined as the number of elements in the list. • Elements can be added to the front, back, or any index in the list. • Optionally, elements can be removed from the front, back, or any index in the list. 8 L10: Priority Queues CSE373, Winter 2020 ADTs So Far (3 of 3) Deque ADT. A collection Queue ADT. A collection Stack ADT. A collection storing an ordered storing an ordered storing an ordered sequence of elements. sequence of elements. sequence of elements. • Each element is • A queue has a size • A stack has a size accessible by a zero- defined as the defined as the based index. number of elements number of elements A deque has a size in the queue. • in the stack. defined as the number • Elements can only be • Elements can only be of elements in the added to one end and added and removed deque. removed from the from the top (“LIFO”) • Elements can be added other (“FIFO”) to the front or back. • Optionally, elements can We found more-performant data structures to be removed from the implement the Queue ADT when we took advantage front or back. of its more-limited-than-list functionality 9 L10: Priority Queues CSE373, Winter 2020 ADTs To Come Disjoint Set ADT. Coming Soon! Priority Queue ADT. A collection of • After the midterm values. • A PQ has a size defined as the number of elements in the set. Graph ADT. Coming Soon! • You can add values. • After the midterm • You cannot access or remove arbitrary values, only the max Soon, but not yet! value. Can we find a more-performant data structure to implement the Priority Queue ADT when we take Today’s Topic! advantage of its more-limited-than- queue functionality? 10 L10: Priority Queues CSE373, Winter 2020 Priority Queues ❖ In lecture, we will study max priority queues but min priority queues are also common ▪ Same as max-PQs, but invert the priority add(7) ❖ In a PQ, the only item that matters 13 5 is the max (or min) 15 4 9 add(29) removeMax() 13 5 15 7 13 5 4 9 15 4 9 15 5 77 13 15 5 13 4 29 9 4 9 11 L10: Priority Queues CSE373, Winter 2020 Priority Queue: Applications ❖ Used heavily in greedy algorithms, where each phase of the algorithm picks the locally optimum solution ❖ Example: route finding ▪ Represent a map as a series of segments ▪ At each intersection, ask which segment gets you closest to the destination (ie, has max priority or min distance) 12 L10: Priority Queues CSE373, Winter 2020 Lecture Outline ❖ Priority Queues and Review: Binary Trees ❖ Binary Heaps ❖ Binary Heap Representation 13 L10: Priority Queues CSE373, Winter 2020 Review: Binary Search Trees ❖ A Binary Search Tree is a binary tree with the following invariant: for every node with value k in the BST: ▪ The left subtree only contains values <k 9 ▪ The right subtree only contains values >k 5 17 1 8 31 class BSTNode<Value> { Value v; BSTNode left; BSTNode right; } Reminder: the BST ordering applies recursively to the entire subtree 14 L10: Priority Queues CSE373, Winter 2020 Priority Queue: Possible Data Structures ❖ We have two viable implementations of this ADT (so far): Sorted LinkedList PQ Balanced Search Tree PQ (worst case) (worst case) add O(N) O(log N) max O(1) O(1)* removeMax O(1) O(log N) * If we keep a pointer to the largest element in the BST 15 L10: Priority Queues CSE373, Winter 2020 Review: Binary Tree Data Structure ❖ A Binary Tree (not a binary search tree) is a tree where each node has 0 <= children <= 2 1 class BinaryNode<Value> { Value v; 5 31 BinaryNode left; BinaryNode right; 9 8 17 } 5 16 L10: Priority Queues CSE373, Winter 2020 Heaps ❖ A Max Heap: a binary tree where each node’s value is greater than any of its descendents. It implements the Max Priority Queue ADT ▪ This is a recursive property! ❖ A Min Heap is the same, but each node is less than its descendents 31 1 17 31 9 5 31 8 9 17 9 8 17 5 5 8 1 1 5 17 L10: Priority Queues CSE373, Winter 2020 pollev.com/uwcse373 ❖ Which of these are valid max heaps? 1. Valid / Invalid / Valid 2. Valid / Invalid / Invalid 3. Valid / Valid / Invalid 4. Valid / Valid / Valid 31 9 elderberry 17 3 7 durian banana 9 8 0 2 6 apple canteloupe 18 L10: Priority Queues CSE373, Winter 2020 Binary Heaps ❖ A Binary Heap is a heap that is completely filled, with the possible exception of the bottom level which is filled left-to-right ▪ Its height is Θ(log N) 7 W 6 5 M T 2 1 3 4 A H B 19 L10: Priority Queues CSE373, Winter 2020 Binary Heaps: removeMax ❖ Remove the root’s value (but keep the root node) ❖ Swap in the to-be-deleted leaf’s value ❖ Recursively percolateDown() against each level’s larger child 7 removeMax() 6 5 6 5 2 1 3 4 2 1 3 4 6 4 percolateDown() 4 5 6 5 2 1 3 2 1 3 20 L10: Priority Queues CSE373, Winter 2020 Binary Heaps: add ❖ Add the new value at the next valid location in the complete tree ❖ Recursively percolateUp() … ? 7 7 add(19) percolateUp() 6 5 6 5 2 1 3 2 1 3 19 6 6 2 1 3 2 1 3 21 L10: Priority Queues CSE373, Winter 2020 Lecture Outline ❖ Priority Queues and Review: Binary Trees ❖ Binary Heaps ❖ Binary Heap Representation 22 L10: Priority Queues CSE373, Winter 2020 Binary Heaps as Arrays ❖ A Binary Heap is a heap that is completely filled, with the possible exception of the bottom level which is filled left-to-right 7 W 6 5 M T 2 1 3 4 A H B ❖ … which makes it easily representable as an array ▪ (note: we leave the 0th index empty to make the arithmetic easier) - 7 6 5 2 1 3 4 - 23 L10: Priority Queues CSE373, Winter 2020 Binary Heaps as Arrays ❖ A Binary-Heap-as-Array’s node with index i has: ▪ Its children at 2*i and 2*i + 1 ▪ Its parent at i/2 7 W 6 5 M T 2 1 3 4 A H B - 7 6 5 2 1 3 4 24 L10: Priority Queues CSE373, Winter 2020 Binary Heaps as Arrays: percolateDown 4 6 percolateDown() 6 5 4 5 2 1 3 2 1 3 - 4 6 5 2 1 3 void percolateDown(int idx) { tmp = a[idx]; for ( ; idx * 2 <= a.length; ) { idx = idx * 2; if (a[idx] < a[idx + 1]) idx++; if (a[idx] > tmp) { We’ve rewritten our recursive a[idx/2] = a[idx]; algorithm iteratively! } else { break; } } } 25 L10: Priority Queues CSE373, Winter 2020 Other Priority Queue Operations ❖ The two “primary” PQ operations are: ▪ removeMax() ▪ add() ❖ However, because PQs are used in so many algorithms there are three common-but-nonstandard operations: ▪ merge(): merge two PQs into a single PQ ▪ buildHeap(): reorder the elements of an array so that its contents can be interpreted as a valid binary heap ▪ changePriority(): change the priority of an item already in the heap 26 L10: Priority Queues CSE373, Winter 2020 Other Priority Queue data structures ❖ D-Heaps ▪ Binary heap, but with a >2 branching factor “d” ❖ Leftist Heap ▪ Unbalanced heap that skews “leftward”, optimized for merge() ❖ Skew Heap ▪ Leftist Heap variant, also optimized for merge() ❖ Binomial Queue ▪ A “forest” of heaps 27 L10: Priority Queues CSE373, Winter 2020 tl;dr ❖ Priority Queue ADT is designed to find the max (or min) quickly ▪ We can implement it with many data structures ❖ The Binary Heap is a data structure which is simple to reason about and implement and has constant- to Θ(log N) bounds Sorted LL Balanced BST Binary Heap (worst case) (worst case) (worst case) add O(N) O(log N) O(log N)** max O(1) O(1)* O(1) removeMax O(1) O(log N) O(log N) * If we keep a pointer to the largest element in the BST ** Average case is constant 28 L10: Priority Queues CSE373, Winter 2020 BONUS! ADT / Data Structure Taxonomy Maps and Sets ADT ❖ Search Trees (“left is less-than, right is greater-than”) ▪ Binary Search Trees (branching factor == 2) • Plain BST (unbalanced) – Balanced BSTs: LLRB (other examples: “Classic” Red-Black, AVL, Splay, etc) ▪ B-Trees (have a branching factor >2; balanced) • 2-3 Trees • 2-3-4 Trees ❖ Hash Tables (will cover later!) Data Structures that Implement 29.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    28 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us