The goal of this class is to help you learn how to think about algorithms. We'll cover the `greatest hits' of computer science: a selection of the most important fundamental concepts in the design and analysis of algorithms and data structures, including correctness, complexity analysis, and NP-completeness. You should already be a fluent programmer in a C-like language (including pointers, dynamic memory allocation, and I/O), understand some basic data structures (linked lists, binary trees, and hash tables, as in CS 515), and have some experience writing proofs (as in Math 531 and CS 659).
Student who have taken this class generally report that it was crucial for performing well during high-stakes coding interviews.
For fall 2022, we will meet for lecture on Tuesdays and Thursdays 8:10am-9:30pm in Kingsbury N101 and for recitation on Fridays 1:10-2pm in Kingsbury N121. This class is usually offered in both fall and spring, but will not be offered in Spring 2023.
Bug reports and suggestions regarding assignments are always appreciated.