17.1 Introduction 17.1.1 Complexity for the Impatient 17.2 Upper and Lower Bounds17.2.1 Algorithmic Gap 17.3 Efficiency and Tractability 17.3.1 Problem Description17.3.2 A Quick and Operating Definition of NP-Complete Problems17.3.3 Some Known NP-Complete Problems17.3.4 What is a Certificate?17.3.5 Non-deterministic Algorithms 17.4 NP-Completeness 17.5 Polynomial Time Reductions17.6 Problem Classes P, NP, and Others17.6.1 Class P-Complete17.7 Bounded Halting is in NPC 17.8 Cook’s Theorem 17.8.1 An Example Reduction to SAT17.8.2 Examples of Problems in Different Classes17.9 Is P = NP?17.9.1 NP-Completeness17.9.2 How to Prove NP-Completeness in Practice17.9.3 Primality Test17.10 Approximate Solutions to NPC Problems17.11 Provably Intractable Problems 17.11.1 Example—An Intractable SAT17.12 Even Harder Problems 17.13 Unreasonable Requirements of Memory 17.14 Complexity Classes and Intractability17.15 Non-computability and Undecidability17.16 Algorithmic Program Verification 17.16.1 Halting Problem (HP)17.17 Partially and Highly Undecidable Problems17.18 The Four Levels of Algorithmic Behaviour SummaryKey Terms Web Resources