Advanced Algorithms
Title  Advanced Algorithms (55005) 

Quarter  Autumn 2017 
Instructor  Amitabh Chaudhary (amitabh@cs.uchicago.edu) 
Website  
Syllabus  The study of algorithms is becoming increasingly significant as datasets used in computations grow in size; and is consistently voted as the single most useful subject in a computer science curriculum. This course in advanced algorithms covers topics from contemporary algorithms for students who have already taken a rigorous first course in algorithms.
The course begins with an indepth study of computational intractability and NPcompleteness, and follows it by studying practical algorithms for intractable problems: approximation algorithms and those based on local search. It then looks at how the power of random choices can be harnessed to avoid worstcase situations. The resulting randomized algorithms have been crucial in the success of modern computer systems. The next topic is amortized analysis, an advanced technique used to analyze situations in which algorithms maybe expensive in some of their operations, but are provably efficient over a sequence of operations.
Other topics are chosen based on student interest from among online algorithms, fast Fourier transforms, multithreaded algorithms, and computational geometry.
During the course, students practice how to take a realworld problem, formulate the algorithmic problem at its core, identify an appropriate design technique, describe unambiguously the resulting algorithm, and finally, prove its correctness and analyze its running time. The problems are drawn from a variety of application areas, including computer systems and networks, artificial intelligence, and computational biology.
EVALUATION
Readings and Participation: Students are assigned readings before each class that introduce the topic covered in class. These allow the class to move at a faster pace and cover deeper concepts. Readings may include questions to test understanding. Further, students are expected to participate actively in class discussions and on Piazza. Assignments: Assignments are due every week and are designed to test the understanding of the covered concepts and algorithms, and to build upon them to solve problems.
Assignments may be submitted up to 24 hours late with a 10% penalty. In case of extraordinary circumstances (illness, etc.), please email the instructor before the deadline for an extension, and provide documentation (doctor's note, etc.) in the next class. Examinations: Students appear for three inclass examinations, two midterms and one final.
BOOKS
The primary textbooks are
Every student is expected to have a copy; readings and assignments refer to the textbook. Supplementary materials are provided when required.

Prerequisites (Courses)  This course requires a strong command of discrete mathematics, including discrete probability, and introductory algorithms. For discrete mathematics, students should have taken MPCS 50103 Mathematics for Computer Science: Discrete Mathematics and obtained a B+ or higher, or passed the corresponding placement exam. For introductory algorithms, students should have taken MPCS 55001 Algorithms and obtained a B+ or higher, or passed the corresponding placement exam. If you believe you have an exceptional case or have other questions, please email the instructor. 
Prerequisites (Other)  
Satisfies  Core Theory

Time  Thursday 5:308:30 pm 
Location  Ryerson 277 