Course Meeting Times

Lectures: 2 sessions / week, 1.5 hours / session


This course is intended for graduate students studying the theory of computation.


Most of the prerequisite knowledge for this class is contained in Theory of Computation (18.404). However, this class will be an order of magnitude more difficult.

Course Outline

This class will survey some of the most important developments in complexity theory. After completing the class, students should be able to read and contribute to current research in the field.

A rough list of topics is

  • Basic time and space classes, the polynomial-time hierarchy.
  • Randomized classes: RP, BPP, RL, and their relation to PH.
  • Counting classes: #P
  • Non-uniform classes
  • Oracles, relativization
  • Interactive proof systems
  • Pseudo-random generators, or do we need randomness?
  • Some circuit lower bounds--monotone and AC0.


There will be 4-5 problem sets during the semester. Each student will also be responsible for editing the lecture notes from two lectures. Some students will write notes for lectures that do not overlap with last year.


There is no required textbook for this course, but there is a list of recommended backgroung readings.


Grades will be determined 80% by the problem sets, and 20% by scribe notes.