NP-Complete problems are the hardest problems (no problem is harder) in NP, i.e., every problem in NP reduces to an NP-Complete problem.

- A language L
{0,1}* is
**NP-Complete**if L NP, and for every L' NP. - The class of NP-Complete languages is called
**NPC**. - A language L
{0,1}* is
**NP-Hard**if for every L' NP. - A language that is NP-Hard is not necessarily in NP.

E.g., Kth Largest Subset is NP-Hard, but not NPC.

KLS: are there at least K distinct subsets A' of set A such that ?

If we can solve one NPC problem in polynomial time, we can solve every problem in NP in polynomial time. For this reason, many assume P NP.