Essential cookies keep your basket and sign-in working. Optional cookies help us understand visits and measure ads. Privacy details.
Class of problems that are both in NP and NP-hard, representing the hardest problems in NP.
AI-assisted explanation. It may contain errors; use a textbook or original source to check important details.
NP-completeness isn’t a single numeric equation—it’s a label we give to certain computational problems that sit at a dramatic crossroads. Imagine you’re given a puzzle solution and asked: “Is this solution correct?” For many puzzles, checking a proposed solution is fast. For example, if someone claims they found a route visiting every city exactly once with total distance 1,237 km, you can quickly add the distances and confirm. Problems whose solutions can be verified quickly (in polynomial time) belong to a class called NP. Now imagine the “hardest” puzzles of this kind: if you could solve just one of them quickly, you could solve every NP problem quickly, by translating (reducing) each NP problem into that one. Those “hardest-in-NP” problems are called NP-hard. A problem is NP-complete if it is BOTH: 1) In NP (a proposed solution can be verified quickly), and 2) NP-hard (it is at least as hard as every problem in NP, via polynomial-time reductions). So NP-completeness means: “This problem is one of the central boss battles of efficient computation. A fast algorithm for it would unlock fast algorithms for a huge universe of problems.” The unresolved mystery is whether these problems actually have fast (polynomial-time) solution algorithms. That’s the famous P vs NP question.
The idea crystallized in the early 1970s, when computer science was trying to understand why so many important problems resisted efficient algorithms. In 1971, Stephen Cook proved a landmark result: Boolean satisfiability (SAT) is NP-complete (now called the Cook–Levin Theorem). This was the breakthrough that turned a vague sense of “hardness” into a precise mathematical framework. In 1972, Richard Karp amplified the revolution by showing that 21 more fundamental problems (like Hamiltonian cycle, vertex cover, clique, etc.) are NP-complete, using the powerful method of polynomial-time reductions. This created a kind of “periodic table of difficulty” for computation: once you know one NP-complete problem, you can prove many others NP-complete by chaining reductions. The framework became central to theoretical computer science and practical algorithm design, because it tells you when to stop searching for a perfect efficient algorithm and start looking for approximations, heuristics, or special-case structure.
Pioneered by: The concept and first major result are primarily credited to Stephen Cook (1971) and, independently, Leonid Levin (early 1970s). Richard Karp (1972) popularized and greatly expanded the theory by proving many classic problems NP-complete.