Introduction
Stable matching: Gale–Shapley algorithm
Reading: §1.1
Greedy algorithms I: Interval scheduling
Reading: §4.1
Greedy algorithms II: Minimizing lateness
Reading: §4.2
Greedy algorithms III: Minimum Spanning Tree
Reading: §4.5–4.6,
Greedy algorithms IV: Union-find data structure
Reading: §4.6
Dynamic programming I: Weighted interval scheduling
Reading: §6.1
Dynamic programming II: Sequence alignment
Reading: §6.6
Dynamic programming III: RNA secondary structure prediction
Reading: §6.5
Dynamic programming IV: Bellman–Ford algorithm
Reading: §6.8
(Feburary break)
Divide-and-conquer I: Closest pair of points
Reading: §5.4
Divide-and-conquer II: Integer multiplication
Reading: §5.5
Divide-and-conquer III: Randomized Median Finding
Reading: §13.5
(Prelim I)
Network flow I
Reading: §7.1
Network flow II
Reading: §7.2
Network flow III
Reading: §7.7
Network flow IV
Reading: §7.5
Network flow V
Reading: §7.12
Network flow VI
Reading: §7.11
NP-completeness I: Polynomial-time reductions
Reading: §8.1
NP-completeness II: Independent Set
Reading: §8.2–8.4
NP-completeness III: Hamiltonian Circuit
Reading: §8.5
NP-completeness IV: Subset Sum
Reading: §8.8
NP-completeness V: Max Cut; P vs NP question
Computability I: Models of computation, Turing machine
Computability II: Examples, Church–Turing thesis
Computability III: Universal Turing machine
(Spring break)
Computability IV: Decidable and Semidecidable Problems
Computability V: Undecidable Problems
(Prelim II)
Computability VI: Rice’s theorem
Complexity I: Cook–Levin Theorem
Complexity II: P vs NP question, Complexity Landscape
Approximation algorithms I: Introduction, Vertex Cover
Reading: §10.1
Approximation algorithms II: Set Cover, Pricing Method
Reading: §11.3
Approximation algorithms III: Weighted Vertex Cover, Pricing Method
Reading: §11.4
Approximation algorithms IV: Knapsack Approximation Scheme
Reading: §11.8
Linear Programming I: Introduction
Reading: §11.6