This course features homework
assignments with solutions as well as a complete set of
lecture notes. In addition an extensive bibliography of assigned and recommended readings is provided in the
readings section. This course features an online textbook in the
readings section. The text was co-written by Prof. Leiserson.
This course teaches techniques for the design and analysis of efficient algorithms, emphasizing methods useful in practice. Topics covered include: sorting; search trees, heaps, and hashing; divide-and-conquer; dynamic programming; amortized analysis; graph algorithms; shortest paths; network flow; computational geometry; number-theoretic algorithms; polynomial and matrix calculations; caching; and parallel computing.