360 likes | 438 Views
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 http://peerinstruction4cs.org.
E N D
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 http://peerinstruction4cs.org. CS106X – Programming Abstractions in C++ Cynthia Bailey Lee
Today’s Topics: Heaps! • Linked list coding interview questions • Priority queues • Binary trees • Binary heaps
Remove current (we want to remove this one) Suppose we have apointer (current) to the node containing the item to be removed. 30 22 5 42 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. head NULL
NINJA CODER EDITION Suppose we have apointer (current) to the node containing the item to be removed. current (we want to remove this one) 30 22 5 42 head NULL
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
Priority queue implementations 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) This file is licensed under the Creative CommonsAttribution-Share Alike 3.0 Unported license. KeyahCheatumhttp://commons.wikimedia.org/wiki/File:Messy_Room.JPG
Priority queue implementations 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) Released to the public domain: http://commons.wikimedia.org/wiki/File:Wall_Closet.jpg
Priority queue implementations 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 +
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? • 0-3 • 4 • 5 • 6 • 7-8
A node object for binary trees data: left: right: • 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 data: left: right: data: left: right: data: left: 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? • 0-1 • 2 • 3 • 4 • 5-8
How many of these are valid min-binary-heaps? • 0 • 1 • 2 • 3
In how many places could the smallest number in this min-binary-heap be located ? • 0-2 • 3-4 • 5-6 • 7-8
Binary heap in an array data: left: right: • 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 2h-1 • For a node in array index i: • Parent is at array index: • i – 2 • i / 2 • (i – 1)/2 • 2i
Binary heap in an array • For tree of height h, array length is 2h-1 • For a node in array index i: • Left child is at array index: • i +1 • i + 2 • 2i • 2i + 1
Binary heap in an array • For tree of height h, array length is 2h-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
TRUE OR FALSE • There is only one configuration of a valid min-heapcontaining the elements {34, 22, 3, 9, 18} • TRUE • 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}? • 1-2 • 3-4 • 5-8 • 5! • Other/none/more
Time cost • What is the worst-case time cost for each heap operation: Add, Remove, Peek? • O(n), O(1), O(1) • O(logn), O(logn), O(1) • O(n), O(logn), O(logn) • Other/none/more