CS106X – Programming Abstractions in C++ Cynthia Bailey Lee CS2 in C++ Peer Instruction Materials by Cynthia Bailey Lee is licensed under a Creative Commons Attribution-NonCommercial- ShareAlike 4.0 International License. Permissions beyond the scope of this license may be available at Bailey LeeCreative Commons Attribution-NonCommercial- ShareAlike 4.0 International Licensehttp://peerinstruction4cs.org
Today’s Topics: Heaps! 1. Linked list coding interview questions 2. Priority queues Binary trees Binary heaps 2
Coding interview question
Suppose we have a pointer (current) to the node containing the item to be removed What additional information do we need to successfully remove the node? A) Nothing additional. B) A pointer to the node immediately prior to the to-be- deleted node. C) A pointer to the node immediately after the to-be-deleted node. D) Both B and C. NULL head current (we want to remove this one) Remove
Suppose we have a pointer (current) to the node containing the item to be removed. NULL head current (we want to remove this one) NINJA CODER EDITION
Other classic interview questions How can you remove a node of a linked list given a pointer to the node itself (and not the previous one)? Write code to reverse a linked list in place. How can you detect if there is a loop in a linked list (i.e. list is improperly formed), using constant space (O(1) amount of space)?
Priority Queue Emergency Department waiting room operates as a priority queue: patients are sorted according to seriousness, NOT how long they have waited.
Some priority queue implementation options Unsorted linked list Insert new element in front Remove by searching list for highest- priority item Sorted linked list Always insert new elements where they go in priority-sorted order Remove from front
Unsorted linked list Add is FAST Just throw it in the list at the front O(1) Remove/peek is SLOW Hard to find item the highest priority item— could be anywhere O(N) Priority queue implementations This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license. Keyah Cheatum CommonsAttribution-Share Alike 3.0 Unported Keyah Cheatumhttp://commons.wikimedia.org/wiki/File:Messy_Room.JPG
Sorted linked list Add is SLOW Need to step through the list to find where item goes in priority- sorted order O(N) Remove/peek is FAST Easy to find item you are looking for (first in list) O(1) Priority queue implementations Released to the public domain:
We want the best of both Fast add AND fast remove/peek We will investigate trees as a way to get the best of both worlds Priority queue implementations +
Binary trees
A binary tree “In computer science, a binary tree is a tree data structure in which each node has at most two child nodes, usually distinguished as "left" and "right".” (Thanks, Wikipedia!)
How many of these are valid binary trees? A. 0-3 B. 4 C. 5 D. 6 E. 7-8
A node object for binary trees Similar to a linked list node, it contains a pointer to data, and a pointer to the next elements Whereas a linked list node has just one next pointer, a binary node tree has two child pointers, left and right
A node object for binary trees Similar to a linked list node, it contains a pointer to data, and a pointer to the next elements Whereas a linked list node has just one next pointer, a binary node tree has two child pointers, left and right
Heaps! IMPORTANT NOTE: Despite the shared name, Heaps have nothing to do with the Heap part of memory (Binary Heap = a partially-ordered tree data structure; Heap is in contrast to Stack as a part of memory)
Binary Heaps* Binary heaps are one kind of binary tree They have a few special restrictions, in addition to the usual binary tree ADT: Must be complete Ordering of data must obey heap property Min-heap version: a parent’s data is always ≤ its children’s data Max-heap version: a parent’s data is always ≥ its children’s data * There are other kinds of heaps as well. For example, binomial heap is on your assignment.
How many of these could be valid binary heaps? A. 0-1 B. 2 C. 3 D. 4 E. 5-8
How many of these are valid min-binary-heaps? A. 0 B. 1 C. 2 D. 3
In how many places could the smallest number in this min -binary-heap be located ? A. 0-2 B. 3-4 C. 5-6 D. 7-8
Binary heap in an array
We actually do NOT typically use a node object to implement heaps Because they must be complete, they fit nicely into an array, so we usually do that
Heap in an array For tree of height h, array length is 2 h -1 For a node in array index i: Parent is at array index: A. i – 2 B. i / 2 C. (i – 1)/2 D. 2i
Binary heap in an array For tree of height h, array length is 2 h -1 For a node in array index i: Left child is at array index: A. i +1 B. i + 2 C. 2i D. 2i + 1
Binary heap in an array For tree of height h, array length is 2 h -1 For a node in array index i: Parent is at array index: (i – 1)/2 Left child is at array index: 2i + 1 Right child is at array index: 2i + 2
Binary heap insert and delete
Binary heap insert + “bubble up”
Binary heap insert
Binary heap delete + “trickle-down”
TRUE OR FALSE There is only one configuration of a valid min-heap containing the elements {34, 22, 3, 9, 18} A. TRUE B. FALSE
Heap outcomes by insert order Create a MIN heap by inserting the elements, one by one, in the order given below for the second letter of your first name: A-F: {3, 9, 18, 22, 34} G-L: {3, 22, 18, 9, 34} M-R: {9, 22, 18, 3, 34} S-Z: {18, 22, 3, 9, 34}
Heap outcomes by insert order Create a MIN heap by inserting the elements, one by one, in the order given below for the first letter of your last name: A-F: {18, 9, 34, 3, 22} G-L: {3, 18, 22, 9, 34} M-R: {22, 9, 34, 3, 18} S-Z: {34, 3, 9, 18, 22}
How many distinct min-heaps are possible for the elements {3, 9, 18, 22, 34}? A. 1-2 B. 3-4 C. 5-8 D. 5! E. Other/none/more
Time cost What is the worst-case time cost for each heap operation: Add, Remove, Peek? A. O(n), O(1), O(1) B. O(logn), O(logn), O(1) C. O(n), O(logn), O(logn) D. Other/none/more