This is a guide, not a guarantee. The exam covers all material we have discussed in class up to and including Binary Heaps and Priority queues. This means material from Midterm One is included, as well as all concepts covered in the assignments and code we have written. The following is a list of topics included in this material:
Basic Tree Terminology n-ary tree: a tree where every node has at most n children arity: the number of children present on the node with the most children binary tree: special form of n-ary tree where every node has at most 2 children (0, 1, or 2 children); alternately, a tree of arity 2 complete binary tree: A binary tree in which every level, except possibly the last, is completely filled, and all nodes (all leaves) are as far left as possible; a binary heap structure is a complete binary tree full binary tree: (sometimes called a proper binary tree) A tree in which every node other than the leaves has exactly two children perfect binary tree: A binary tree in which every internal node has exactly two children, and all the leaf nodes are at the same (deepest) level. A perfect binary tree with height h has the maximum number of nodes that can be in a binary tree of height h. perfect binary tree: A / \ / \ (no room for more nodes without increasing height of tree) / \ / \ B C / \ / \ / \ / \ / \ / \ D E F G / \ / \ / \ / \ H I J K L M N O complete binary tree: A / \ / \ (every level but last is filled (perfect), and / \ last level is left-packed) / \ B C / \ / \ / \ / \ / \ / \ D E F G / \ / \ / H I J K L full binary tree: A / \ (every node not a leaf has 2 children) / \ (every node has 0 children, or 2 children) / \ / \ B C / \ / \ / \ D E / \ J K //=========================================================================== Sets and Maps ADT ops, behavior, and ways to implement them (lists, trees, hashing, etc.) //=========================================================================== Hashing, Hash Tables, Hash Maps Pigeon hole principle (chicken hole principle) Hash Table, hash function how to pick table size how to make an effective hash function what to do about collisions hash into linked lists (or other collection data structures) table size should be prime, and same the size as # elements expected probing to find an open cell in the table linear probing function quadratic probing function "expo" probing function table size should be prime, and twice the # elements expected Rehasing to extend the table size Hash Maps... storing associated information/object along with a hashed key //=========================================================================== Blockchain SHA-256 Cryptographic hash function basic block chain construction and operation nonce "mining" what it is, how it's done complexity of the hashing used in mining blocks (for Bitcoin application) //=========================================================================== binary heap a binary heap is a completely different thing from the runtime heap... runtime heap is not heap-structured, not related at all just unfortunate and maybe a bit confusing to share the name "heap" binary tree with two properties: heap order property structure property always a complete binary tree, with last level being filled from L to R but perhaps not full representation of binary heap as array heaps can be Min or Max operations: getMin (Max) O(1) worst, avg since it is at the root of the heap tree removeMin (Max) O(log N) worst case O(log N) average case add O(log N) worst case O(1) average case (75% of the heap elements in last 2 tree levels) incElt, decElt cost of searching for the Elt, then plus cost of rearranging the heap array when the priority is incremented or decremented searching the array linearly is O(N) using a HashMap (like Assn 4) is O(1) cost of rearranging the heap array in O(log N) build simple way is O(N log N) by doing N adds cleaver way is O(N) if you have all the elements on hand, use special "build" //=========================================================================== priority queue limplementing priority queue with list, BST implement priority queue using binary heap elements stored have value and priority priority is used to put elements into binary heap operations: enq: add item to PrQUE deq: take item out of the PrQUE, and that item is "highest" (or lowest) priority front: produce element from queue that has "highest" (or lowest) priority size, empty, etc... //=========================================================================== Sorting we have discussed and analyzed these sorting methods: -- Bubble Sort: rearranging the items in an array/list to put them in order "gold standard of badness" since it's O(N^2) worst case as well as avg case -- keeping a basic List sorted (using inSort operation) -- BST sort: build a binary search tree and do in-order traversal (worst case analysis, and average case analysis) -- AVL sort: BST with balancing... avg and worst cases for sorting N elements -- sorting using hashing (bucket sort) -- Sorting with a binary heap heap sort special "build" a binary heap do repeated getMin(),delMin() to create the ordered sequence worst case time complexity if we do repeated insert to construct heap worst case time complexity if we do special magic build to construct heap //=========================================================================== Tree representations (linked cells, implicit as array) We have represented a tree (binary tree) as -- linked cells (basic unbalanced BST, also used for balanced methods like AVL, Splay) -- array (binary heap) in array representation, the links are implicit and are obtained via array subscript arithmetic -- know why implicit, array representation works ok for binary heap, not for general case of binary tree //=========================================================================== Balanced BST Tree balancing: AVL: imbalance condition, rotations to re-balance rotations alter tree structure but maintain the order property worst case time complexity for insert, remove, contains show how AVL tree is altered by insert, remove Splay: another approach to balancing splaying done any time a node is accessed splaying is applying preserving rotations until accesses node is moved to the root amortized worst case time complexity show how splaying works in a tree for insert, remove, find, etc.