| Section | 1 |
|---|---|
| Instructor(s) | Agarwal, Ishan (ishanagarwal) |
| Location | Crerar 011 |
| Meeting Times | Tuesday 2pm - 4:50pm |
| Fulfills | Core Theory |
Syllabus PDF: Please look at the attached syllabus (Spring 2024 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 problems. You will learn how to use these basic heuristics to design algorithms to solve these classic problems efficiently, as well as to tackle 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 these 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 we will probably cover only a subset of the more advanced topics. 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).
We will also refer to the textbook Algorithm design (First Edition) by Jon Kleinberg and Eva Tardos (ISBN 978-0321295354).
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.
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.
Non-MPCS, MSCAPP or MACSS students should review our MPCS Course Request Policy: https://masters.cs.uchicago.edu/page/course-requests
This class is scheduled at a time that conflicts with these other classes: