Lecture Notes

Notes 1, 1/28: PDF -- Algorithm Overview, Integer Multiplication

Notes 2, 1/30: PDF -- Fibonacci Numbers, Asymptotic Notation, MergeSort

Notes 3, 2/4+2/6: PDF -- Graphs, DFS, 2SAT

Notes 4, 2/11: PDF -- BFS, Dijkstra's algorithm

Notes 5, 2/13: PDF -- More shortest paths algorithms

Notes 6, 2/20: PDF -- Minimum Spanning Tree

Notes 7, 2/27+3/4: PDF -- Union-Find

Notes 8, 3/4+3/6: PDF -- Greedy algorithms

Notes 9, 3/11: PDF -- Divide and Conquer

Notes 10, 3/13: PDF -- Fast Fourier Transform

Notes 11, 3/25: PDF -- Memoization / Dynamic Programming

Notes 12, 3/27: PDF -- Randomization: Freivalds' algorithm, QuickSort, QuickSelect

Notes 13, 4/1: PDF -- Skip lists, Hashing (Boaz's Jupyter notebook)

Notes 14, 4/8+4/10: PDF -- Static dictionary, Karger's algorithm, randomized 2SAT

Notes 15, 4/15+4/17: PDF -- Network flow

Notes 16, 4/17+4/24: PDF -- Baseball and linear programming

Notes 17, 4/19+4/29: PDF -- NP-Completeness

Notes 18, 5/1: PDF -- Approximation algorithms