NPcompleteness
NP-completeness is a central notion in computational complexity theory. It concerns decision problems that are both in NP and at least as hard as every problem in NP. In formal terms, a problem is NP-complete if it belongs to NP and every problem in NP can be reduced to it by a polynomial-time many-one reduction. Intuitively, NP-complete problems are the hardest problems in NP because any NP problem can be transformed into them in polynomial time, so solving one would solve all NP problems. A problem is in NP if a proposed solution can be verified in polynomial time given a certificate.
A key tool for establishing NP-completeness is polynomial-time many-one reductions, also called Karp reductions. If A
NP-hard versus NP-complete: NP-hard problems need not be in NP; NP-complete problems are those in NP that
If any NP-complete problem were solvable in polynomial time, then P = NP. The widely believed separation