The aim of the course is to introduce the theory of computational
complexity. The course will explain measures of the complexity of
problems and of algorithms, based on time and space used on abstract
models. Important complexity classes will be defined, and the notion
of completeness established through a thorough study of
NP-completeness. Applications to cryptography will be considered.