Introduction to Algorithms, Computability, and Complexity

Harvard Extension School

CSCI E-120

Section 1

CRN 17283

View Course Details
Looking at the world around us, we see computers solving problems on incredibly large scales: finding webpages relevant to our internet searches and returning them in sorted order, computing the quickest way to reach a destination given current traffic conditions, and matching people on dating sites. How is this possible? More computing power? Intensive application-specific engineering? While these certainly have had a role to play, in this course, students are exposed to and learn how to use general algorithm design principles that cut across application domains and remain relevant even as computing technology changes. First among these principles is mathematical abstraction, whereby we capture the essence of a computational problem (as well as the notion of what a computer is) so that we can develop and analyze solutions independent of an implementation. Given these mathematical abstractions, we can apply a toolkit of basic algorithmic techniques in the search for solutions and then gain certainty in their correctness and efficiency through rigorous mathematical proofs. Furthermore, the powerful concept of reductions allows us to identify relationships between computational problems that seem very different on the surface and thus automatically transfer solutions from one to another. At the same time, some important computational problems have defied the search for algorithmic solutions. Computer scientists would love to have debugging tools that determine whether their programs can crash, natural scientists would love to have simulators that quickly determine the energy-minimizing states of physical or biological systems, and university registrars would love to be able to automatically schedule classes in a way that optimally maximizes the use of the best classrooms. Why have no scalable algorithms been found for these problems? In the last part of the course, students learn that many important computational problems are inherently unsolvable—they have no general algorithmic solution whatsoever. Others are solvable, but have no efficient algorithm—the minimum computation time inherently grows exponentially with the size of the problem instance. Uncovering these phenomena (known as uncomputability and intractability, respectively) are unique benefits of a mathematically rigorous approach to algorithms. While we may sometimes be satisfied with empirical demonstrations of the performance of an algorithm we have found, a proof seems to be the only way to convince ourselves that there is no algorithm whatsoever. This course aims to give students the power of using mathematical abstraction and rigorous proof to understand computation. Thus equipped, students are able to design and use algorithms that apply to a wide variety of computational problems with confidence about their correctness and efficiency, as well as recognize when a problem may have no algorithmic solution. At the same time, students may gain an appreciation for the beautiful mathematical theory of computation that is independent of (indeed, predates) the technology on which it is implemented.

Instructor Info

Anurag Anshu, PhD

Assistant Professor of Computer Science, John A. Paulson School of Engineering and Applied Sciences, Harvard University


Salil P. Vadhan, PhD

Vicky Joseph Professor of Computer Science and Applied Mathematics and Harvard College Professor, Harvard University


Meeting Info

9/3 to 12/21

Participation Option: Online Asynchronous

In online asynchronous courses, you are not required to attend class at a particular time. Instead you can complete the course work on your own schedule each week.

Deadlines

Last day to register: August 29, 2024

Additional Time Commitments

Optional sections to be arranged.

Prerequisites

Experience with proofs and discrete mathematics at the level of CSCI E-20, and (Python) programming at the level of CSCI E-50.

Notes

The recorded lectures are from the Harvard John A. Paulson School of Engineering and Applied Sciences companion course Computer Science 1200. Registered students can ordinarily live stream the lectures Tuesdays and Thursdays, 9:45-11:00 am starting September 3 or they can watch them on demand. The recorded sessions are typically available within a few hours of the end of class and no later than the following business day. Class sessions for this course may include students enrolled in the FAS companion course. Accordingly, when you participate in live class sessions, you will do so alongside both Division of Continuing Education (DCE) and FAS students. If you participate in a way that causes you to appear in recordings of the class, those recordings may be shown to DCE students enrolled in this course or FAS students enrolled in the companion course, according to the policies of the two schools on accessing recordings of class sessions.

All Sections of this Course

CRN Section # Participation Option(s) Instructor Section Status Meets Term Dates
17283 1 Online Asynchronous Team Taught Open Sep 3 to Dec 21