Learning materials
Final Review
On this page
How to use this document
- Only contains the topics after the midterm 2 and the cross-module concepts
- Self-test using this document to see what concepts are challenging to you.
- The slides are the most concise and focused document you can start with.
- Course supplement material website is the systematic view for tips, pitfalls.
- Refer to the practice exam for the format of the exam and the types of questions.
- Refer to the test exam for how the Honorlock will work.
Type of Questions
- True/False (TF)
- Multiple Choice (MC)
- Fill in the Blank (FIB)
- Matching (MAT) - match a list of items to another list of items
- Short Answer/Coding (SA)
Topics
Dynamic programming
For full notes and examples, revisit Chapter 10: Dynamic Programming.
- Two core components to justify dynamic programming
- Overlapping subproblems
- Optimal substructure
- Other characteristics
- Approach
- Top-down (memoization)
- Bottom-up (tabulation) - preferred for efficiency
- Complexity depending on the problem
Graph algorithms
For full notes and examples, revisit Chapter 11: Graph Algorithms.
- Concepts
- Types
- Graph representation
- Edge list
- Adjacency matrix
- Adjacency list
- Complexity depending on representations (important)
- Find all neighbors of a vertex
- Check if two vertices are connected / or check weight
- Graph traversal
- BFS - Queue ADT
- DFS - Stack ADT or recursive
Probability
- Classic only - all events have equal probability
- Events
- range of probability
- Sample space
- Principles and rules
- Complement rule
- Addition rule
- Multiplication rule
- Calculation of classic probability
- Count first
- Count of specific events / total number of possible events
- Example: dice, coin, cards, balls from a bag, lottery
Randomized Algorithms
- Types
- Monte Carlo - approximate algorithms to solve hard problems that are impractical to solve exactly
- Random sampling
- Use statistics to estimate a property of interest
- Las Vegas - exact, randomness to improve efficiency
- Monte Carlo - approximate algorithms to solve hard problems that are impractical to solve exactly
- Genetic algorithm (employs some Monte Carlo techniques)
Cross-Module Concepts
- Algorithmic paradigms
- Greedy
- Optimization problems
- Approximate algorithms
- Exceptions: Huffman coding, Prim’s, Krukal’s, Dijkstra’s will provide the best solution
- Mostly $\Theta(n)$
- Backtracking
- Often used for search or enumeration; can support decision or optimization by stopping at a witness or tracking the best candidate
- Close to brute force with pruning
- Divide and conquer
- Exact algorithms
- Distinct subproblem only (in this course)
- Recurrence relation
- Solve recurrence using master theorem
- Dynamic programming
- Exact algorithms
- Key components
- Overlapping subproblems
- Optimal substructure
- Greedy
- Relationship between algorithms
- Different types of problem to solve
- Exact vs approximate
- Complexity (efficiency)
- Greedy < Divide and conquer, backtracking, dynamic programming < Brute force
- Problem types and algorithms to solve them
- Search, enumeration, optimization, decision, and counting specify the requested output; they are not one-to-one matches with paradigms.
- Brute force and backtracking can implement search or enumeration, and can be adapted for decision, counting, or optimization.
- Divide and conquer, dynamic programming, greedy, branch and bound, and other paradigms apply when their structural requirements fit the problem. For example, DP may compute an optimum, a count, or a Boolean answer; branch and bound is commonly used for exact optimization.
- Enumeration can derive search, decision, counting, or optimization answers by processing all solutions, but may do more work than needed.
- Randomized algorithms are employed in may approximate algorithms
- Problem perspective
- TSP
- Optimization
- NP-hard: prefer approximate algorithms because exact algorithms are not practical
- Circular permutation
- $\Theta(n!)$ brute force
- Exact algorithms only for small number of cities
- Brute force
- DP
- Approximate algorithms
- Greedy (not covered)
- Genetic algorithm
- Bin packing
- Optimization
- NP-hard: prefer approximate algorithms because exact algorithms are not practical
- Online vs offline
- DP is possible but greedy is usually good enough but faster
- Greedy: First fit, best fit, next fit
- near optimal result
- Permutation + next fit brute force for small problem size
- $\Theta(n!)$
- Huffman coding
- Optimization
- Priority Queue ADT
- Full binary tree
- Prefix code
- Greedy algorithm as an exact algorithm
- $\Theta(n)$
- Max sum subarray
- Optimization
- Brute force $\Theta(n^2)$
- Divide and conquer $\Theta(n\log n)$
- DP (Kadane’s) $\Theta(n)$
- Know how they work on paper!
- Chain matrix multiplication
- Different ways to parenthesize
- Minimize the number of scalar multiplications (optimization)
- NP-hard: prefer approximate algorithms
- Brute force Catalan number impractical
- Space complexity
- DP
- Bottom-up
- Iterate chain length L, start index i, bisect index k $\Theta(n^3)$
- Longest common subsequence
- Optimization
- Brute force $\Theta(2^n)$
- DP
- Bottom-up
- $\Theta(mn)$
- (m+1)(n+1) table or 2(m+1) table (find length only)
- backtracking to find the sequence (know how it works on a table)
- Graph: Minimal spanning tree
- Optimization
- Brute force: find V-1 edges out of E edges without cycle,
- Prim’s algorithm
- Priority Queue ADT
- Greedy
- Focus on vertices
- Better for dense graph
- Start from an arbitrary vertex and grow the tree greedily by adding the shortest edge that connects the tree to a vertex not in the tree
- Complexity depending on graph representation and priority queue implementation
- Krukal’s algorithm
- Sorted array data structure
- Disjoint set data structure to memorize the forest (unconnected trees)
- Greedy
- Focus on edges
- Better for sparse graph (with less edges)
- Better for parallel implementation
- Adding edges in increasing order of weight without loop until all vertices are connected
- Complexity depending on graph representation and disjoint-set implementation
- Know how they work on paper!
- Graph: Shortest path
- Single source shortest path (SSSP)
- Dijkstra’s algorithm
- Priority Queue ADT
- Greedy
- Close to Prim’s algorithm
- Complexity depending on graph representation and priority queue implementation
- Know how it works on paper!
- Dijkstra’s algorithm
- All pairs shortest path (APSP)
- Floyd-Warshall algorithm
- DP
- Bottom-up
- $\Theta(n^3)$
- Floyd-Warshall algorithm
- Single source shortest path (SSSP)
- Estimation of Pi
- Monte Carlo
- Random sampling of x and y
- Find the ratio of points inside the circle to the total number of points
- $\pi = 4 \times ratio$
- Know how it works on paper!
- TSP