NP-Completeness

Verification, polynomial reductions, and what makes a problem NP-complete.

The idea

NP-completeness is the theory of which problems we can reasonably hope to solve efficiently. It is stated for decision problems, whose answer is yes or no; little is lost, since finding a smallest vertex cover and deciding whether one of size $k$ exists are efficiently interconvertible.

P is the class of decision problems solvable in polynomial time. NP is the class of decision problems whose yes-instances have a certificate: evidence that a polynomial-time checker can verify, such as a satisfying assignment for a satisfiable formula, or the cover itself for a graph with a small vertex cover. NP concerns checking a proposed answer, not producing one, and every problem in P is in NP.

Problems are compared by polynomial-time reduction. A reduction from $A$ to $B$ converts any instance of $A$, in polynomial time, into an instance of $B$ with the same answer. It carries algorithms forward — convert, then run $B s algorithm — and therefore carries hardness backward: $B$ is at least as hard as $A$.

Definition (NP-complete).

A decision problem $X$ is NP-complete when $X$ is in NP and every problem in NP reduces to $X$ in polynomial time.

Thousands of natural problems are NP-complete, and each is a hardest problem in NP: a polynomial-time algorithm for any one of them would yield one for all of NP at once and settle whether P $=$ NP. Decades of failure to find such an algorithm are the evidence that none exists.

Ways to work on it

Builds on

Leads to

Not sure where to start? Take the ten-question placement test.