The focus of this book is the P-versus-NP Question and the theory of NP-completeness. It also provides adequate preliminaries regarding computational problems and computational models. The P-versus-NP Question asks whether or not finding solutions is harder than checking the correctness of solutions. An alternative formulation asks whether or not discovering proofs is harder than verifying their correctness. It is widely believed that the answer to these equivalent formulations is positive, and this is captured by saying that P is different from NP.

Although the P-versus-NP Question remains unresolved, the theory of NP-completeness offers evidence for the intractability of specific problems in NP by showing that they are universal for the entire class. Amazingly enough, NP-complete problems exist, and furthermore hundreds of natural computational problems arising in many different areas of mathematics and science are NP-complete.

### Contents

1. Computational tasks and models; 2. The P versus NP Question; 3. Polynomial-time reductions; 4. NP-completeness; 5. Three relatively advanced topics; Epilogue: a brief overview of complexity theory.

### Reviews

"The authorâ€™s very intuitive account of the most fundamental issues in complexity theory makes the book suitable for a first-year computational complexity class. To the authorâ€™s credit, rigor and formality are not compromised for this accessibility. In this sense, the book successfully brings the P versus NP question to a wider audience."
*Haris Aziz, Computing Reviews*

"One of the pleasures of reading a book by an expert is being exposed to opinions that may not be universally accepted."
*Paul Cull, Computing Reviews*

"The author is a well-known expert in the field of complexity theory and so is well-qualified to bring out this book which will serve as a very good introductory textbook. The focus on search problems and promise problems in this book is to be appreciated since many books neglect these topics."
*S.V. Naaraj, SIGACT News*