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 2018, we are scheduled to meet for lecture on Tuesdays and Thursdays 11:10am-12:30pm in Kingsbury N101 and for recitation on Fridays 11:10-noon in N121. This class is anticipated to be offered every fall semester for the foreseeable future.
Bug reports and suggestions regarding assignments are always appreciated.