Sixteen-hour lecture course. Final-year computer science undergraduate
This course gives an introduction to the key ideas and techniques in computational complexity.
Reducibility among computational problems. Randomized problems. Polynomial time combinatorial problems. NP-completeness. Simple polynomial transformations. Pseudo-polynomial time algorithms. Approximation algorithms. Complexity classes beyong NP. Undecidability. The halting problem.
[1] D. P. Bovet and P. Crescenzi. Introduction to the Theory of Complexity. Prentice International Series in Computer Science. Prentice Hall, 1994.
[2] J. L. Balcazar, J. Diaz, and J. Gabarro. Structural Complexity I. Springer-Verlag, 1995.
[3] T. H. Cormen, C. E. Leiserson, and R. L. Rivest. Introduction to Algorithms. MIT Press, 1990.
[4] M. R. Garey and D. S. Johnson. Computers and Intractability: A guide to the Theory of NP-Completeness. Freeman, 1979.
[5] D. Harel. Algorithmcs: The Spirit of Computing. Addison-Wesley, 2nd edition, 1992.
[6] J. E. Hopcroft and J. D. Ullman. Introduction to Automata Theory, Languages and Computation. Addison-Wesley, 1979.
[7] R. Motwani and P. Raghavan. Randomized Algorithms. Cambridge University Press, 1995.
[8] C. H. Papadimitriou. Computational Complexity. Addison-Wesley, 1994.
[9] M. Sipser. Introduction to the Theory of Computation. PWS Publishing Company, January 1997.
Hardcopies of the above are available from the Reception. Here is a list of Additions, Corrections and Typos. [Last updated on 4 March 1999] A revised version (28 Map 1999) of this year's notes is available.
The above documents are in PostScript which can be read using ftp-able software such as Acrobat Reader produced by Adobe.
[Last updated on 4 March 1999 by Luke Ong]