This textbook is uniquely written with dual purpose. It covers core material in the foundations of computing for graduate students in computer science and also provides an introduction to some more advanced topics for those intending further study in the area. The book contains an invaluable collection of lectures for first-year graduates on the theory of computation, focusing primarily on computational complexity theory. It also deals with the classification of computational problems in terms of their inherent complexity.
It incorporates rigorous treatment of computational models, such as deterministic, nondeterministic, and alternating Turing machines; circuits; probabilistic machines; interactive proof systems; automata on infinite objects; and logical formalisms. Features include more than 40 lectures for first year graduate students, and a dozen homework sets and exercises. The book is aimed at advanced undergraduates and first-year graduates in Computer Science or Mathematics.