Final Exam Review COP4530
A high-level summary of what we learned Algorithm analysis Data structures Vector, List, Deque STL sequence containers Stack, Queue, Priority queues STL adaptor containers Set and map (multiset, multimap) Hashing tables (unordered_set, unordered_map) STL associative containers Trees set and map in STL implemented using binary search tree Graphs (not covered) Available in Boost Algorithms Various algorithms associated with data structures Various sorting algorithms DFS/BFS, infix to postfix conversion, postfix evaluation Graph algorithms (not covered)
f(n) is asymptotically Big “O” Notation f(n) =O(g(n)) If and only if there exist two constants c > 0 and n0 > 0, such that f(n) < cg(n) for all n >= n0 iff c, n0 > 0 | 0 < f(n) < cg(n) n >= n0 cg(n) f(n) f(n) is asymptotically upper bounded by g(n) n0
f(n) is asymptotically Big “Omega” Notation f(n) = (g(n)) iff c, n0 > 0 | 0 < cg(n) < f(n) n >= n0 f(n) cg(n) f(n) is asymptotically lower bounded by g(n) n0
Big “Theta” Notation f(n) = (g(n)) c2g(n) f(n) f(n) has the iff c1, c2, n0 > 0 | 0 < c1g(n) < f(n) < c2g(n) n >= n0 c2g(n) f(n) f(n) has the same long-term rate of growth as g(n) c1g(n) n0
C++ Standard Template Library (STL) Template based Generic programming One definition works for all types (proper type) Containers – data structures vector, list, deque, priority_queue, set, map, unordered_set, unordered_map, … Algorithms Sorting algorithms, and many others Iterators – to access elements of the containers Encapsulating difference among distinct data structures Common interface for generic algorithms
Generic programming basics How to write template classes Also template function Iterators Const Iterators Unidirectional vs. bidirectional iterators
STL Container implementation Data members (member variables) Constructors Destructor Methods Iterators Overloaded operators The Big five – copy and move assignment operators, copy and move constructors, destructor
Basic STL Containers Vector List Familiarity Similar to array in operation Index-referenced elements (random element access) RESIZABLE First-class objects List Linked list – one element points to next one Singly/Doubly linked list STL List implemented as DOUBLY LINKED STL forward_list is singly linked Familiarity Use of basic operations Implementation of each container
Double Ended Queues Deque Operations on a Deque How is it different from Vector? Deque Implementation Using a circular array Locating the front and the back positions of the deque Calculating the size of the deque Accessing the ith element in the deque How a deque should be implemented if we maintain an explicit size member variable? In particular, member functions front, push_front, pop_front
Stack ADT Basic Operations Implementation Common uses of Stack First In, Last Out Implementation Using an Adaptor Class Common uses of Stack Depth first search Evaluation of postfix expressions Conversion from infix to postfix expressions Matching brackets Function calls Recursion
Queue ADT Basic operations Implementation Common uses of Queue First In, First Out Implementation Using an Adaptor Class Common uses of Queue Breadth first search Buffers Simulations Producer-Consumer Problems
Depth First Search How does it work How to use stack for conducting DFS DFS algorithm implementation
Breadth First Search How does it work How to use queues for conducting BFS BFS algorithm implementation
Positional Containers Definition? Examples? Also called sequential containers in STL terms
Trees – Basic Theory Definitions Tree, Rooted Tree Depth/Height of Vertex Depth/Height of Tree. Descending Path Parent, Child, Sibling, Ancestor, Descendant Root, Leaf
Tree Implementation Structure of a node Linking the children and siblings with constant space for a Node.
Generic Tree traversals Preorder traversal Postorder traversal Levelorder traversal Inorder traversal for binary trees
Binary trees Definition Structure representation Complete Binary Tree Structure representation Relation between number of nodes n and height H of a complete binary tree Levelorder traversal How to compute the height of a tree? Vector representation of a complete binary tree
Binary Search Tree Not the same as a binary tree Also known as Totally Ordered Tree Finding an element Finding the smallest element Finding the largest element Search complexity Best case, Worst case, Average case BST implementation Recursive implementation of tree operations such as insert and delete
BST Anomalies Why BST may not necessarily be balanced? Insertion of element In sorted order Or even mostly sorted order Deletion Bias Why does it arise? Simple ways to overcome the bias.
AVL trees Definition of AVL trees Implementation of AVL trees Building AVL trees by inserting/deleting elements
M-ary Trees Definition Implementation Usefulness? M-ary tree Complete M-ary tree Implementation Usefulness?
M-ary Search Trees Not the same as M-ary Trees Representation Search process
B-Trees B = Balanced Conditions for M-ary tree to be called a B-tree Inserting a value Inserting at a non-full leaf Inserting at a full leaf When to split a non-leaf node When to split the root Deletion Combining leaves, non-leaves Borrowing leaves from neighborhood When does the height of the tree grow? Reduce?
Associative Containers Generic Associative Containers Unimodal vs. Multimodal associative containers Sets Regular set vs. Multi-set Maps Regular maps vs. Multi-maps
Hash Tables Basic principles of using hash tables Designing a hash table Choosing a Hash Function Conflict Resolution Strategy Hash functions Properties of a good hash function
Conflict Resolution Strategies Separate Chaining Linear Probing Quadratic Probing Double Hashing Rehashing
Priority Queue What is it? When is it useful? Operations Push, pop, top, clear, empty Implementation Adaptor class: can use linked lists, Binary Search Trees, B-Trees, Heaps
Heaps Notion of partially ordered trees Heap = partially ordered complete binary tree Vector representation of Heap Implementing different operations Push heap Pop heap Build heap Given a sequence of numbers, building a heap Insertion and deletion
Sorting Different sorting techniques Bubble sort Insertion sort Algorithm details Best-case, worst-case and average case complexity of each Especially for the recursive algorithms Bubble sort Insertion sort Shell sort Heap sort Merge sort Quick sort Pivoting strategy Partitioning strategy Recursion
Graph algorithms Representations of Graphs Topological sorting Shortest-path algorithms Unweighted version Weighted version