Computational Complexity: 20162017
Lecturer 

Degrees 
Schedule B2 (CS&P) — Computer Science and Philosophy Schedule B2 — Computer Science 
Term 
Hilary Term 2017 (16 lectures) 
Overview
This course is an introduction to the theory of computational complexity and standard complexity classes. One of the most important insights to have emerged from Theoretical Computer Science is that computational problems can be classified according to how difficult they are to solve. This classification has shown that many computational problems are impossible to solve, and many more are impractical to solve in a reasonable amount of time. To classify problems in this way, one needs a rigorous model of computation, and a means of comparing problems of different kinds. This course introduces these ideas, and shows how they can be used.Learning outcomes
The course is designed to enable students to:
 Classify decision problems into appropriate complexity classes, including P, NP, PSPACE and complexity classes based on randomised machine models and use this information effectively.
 State precisely what it means to reduce one problem to another, and construct reductions for simple examples.
 Classify optimisation problems into appropriate approximation complexity classes and use this information effectively.
 Use the concept of interactive proofs in the analysis of optimisation problems.
Prerequisites
There are no formal prerequisites, and the course begins with a review of some basic material, including Turing machines and decision problems; however, for students with no previous exposure to these topics the course on Foundations of Computer Science might be a better choice.
Synopsis
 [1 lecture] Introduction. Easy and hard problems. Algorithms and complexity.
 [1 lecture] Turing machines. Models of computation. Multitape deterministic and nondeterministic Turing machines. Decision problems.
 [1 lecture] The Halting Problem and Undecidable Languages. Counting and diagonalisation. Tape reduction. Universal Turing machine. Undecidability of halting. Reductions. Rice's theorem.
 [1 lecture] Deterministic Complexity Classes. DTIME[t]. Linear Speedup Theorem. PTime. Polynomial reducibility. Polytime algorithms: 2satisfiability, 2colourability.
 [4 lectures] NP and NPcompleteness. Nondeterministic Turing machines. NTIME[t]. NP. Polynomial time verification. NPcompleteness. CookLevin Theorem. Polynomial transformations: 3satisfiability, clique, colourability, Hamilton cycle, partition problems. Pseudopolynomial time. Strong NPcompleteness. Knapsack. NPhardness.
 [4 lectures] Space complexity and hierarchy theorems. DSPACE[s]. Linear Space Compression Theorem. PSPACE, NPSPACE. PSPACE = NPSPACE. PSPACEcompleteness. Quantified Boolean Formula problem is PSPACEcomplete. L, NL and NLcompleteness. NL=coNL. Hierarchy theorems.
 [2 lectures] Optimization and approximation. Combinatorial optimisation problems. Relative error. Binpacking problem. Polynomial and fully polynomial approximation schemes. Vertex cover, travelling salesman problem, minimum partition.
 [2 lectures] Randomized Complexity. The classes BPP, RP, ZPP. Interactive proof systems: IP = PSPACE.
Syllabus
Turing machines, decision problems, time and space complexity, polynomial time algorithms, NP and NPcompleteness, standard time and space complexity classes, optimization problems and approximation algorithms, randomised algorithms and complexity classes based on randomised machine models, interactive proofs and their relation to approximation.Reading list
Primary Text
 M Sipser. Introduction to the Theory of Computation, (First edition  PWS Publishing Company, January 1997, or second edition  Thomson Course Technology, 2005).
Supplementary List
 Arora, Barak. Computational Complexity. Cambridge University Press, 2009.
 I Wegener. Complexity Theory, Springer, 2005.
 C H Papadimitriou. Computational Complexity, AddisonWesley, 1994.
 M R Garey and D S Johnson. Computers and Intractability: A Guide to the Theory of NPCompleteness, Freeman, 1979.
 T H Cormen, S Clifford, C E Leiserson and R L Rivest. Introduction to Algorithms, MIT Press, Second edition, 2001.
 Oded Goldreich. Computational Complexity, Cambridge University press.
 Vijay V. Vazirani. Approximation Algorithms, Springer, Second edition, 2003.