Lecture Slides
- Introduction, our goals, example problems
- Minimum Spanning Tree & Prim's algorithm
- MST Data Structures: Graphs and Heaps
- Approximate Metric TSP
- Kruskal's MST, Union-Find data structures [mst.py]
- Clustering with minimum spanning trees [Slim-tree paper]
- Asymptotic Analysis (2 classes) [additional MIT video lecture]
- Depth-first search & Breadth-first search
- Bipartite Testing & Topological Sort
- Dijkstra's Algorithm for Shortest Paths
- A* search algorithm & TSP [Example A* Run] [Example Dijkstra Run]
- Bellman-Ford: Shortest Paths with Negative Weights
- Divide & Conquer and Counting Inversions
- Closest Points in the Plane
- Matrix Multiplication via Strassen's Algorithm (and Karatsuba's integer multiplication)
- Splay trees (2 classes) [demo]
- Dynamic Programming: Subset Sum
- Sequence Alignment [demo]
- RNA Folding
- Segmented Least Squared, Matrix Chain Multiplication, Optimal Binary Search Trees [extra example dynamic programming problems]
- Linear space sequence alignment
- Suffix Trees (2 classes)
- Network Flow & Max-flow/mincut (2 classes)
- Matching
- Image segmentation
- Extensions to network flow & Airline Scheduling
- Linear Programming
- P, NP, and NP-hardness reductions (3 classes)
- NP-hardness results (3SAT, Hamiltonian path, TSP, coloring)
- More NP-hardness proofs (3DM)
- Randomized algorithms: Metropolis and Global Minimum Cut
- Randomized closest pair of points
- Class Summary