Karp's 21 NP-complete problems
In computational complexity theory, Karp's 21 NP-complete problems are a set of computational problems which are NP-complete. In his 1972 paper, "Reducibility Among Combinatorial Problems", Richard Karp used Stephen Cook's 1971 theorem that the Boolean satisfiability problem is NP-complete to show that there is a polynomial time many-one reduction from the Boolean satisfiability problem to each of 21 combinatorial and graph theoretical computational problems, thereby showing that they are all NP-complete. This was one of the first demonstrations that many natural computational problems occurring throughout computer science are computationally intractable, and it drove interest in the study of NP-completeness and the P versus NP problem.
The problems
Karp's 21 problems are shown below, many with their original names. The nesting indicates the direction of the reductions used. For example, Knapsack was shown to be NP-complete by reducing Exact cover to Knapsack.Satisfiability: the Boolean satisfiability problem for formulas in conjunctive normal form- * 0–1 integer programming
- * Clique
- ** Set packing
- ** Vertex cover
- *** Set covering
- *** Feedback node set
- *** Feedback arc set
- *** Directed Hamilton circuit
- **** Undirected Hamilton circuit
- * Satisfiability with at most 3 literals per clause
- ** Chromatic number
- *** Clique cover
- *** Exact cover
- **** Hitting set
- **** Steiner tree
- **** 3-dimensional matching
- **** Knapsack
- ***** Job sequencing
- ***** Partition
- ****** '''Max cut'''