# "Complexity Theory" is when you only analyse the complexity between two algorithms
# "Reduction" involves the actual Cook reduction between two problems
# "Asymptotic Bound" involves analysis of the actual asymptotic runtime
# "Approxmation" is related to "Coping with NP-Completeness", but the concept is introduced also in Greedy algorithms.
# "Miscellaneous" involves questions that ask specific questions or those that ask students to design an algorithm that is does not have substantial tie to any course material

fa21-1: Dynamic Programming, 
fa21-2a: Graph Theory, SCC, 
fa21-2b: Hashing, 
fa21-2c: Randomised Algorithms, 
fa21-2d: Divide and Conquer, FFT, 
fa21-2e: Asymptotic Bound, 
fa21-3: Complexity Theory, 
fa21-4: Greedy, 
fa21-5: Graph Theory, Shortest Paths, 
fa21-6: Graph Theory, MST, 
fa21-7: Complexity Theory, Reduction, 
fa21-8: Complexity Theory, Approximation, 
sp21-1a: Linear Programming, Zero-Sum Game, 
sp21-1b: Linear Programming, Zero-Sum Game, 
sp21-1c: Graph Theory, SCC, DFS, 
sp21-1d: Sketching and Streaming, 
sp21-1e: Complexity Theory, 
sp21-1f: Complexity Theory, 
sp21-1g: Hashing, 
sp21-1h: Complexity Theory, 
sp21-1i: Randomised Algorithms, 
sp21-2a: Graph Theory, SCC, DFS, 
sp21-2b: Randomised Algorithms, Miscellaneous, 
sp21-2c: MST, Asymptotic Bound, Miscellaneous, 
sp21-2d: Multiplicative Weights Update, 
sp21-2e: Graph Theory, MST, 
sp21-3: Dynamic Programming, 
sp21-4: Complexity Theory, Reduction, 
sp21-5: Complexity Theory, Reduction, Graph Theory, Network Flow, 
sp21-6: Graph Theory, Greedy, Approximation, 
fa20-1a: Graph Theory, Shortest Paths, 
fa20-1b: Graph Theory, MST, 
fa20-1c: Linear Programming, 
fa20-1d: Complexity Theory, 
fa20-1e: Complexity Theory, 
fa20-1f: Complexity Theory, 
fa20-2a: Multiplicative Weights Update, 
fa20-2b: Complexity Theory, Approximation, 
fa20-2c: Hashing, 
fa20-2d: Sketching and Streaming, 
fa20-2e: Divide and Conquer, FFT, 
fa20-3: Divide and Conquer, Greedy, 
fa20-4: Graph Theory, Dijkstra, Bellman-Ford, Linear Programming, 
fa20-5: Graph Theory, Miscellaneous, 
fa20-6: Reduction, 
fa20-7: Reduction, 
fa19-1: Graph Theory, SCC, DFS, 
fa19-2: Asymptotic Bound, 
fa19-3: Divide and Conquer, Miscellaneous, 
fa19-4: Graph Theory, DFS, 
fa19-5: Graph Theory, Shortest Paths, Dynamic Programming, Floyd-Warshall, 
fa19-6: Graph Theory, MST, 
fa19-7: Graph Theory, Network Flow, 
fa19-8: Graph Theory, MST, 
fa19-9: Linear Programming, Zero-Sum Game, 
fa19-10: Complexity Theory, 
fa19-11: Sketching and Streaming, 
fa19-12.1: Graph Theory, Network Flow, 
fa19-12.2: Graph Theory, Network Flow, 
fa19-12.3: Approximation, 
fa19-12.4: Graph Theory, MST, 
fa19-12.5: Graph Theory, MST, 
fa19-12.6: Graph Theory, Shortest Paths, 
fa19-12.7: Graph Theory, MST, 
fa19-13.1: Graph Theory, SCC, DFS, 
fa19-13.2: FFT, 
fa19-13.3: Reduction, Linear Programming, 
fa19-13.4: Hashing, 
fa19-13.5: Sketching and Streaming, 
fa19-13.6: Union Find, 
fa19-13.7: Shortest Paths, Dijkstra, 
fa19-13.8: Graph Theory, Miscellaneous, CS70, 
fa19-13.9: Graph Theory, SCC, 
fa19-13.10: Linear Programming, 
fa19-13.11: Knapsack Problem, Dynamic Programming, 
fa19-13.12: Multiplicative Weights Update, 
fa19-14: Reduction, 
fa19-15: Dynamic Programming, 
fa19-16: Dynamic Programming, 
fa19-17: Reduction, 
fa19-18: Hashing, Sketching and Streaming, Miscellaneous, 
fa19-19: Approximation, 
fa19-20: Multiplicative Weights Update, 
fa19-21: Reduction, Linear Programming, 
sp19-1: Linear Programming, Zero-Sum Game, 
sp19-2: Asymptotic Bound, 
sp19-3: Hashing, Sketching and Streaming, 
sp19-4: Graph Theory, Network Flow, 
sp19-5: Graph Theory, Network Flow, 
sp19-6: Dynamic Programming, 
sp19-7: Complexity Theory, 
sp19-8.1: Asymptotic Bound, Linear Programming, Simplex Algorithm, 
sp19-8.2: Graph Theory, DFS, 
sp19-8.3: Graph Theory, SCC, DFS, 
sp19-8.4: Graph Theory, MST, 
sp19-8.5: Graph Theory, BFS, 
sp19-8.6: Graph Theory, DFS, 
sp19-8.7: Complexity Theory, 
sp19-9.1: MST, 
sp19-9.2: FTRL, 
sp19-9.3: FTRL, 
sp19-9.4: Graph Theory, Complexity Theory, 
sp19-9.5: Graph Theory, Complexity Theory, 
sp19-9.6: Hashing, 
sp19-9.7: Greedy, HornSAT, 
sp19-9.8: Graph Theory, DFS, 
sp19-10: Approximation, 
sp19-11: Approximation, Linear Programming, 
sp19-12: Reduction, 
sp19-13: Dynamic Programming, 
sp19-14: Multiplicative Weights Update, 
Dynamic Programming: fa21-1, sp21-3, fa19-5, fa19-13.11, fa19-15, fa19-16, sp19-6, sp19-13, 
Graph Theory: fa21-2a, fa21-5, fa21-6, sp21-1c, sp21-2a, sp21-2e, sp21-5, sp21-6, fa20-1a, fa20-1b, fa20-4, fa20-5, fa19-1, fa19-4, fa19-5, fa19-6, fa19-7, fa19-8, fa19-12.1, fa19-12.2, fa19-12.4, fa19-12.5, fa19-12.6, fa19-12.7, fa19-13.1, fa19-13.8, fa19-13.9, sp19-4, sp19-5, sp19-8.2, sp19-8.3, sp19-8.4, sp19-8.5, sp19-8.6, sp19-9.4, sp19-9.5, sp19-9.8, 
SCC: fa21-2a, sp21-1c, sp21-2a, fa19-1, fa19-13.1, fa19-13.9, sp19-8.3, 
Hashing: fa21-2b, sp21-1g, fa20-2c, fa19-13.4, fa19-18, sp19-3, sp19-9.6, 
Randomised Algorithms: fa21-2c, sp21-1i, sp21-2b, 
Divide and Conquer: fa21-2d, fa20-2e, fa20-3, fa19-3, 
FFT: fa21-2d, fa20-2e, fa19-13.2, 
Asymptotic Bound: fa21-2e, sp21-2c, fa19-2, sp19-2, sp19-8.1, 
Complexity Theory: fa21-3, fa21-7, fa21-8, sp21-1e, sp21-1f, sp21-1h, sp21-4, sp21-5, fa20-1d, fa20-1e, fa20-1f, fa20-2b, fa19-10, sp19-7, sp19-8.7, sp19-9.4, sp19-9.5, 
Greedy: fa21-4, sp21-6, fa20-3, sp19-9.7, 
Shortest Paths: fa21-5, fa20-1a, fa19-5, fa19-12.6, fa19-13.7, 
MST: fa21-6, sp21-2c, sp21-2e, fa20-1b, fa19-6, fa19-8, fa19-12.4, fa19-12.5, fa19-12.7, sp19-8.4, sp19-9.1, 
Reduction: fa21-7, sp21-4, sp21-5, fa20-6, fa20-7, fa19-13.3, fa19-14, fa19-17, fa19-21, sp19-12, 
Approximation: fa21-8, sp21-6, fa20-2b, fa19-12.3, fa19-19, sp19-10, sp19-11, 
Linear Programming: sp21-1a, sp21-1b, fa20-1c, fa20-4, fa19-9, fa19-13.3, fa19-13.10, fa19-21, sp19-1, sp19-8.1, sp19-11, 
Zero-Sum Game: sp21-1a, sp21-1b, fa19-9, sp19-1, 
DFS: sp21-1c, sp21-2a, fa19-1, fa19-4, fa19-13.1, sp19-8.2, sp19-8.3, sp19-8.6, sp19-9.8, 
Sketching and Streaming: sp21-1d, fa20-2d, fa19-11, fa19-13.5, fa19-18, sp19-3, 
Miscellaneous: sp21-2b, sp21-2c, fa20-5, fa19-3, fa19-13.8, fa19-18, 
Multiplicative Weights Update: sp21-2d, fa20-2a, fa19-13.12, fa19-20, sp19-14, 
Network Flow: sp21-5, fa19-7, fa19-12.1, fa19-12.2, sp19-4, sp19-5, 
Dijkstra: fa20-4, fa19-13.7, 
Bellman-Ford: fa20-4, 
Floyd-Warshall: fa19-5, 
Union Find: fa19-13.6, 
CS70: fa19-13.8, 
Knapsack Problem: fa19-13.11, 
Simplex Algorithm: sp19-8.1, 
BFS: sp19-8.5, 
FTRL: sp19-9.2, sp19-9.3, 
HornSAT: sp19-9.7,