This course will introduce you to the formal design and analysis of algorithms, which has taken on extreme importance in the age of computers. We will learn several major algorithmic design techniques (greedy, divide and conquer, dynamic programming) covering a wide range of common problems, as well as how to select appropriate data structures to achieve a given algorithmic goal. In addition to learning foundational algorithms, you will also gain a larger set of skills and build intuition that will be invaluable to your future progression within computer science (whether in industry, academia, government, or non-profit roles).
Course Details
Textbook: Algorithm Design (1st ed) by Jon Kleinberg and Eva Tardos
Syllabus: Download here
Office Hours: 3-4 pm Tu, W, Th (or by appointment)
Tentative Lecture Plan
The lecture plan and assignments can, and probably will, change. The readings refer to sections in Algorithm Design by Jon Kleinberg and Eva Tardos, unless CLRS is specified. Homework, lecture slides, and solutions will be posted in this Google Drive folder.