| Section | 1 |
|---|---|
| Instructor(s) | Agarwal, Ishan (ishanagarwal) |
| Location | None |
| Meeting Times | |
| Fulfills | Core Theory |
Syllabus PDF: Please look at the attached syllabus (Winter 2025 version) for full details about the class. There may be small changes in this iteration of the class.
Course Description:
This course is an introduction to the fundamental techniques used to design algorithms for a wide range of classic problems. You will learn how to use these basic heuristics to design algorithms to solve these classic problems efficiently, as well as variants of these problems that may arise in various applications. Through this process you will gain familarity with the most important and common algorithms which we will study as examples that make use of several basic algorithm design techniques. You will also learn to think about the time and space complexity of algorithms and will learn how to reason about asymptotic complexity. We will not only see how to design algorithms, but how to reason about them and prove that they work, as well as prove guarantees about their runtime.
Learning Objectives:
Course Contents:
This list of topics is tentative and it is quite possible that we will cover only a subset of these. Please check the syllabus for a detailed course schedule.
Course Activities:
Course Materials:
The class is intended to be self contained. Complete lecture notes will be provided for all the lectures. All problems in the problem sets will also be stated in full.
The course textbook is Introduction to Algorithms (Third Edition) by T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein (ISBN 9780262-033848).
Jeff Erickson's textbook, which is available here, is also an excellent resource that is available for free online.
Evaluation:
The course grade will be based on weekly homeworks, a midterm and a final exam. Homework will be focussed on written exercises where you must design an algorithm to solve a problem, express the algorithm clearly, prove it's correctness and then prove a suitable bound on it's asymptotic time complexity. There may be occasional programming exercises.
We will adopt a specifications grading framework: that is you will be provided detailed instructions for each task on the homework, as well as an opportunity to resubmit your homework after receiving feedback. The homework will be graded qualitatively. The final letter grade will depend upon how many of the homework problems you satisfactorily complete (including after the opportunity to revise your work) and the exam score (which will take into account both midterm and final scores). More details can be found on the syllabus.
Prerequisites:
The main prerequistite is some mathematical maturity (in particular a good understanding of the material covered in the discrete mathematics course). No knowledge of algorithms is assumed. Some basic programming experience (in any modern programming language) may be useful for the programming exercises.
MPCS 50103 Discrete Math (Immersion Math) OR a passing score on the MPCS Math Placement exam. Core Programming (completed or concurrently taking) or a Core Waiver for programming.
This course requires competency in Unix and Linux. If you attended the MPCS Unix Bootcamp you covered the required material. If you did not, please review the UChicago CS Student Resource Guide here: https://uchicago-cs.github.io/student-resource-guide/.
Course request information for non-MPCS students: https://masters.cs.uchicago.edu/student-resources/non-mpcs-student-course-requests/
This class is scheduled at a time that does not conflict with any other classes this quarter.