Course Code: CS564
Course Name: Computational Complexity
Prerequisites: A course in Formal Languages and Automata Theory

Preamble/ Objectives: This course is intended to study the nature of computation by defining concretely its notion and its limitations.
Syllabus: Turing machines: determinism and non-determinism, time and space hierarchy theorems; Time complexity: P, NP, co-NP, EXP, NEXP, hierarchy theorems, PH; Space complexity: PSPACE, NPSPACE, L, NL, hierarchy theorems; Boolean Circuits: P/poly, NC, AC; Probabilistic complexity: RP, coRP, ZPP, BPP, PP; Interactive Proofs: IP=PSPACE.
References: 1. Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach, Cambridge University Press, 2009.
2. C. H. Papadimitriou, Computational Complexity, Pearson, 1994.
3. Michael Sipser, Introduction to the Theory of Computation, Cengage, 2014.
4. Oded Goldreich, Computational Complexity: A Conceptual Perspective, Cambridge University Press, 2008.