CS 254 -- Computational Complexity -- Spring 2010

[general info]  [lecture notes] [homeworks] [midterm and project]

what's new

general information

Instructor: Luca Trevisan, Gates 474, Tel. 650 723-8879, email trevisan at stanford dot edu

TA: Rita Ren, email rren at stanford dot edu

Classes are Mondays-Wednesdays, 12:50-2:05, In Building 380, room 380F

Office hours:

References: the main reference for the course will be lecture notes. New lecture notes will be distributed after each lecture. A recommended textbook is

Another very good book, which covers only part of the topics of the course is About this course: Computational Complexity theory looks at the computational resources (time, memory, communication, ...) needed to solve computational problems that we care about, and it is especially concerned with the distinction between "tractable" problems, that we can solve with reasonable amount of resources, and "intractable" problems, that are beyond the power of existing, or conceivable, computers. It also looks at the trade-offs and relationships between different "modes" of computation (what if we use randomness, what if we are happy with approximate, rather than exact, solutions, what if we are happy with a program that works only for most possible inputs, rather than being universally correct, and so on). 

This course will roughly be divided into two parts: we will start with "basic" and "classical" material about time, space, P versus NP, polynomial hierarchy and so on, including  moderately modern and advanced material, such as the power of randomized algorithm, the complexity of counting problems, and the average-case complexity of problems. In the second part, we will focus on more research oriented material, to be chosen among: (i)  PCP and hardness of approximation; (ii) lower bounds for proofs and circuits; and (iii) derandomization and average-case complexity; (iv) quantum complexity theory.

There are at least two goals to this course. One is to demonstrate the surprising connections between computational problems that can be discovered by thinking abstractly about computations: this includes relations between learning theory and average-case complexity, the Nisan-Wigderson approach to turn intractability results into algorithms, the connection, exploited in PCP theory, between efficiency of proof-checking and complexity of approximation, and so on. The other goal is to use complexity theory as an "excuse" to learn about several tools of broad applicability in computer science such as expander graphs, discrete Fourier analysis, learning, and so on.

classes and lecture notes

  1. 03/29. Introduction.

  2. 03/31. P vs NP, deterministic hierarchy theorem.

  3. 04/05. Boolean circuits, BPP.

  4. 04/07. Error-reduction for randomized algorithms, Adleman's theorem, definition of polynomial hierarchy.

  5. 04/12. More on the polynomial hiearchy, BPP in Sigma2.

  6. 04/14. Karp-Lipton theorem, sketch of Kannan's theorem, definition of #P, Valiant-Vazirani (statement).

  7. 04/19. Valiant-Vazirani (proof).

  8. 04/21. Approximate counting with an NP oracle.

  9. 04/26. PCP Theorem (introduction and definitions)

  10. 04/28. PCP Theorem (equivalence of two formulations and some applications)

  11. 05/03. PCP Theorem (2CSP and overview of the proof)

  12. 05/05. PCP Theorem (reduction to bounded-degree case)

  13. 05/10. PCP Theorem (amplification)

  14. 05/12. Inapproximability of Metric Steiner Tree

  15. 05/17. Parity not in AC0: approximating circuits by polynomials

  16. 05/19. Parity not in AC0: parity is not approximable by polynomials

  17. 05/24. Natural Proofs and pseudorandomness

  18. 05/26. One-way functions and pseudorandom generators.

Tentative plan:


  1. Problem set 1 out Apr 14, due Apr 22
  2. Problem set 2 out May 12, due May 21


The midterm is due May 6

See the project page for information on the final project.