| Date | Topics | Readings | Due |
| 1/24/08 | Greedy Algorithms: Huffman codes using letter frequencies. | CLR Section 16.3 | Nil |
| 1/29/08 | Greedy: Huffman codes correctness. Data structures: Heaps. | CLR Chapter 6 | Nil |
| 1/31/08 | Greedy: Dijkstra. | CLR Sections 24.2, 24.3, and 24.5 | Nil |
| 2/5/08 | Greedy: Prim's algorithm. | CLR Chapter 23 | Homework 1 |
| 2/7/08 | Greedy: Kruskal's algorithm. | CLR Chapter 21 | Nil |
| 2/12/08 | Data structures: Union-Find (also Erickson's notes). | CLR Chapter 21 | Problem Set 1 |
| 2/14/08 | Data structures: Union-Find (end). | CLR Chapter 21 | Problem Set 1 |
| 2/19/08 | No class | ||
| 2/21/08 | Divide-and-conquer, Analysis of Quicksort. | CLRS 2.3, 7 | HW 2 |
| 2/26/08 | Divide-and-conquer: Fast Fourier Transform (FFT.pdf). | CLRS 30 | TBA |
| 2/28/08 | Divide-and-conquer: Median-finding algorithm (median.pdf) | CLRS 9 | PS 2 |
| 3/4/08 | Midterm 1 | ||
| 3/6/08 | Correction of Midterm 1 | ||
| 3/11/08 | Divide-and-conquer: Strassen's algorithm, closest pair | CLRS 28.2, 33.4. Practice exercise: 28.2-6 | HW 3 |
| 3/13/08 | Dynamic programming: sequence alignment | CLRS Problem 15-3 | |
| 3/18/08 | Dynamic programming: all pairs shortest paths | CLRS 25 | PS 3 |
| 3/20/08 | Dynamic programming: Viterbi's algorithm | CLRS Problem 15-5 | |
| 3/25/08 | No class | ||
| 3/27/08 | No class | ||
| 4/1/08 | Midterm 2 | ||
| 4/3/08 | Midterm 2 solution | ||
| 4/8/08 | Lower bounds: decision trees, adversary, sorting, binary search | CLRS 8.1. | PS4 |
| 4/10/08 | Flows: Ford-Fulkerson | CLRS 26 | |
| 4/15/08 | Flows: Edmonds-Karp | CLRS 26 | HW5 |
| 4/17/08 | Linear programming duality | CLRS 29 | |
| 4/22/08 | Linear programming | CLRS 29 | |
| 4/24/08 | Online algorithms | ||
| 4/29/08 | NP-completeness | CLRS 34 | PS5 |
| 5/1/08 | Approximation algorithms | CLRS 35 |
Topics
- Complexity and running times, asymptotic notations (quick review).
- Greedy algorithms: interval scheduling, minimum spanning tree (Prim, Kruskal), shortest paths (Dijkstra).
- Tree data structures: heaps (for Prim and Dijkstra), union find (for Kruskal) with the n log*n analysis.
- Sorting: Mergesort (quick review), Quicksort (quick review), Randomized quicksort (rigorous analysis), sorting lower bound, counting sort.
- Divide-and-conquer: closest-pair, FFT (applied to polynomial multiplication), Randomized median selection, Matrix multiplication (Strassen).
- Matrix algorithms.
- Dynamic programming: Matrix-chain multiplication, sequence alignment, Markov reward/decision processes, Viterbi's algorithm.
- More data structures: B trees and hashing data structures.
- Network algorithms: Flows, matchings.
- Local search algorithms.