-
Introduction; "big-oh" notation and asymptotic analysis.
Project: Karatsuba multiplication -
Divide-and-conquer basics; the master method for analyzing divide and conquer algorithms.
Project: count inverse -
The QuickSort algorithm and its analysis; probability review.
Project: quick sort -
Linear-time selection; graphs, cuts, and the contraction algorithm.
Project: Karger's algorithm
-
Breadth-first and depth-first search; computing strong components; applications.
Project: Kosaraju's algorithm -
Dijkstra's shortest-path algorithm.
Project: Dijkstra's algorithm -
Heaps; balanced binary search trees.
Project: median maintenance problem -
Hashing; bloom filters.
Project: two sum
-
Two motivating applications; selected review; introduction to greedy algorithms; a scheduling application; Prim's MST algorithm.
Project: job scheduling
Project: Prims's MST algorithm -
Kruskal's MST algorithm and applications to clustering; advanced union-find (optional).
Project: max-spacing k-clustering -
Huffman codes; introduction to dynamic programming.
Project: Huffman coding
Project: max-weight independent set -
Advanced dynamic programming: the knapsack problem, sequence alignment, and optimal binary search trees.
Project: knapsack problem