Theory of Computer Science is a book designed to meet the needs of the undergraduate and postgraduate students of computer science and engineering as well as those of the students who are pursuing the course on computer applications. The book is now in its third edition, and offers a cohesive presentation of all aspects of theoretical computer science, namely automata, formal languages, computability, and complexity. Besides, it includes coverage of mathematical preliminaries as well as well. The new edition also comes in with an expanded section on pigeonhole principle and the principle of induction and a new section on high-level description of TMs – Techniques for the construction of TMs – Multitape TM and non-deterministic TM. Two new chapters on Decidability and Recursively Enumerable Languages and Complexity Theory and NP-complete Problems are also added.