Developed from the authors' course on computational complexity theory, this book offers a gentle introduction to the theory of computational complexity. It explains the difficulties of computation, addressing problems that have no algorithm at all and problems that cannot be solved efficiently. The text assumes no prior knowledge of automata, advanced algorithmic analysis, and formal languages. Each chapter presents the fundamentals, examples, complete proofs of theorems, and a wide range of exercises. PowerPoint slides are available for download at www.crcpress.com.