Readings refer to

**[Aug 30: Lecture 1]**(slides)

Introduction and overview.**Reading:**Section 1.2.

**[Sept 1: Lecture 2]**(slides)**HW1 out -- due Sept 14 at 11:59pm**

The stable-matching problem and the Gale-Shapley algorithm. Models of computation and measures of algorithmic complexity. Asymptotic notation.**Reading:**Sections 1.1, 2.1, 2.2, and 2.4.

**[Sept 3: Lecture 3]**(slides)

The stable-matching problem and the Gale-Shapley algorithm.**Reading:**Section 1.1.

**[Sept 8: Lecture 4 -- this lecture was prerecorded]**(slides)

Basic data structures. Graphs and basic graph algorithms.**Reading:**Sections 2.3 and 3.1.

**[Sept 10: Lecture 5]**(slides)

Breadth-first search (BFS) and applications (e.g., testing bipartiteness). DFS.**Reading:**Sections 3.2, 3.3, and 3.4.

**[Sept 13: Lecture 6]**(slides)

Implementing BFS and DFS. Connectivity in directed graphs.**Reading:**Sections 3.5 and 3.6.

**[Sept 15: Lecture 7]**(slides)

DFS, and applications to cycle detection and topological ordering.**Reading:**Sections 3.5 and 3.6.

**[Sept 17: Lecture 8]**(slides)**HW2 out -- due Sept 30 at 11:59pm**

Topological ordering. "Greedy" algorithms. Interval scheduling.**Reading:**Sections 4.1 and 4.2.

**[Sept 20: Lecture 9]**(slides)

Variants of interval scheduling. Dijkstra's shortest-paths algorithm.**Reading:**Section 4.4.

**[Sept 22: Lecture 10 -- this lecture was prerecorded]**(slides)

Priority queues. Greedy algorithms for finding minimum spanning trees.**Reading:**Sections 2.5 and 4.5.

**[Sept 24: Lecture 11]**(slides)

Clustering. "Divide-and-conquer" algorithms. Mergesort. Recurrence relations.**Reading:**Sections 4.7 and 5.1.

**[Sept 27: Lecture 12]**(slides)

Selection. Closest pair of points.**Reading:**Sections 5.2 and 5.4; lecture notes on selection.

**[Sept 29: Lecture 13 -- this lecture was prerecorded]**(slides)**HW3 out -- due Oct 10 at 11:59pm**

The fast Fourier transform (FFT).**Reading:**Section 5.6.

**[Oct 1: Lecture 14]**(slides)

Exponentiation and integer/matrix multiplication. Dynamic programming.**Reading:**Sections 5.5 and 6.1. (The material on exponentiation and Strassen's algorithm is not covered in the book.)

**[Oct 4: Lecture 15]**(slides)

Weighted interval scheduling.**Reading:**Section 6.2.

**[Oct 6: Lecture 16]**(slides)

The knapsack problem. Longest common subsequence.**Reading:**Section 6.4; lecture 11 of Dave Mount's lecture notes.

**[Oct 8: Lecture 17]**(slides)

RNA secondary structure. Sequence alignment.**Reading:**Sections 6.5 and 6.6.

**[Oct 11: Lecture 18]**(slides)

Shortest paths with negative weights. The Bellman-Ford algorithm. Negative-weight cycles.**Reading:**Sections 6.8 and 6.10 (through page 304 only).

**[Oct 13]****Midterm exam -- no lecture**

The exam will cover the material through (and including) the class of Oct. 8.

**[Oct 15: Lecture 19]**(slides)**HW4 out -- due Oct 31 at 11:59pm**

The Bellman-Ford algorithm and distributed routing. Network flow.**Reading:**Sections 6.9 and 7.1.

**[Oct 18: Lecture 20]**(slides)

Network flow and the Ford-Fulkerson algorithm.**Reading:**Section 7.1.

**[Oct 20: Lecture 21]**(slides)

Max-flow/min-cut.**Reading:**Section 7.2.

**[Oct 22: Lecture 22]**(slides)

Optimizing the Ford-Fulkerson algorithm. Applications of network flow.**Reading:**Sections 7.3 and 7.5 (through page 370).

**[Oct 25: Lecture 23]**(slides)

Further applications of network flow. Circulations with demands (and capacity lower bounds).**Reading:**Sections 7.6 and 7.7.

**[Oct 27: Lecture 24]**(slides)

Applications of circulations with demands.**Reading:**Section 7.8.

**[Oct 29: Lecture 25]**(slides)

P and NP.**Reading:**Section 8.3 (but note that our treatment does not line up exactly with that in the book).

**[Nov 1: Lecture 26]**(slides)**HW5 out -- due Nov 14 at 11:59pm**

NP-completeness. Reductions and NP-completeness of circuit-SAT.**Reading:**Sections 8.1, 8.2, and 8.4 (but note that our treatment does not line up exactly with that in the book).

**[Nov 3: Lecture 27]**(slides)

NP-completeness of 3-SAT.**Reading:**Section 8.4.

**[Nov 5: Lecture 28]**(slides)

Additional NP-complete problems.**Reading:**Section 8.5.

**[Nov 8: Lecture 29]**(slides)

Additional NP-complete problems. The class coNP.**Reading:**Section 8.9.

**[Nov 10: Lecture 30]**(slides)

Dealing with NP-hardness: fixed-parameter tractability and handling special cases.**Reading:**Sections 10.1 and 10.2.

**[Nov 12: Lecture 31]**(slides)

Dealing with NP-hardness: approximation algorithms.**Reading:**Section 11.1.

**[Nov 15: Lecture 32]**(slides)

Dealing with NP-hardness: approximation algorithms.**Reading:**Sections 11.2 and 11.4 (only the simplified version of the algorithm covered in class).

**[Nov 17: Lecture 33]**(slides)**HW6 out -- due Dec 9 at 11:59pm**

PSPACE and PSPACE-completeness. QSAT.**Reading:**Sections 9.1 and 9.2.

**[Nov 19: Lecture 34]**(slides)

Two-player games. Planning.**Reading:**Sections 9.3-9.5.

**[Nov 22: Lecture 35]**(slides)

Randomized algorithms. Probability review. Contention resolution.**Reading:**Sections 13.1, 13.3, and 13.12.

**[Nov 29: Lecture 36]**(slides)

Randomized algorithms: contention resolution II. Bayes's law and random testing.**Optional reading:**Broder and Kumar.

**[Dec 1: Lecture 37]**(slides)

The probabilistic method. A randomized min-cut algorithm.**Reading:**Section 13.2.

**[Dec 3: Lecture 38]**(slides)

A randomized Max-3SAT algorithm. Markov's bound. The coupon-collector problem.**Reading:**Sections 13.3 and 13.4.

**[Dec 6: Lecture 39]**(slides)

Hash tables and load balancing; Chernoff bounds. Universal and 2-universal hash functions.**Reading:**Sections 13.6, 13.9, and 13.10 (through page 774).

**[Dec 8: Lecture 40]**(slides)

Two-level hashing. Parallel algorithms.**Reading:**Uzi Vishkin's notes (you are only responsible for what we covered in class).

**[Dec 10: Lecture 41]**(slides)

Parallel algorithms.**Reading:**Uzi Vishkin's notes (you are only responsible for what we covered in class).

**[Dec 13: Lecture 42]**(slides)

Advanced topics: linear programming.**Reading:**Michel Goemans's lecture notes; Jeff Erickson's lecture notes.

**[Dec 21]****Final exam**

The final will be available from 7:50-10:15am on Gradescope

The exam will cover the material through (and including) the class of Dec. 10.