

  • 6
    You may be interested in the answers to this question: stackoverflow.com/questions/111307/…
    – Dan Dyer
    Oct 17 '08 at 10:58
  • 1
    Well I decided to write my own answer because I didn't like the way the accepted answer is presented, and included a link to the P=NP question.
    – grom
    Nov 24 '08 at 6:22
  • 1
    There is a very good arsdigita lecture on discrete mathematics that explains what an NP-complete problem is. The first 50 minutes are mainly on boolean algebra. So jump right to the beginning of minute 53 if you are only interested in the concepts of P, NP, NP-completeness, the boolean satisfiability problem and reduction.
    – davitenio
    Jan 3 '09 at 0:18
  • 1
    We'll never know because with a large n it will never complete ;)
    – Pete Alvin
    Apr 28 '14 at 20:04
  • 2
    I very like and really recommend to check this video explanation: youtube.com/watch?v=YX40hbAHx3s Feb 25 '17 at 20:39

14 Answers 14


What is NP?

NP is the set of all decision problems (questions with a yes-or-no answer) for which the 'yes'-answers can be verified in polynomial time (O(nk) where n is the problem size, and k is a constant) by a deterministic Turing machine. Polynomial time is sometimes used as the definition of fast or quickly.

What is P?

P is the set of all decision problems which can be solved in polynomial time by a deterministic Turing machine. Since they can be solved in polynomial time, they can also be verified in polynomial time. Therefore P is a subset of NP.

What is NP-Complete?

A problem x that is in NP is also in NP-Complete if and only if every other problem in NP can be quickly (ie. in polynomial time) transformed into x.

In other words:

  1. x is in NP, and
  2. Every problem in NP is reducible to x

So, what makes NP-Complete so interesting is that if any one of the NP-Complete problems was to be solved quickly, then all NP problems can be solved quickly.

See also the post What's "P=NP?", and why is it such a famous question?

What is NP-Hard?

NP-Hard are problems that are at least as hard as the hardest problems in NP. Note that NP-Complete problems are also NP-hard. However not all NP-hard problems are NP (or even a decision problem), despite having NP as a prefix. That is the NP in NP-hard does not mean non-deterministic polynomial time. Yes, this is confusing, but its usage is entrenched and unlikely to change.

  • 4
    "That is the NP in NP-hard does not mean non-polynomial" <- The NP in NP-complete (or anywhere else) doesn't mean non-polynomial either.
    – sepp2k
    Mar 19 '10 at 17:19
  • 1
    Thanks sepp2k for the correction. I meant to say it doesn't mean NP (ie non-deterministic polynomial time).
    – grom
    Apr 16 '10 at 1:07
  • 1
    I think your answer simplifies as much or more than others in this thread. But this is still a very hard problem for me to grasp... Guess that is why they pay algorithm guys the big bucks. Sep 17 '12 at 19:14
  • 4
    About NP : I think it should be : The problem can be solve by nondeterministic Turing machine. (nonderterministic rather than derministic)
    – hqt
    Oct 17 '12 at 17:11
  • 2
    @hqt What I wrote is correct.. Notice the word "verified". You are also correct, NP can be solved in polynomial time by non-deterministic Turing machine
    – grom
    Oct 18 '12 at 1:51

NP stands for Non-deterministic Polynomial time.

This means that the problem can be solved in Polynomial time using a Non-deterministic Turing machine (like a regular Turing machine but also including a non-deterministic "choice" function). Basically, a solution has to be testable in poly time. If that's the case, and a known NP problem can be solved using the given problem with modified input (an NP problem can be reduced to the given problem) then the problem is NP complete.


Edit: As others have noted, there are often approximate solutions for NP-Complete problems. In this case, the approximate solution usually gives an approximation bound using special notation which tells us how close the approximation is.

  • 2
    "... an NP problem can be reduced to the given problem ..." - an important constraint on the reduction is that it should be deterministically polynomial. Oct 17 '08 at 7:21
  • 2
    The O() notation is a general mathematical notation used everywhere: approximation algorithms are indeed given to O() accuracy -- look up any approximation algorithm paper on arxiv.org
    – Ying Xiao
    Nov 21 '08 at 1:36
  • 1
    To clarify a bit, NP problems are referencing non-deterministic Turing machines. It is still unknown if a NP-complete problem can be solved in polynomial time on a deterministic Turing machine.
    – rjzii
    Dec 6 '09 at 6:06
  • 1
    @Yuval: Just to make it clear. What you had earlier was completely wrong(unless P=NP). From your comment I get the feeling that you think both versions were right. If not, I apologize.
    – Aryabhatta
    May 20 '10 at 17:44
  • 41
    This answer is far from complete and understandable, and I cannot understand why it has so many upvotes.
    – nbro
    Jun 15 '15 at 13:32

NP-Complete means something very specific and you have to be careful or you will get the definition wrong. First, an NP problem is a yes/no problem such that

  1. There is polynomial-time proof for every instance of the problem with a "yes" answer that the answer is "yes", or (equivalently)
  2. There exists a polynomial-time algorithm (possibly using random variables) that has a non-zero probability of answering "yes" if the answer to an instance of the problem is "yes" and will say "no" 100% of the time if the answer is "no." In other words, the algorithm must have a false-negative rate less than 100% and no false positives.

A problem X is NP-Complete if

  1. X is in NP, and
  2. For any problem Y in NP, there is a "reduction" from Y to X: a polynomial-time algorithm that transforms any instance of Y into an instance of X such that the answer to the Y-instance is "yes" if and only if the answer X-instance is "yes".

If X is NP-complete and a deterministic, polynomial-time algorithm exists that can solve all instances of X correctly (0% false-positives, 0% false-negatives), then any problem in NP can be solved in deterministic-polynomial-time (by reduction to X).

So far, nobody has come up with such a deterministic polynomial-time algorithm, but nobody has proven one doesn't exist (there's a million bucks for anyone who can do either: the is the P = NP problem). That doesn't mean that you can't solve a particular instance of an NP-Complete (or NP-Hard) problem. It just means you can't have something that will work reliably on all instances of a problem the same way you could reliably sort a list of integers. You might very well be able to come up with an algorithm that will work very well on all practical instances of a NP-Hard problem.

  • 1
    I don't like to brag, but I am pretty proud of my deterministic polynomial-time algorithm that I've proven doesn't exist. ;) Oct 17 '08 at 2:41
  • 23
    I have discovered a truly marvellous proof of this, which this comment is too narrow to contain ;)
    – quick_dry
    Oct 17 '08 at 3:37
  • Condition #2 is a statement of P=?NP, not the standard definition of NP-completeness. It should be: a deterministic poly-time algorithm exists that can transform any other NP instance X into an instance Y of this problem s.t. the answer to Y is "yes" if and only if the answer to X is "yes". Oct 17 '08 at 5:28
  • "you have to be careful or you will get the definition wrong" -- as proven by this very answer. This answer is partly right but it sure shouldn't have been accepted. Oct 17 '08 at 6:07

Basically this world's problems can be categorized as

         1) Unsolvable Problem          2) Intractable Problem          3) NP-Problem          4) P-Problem

         1)The first one is no solution to the problem.          2)The second is the need exponential time (that is O (2 ^ n) above).          3)The third is called the NP.          4)The fourth is easy problem.

P: refers to a solution of the problem of Polynomial Time.

NP: refers Polynomial Time yet to find a solution. We are not sure there is no Polynomial Time solution, but once you provide a solution, this solution can be verified in Polynomial Time.

NP Complete: refers in Polynomial Time we still yet to find a solution, but it can be verified in Polynomial Time . The problem NPC in NP is the more difficult problem, so if we can prove that we have P solution to NPC problem then NP problems that can be found in P solution.

NP Hard: refers Polynomial Time is yet to find a solution, but it sure is not able to be verified in Polynomial Time . NP Hard problem surpasses NPC difficulty.

  • Glad to see this answer, the categorization part is quite expressive for whole concept. I thought interactable problems are NP-Problems.
    – PeerNet
    May 21 '19 at 0:19

NP-Complete is a class of problems.

The class P consists of those problems that are solvable in polynomial time. For example, they could be solved in O(nk) for some constant k, where n is the size of the input. Simply put, you can write a program that will run in reasonable time.

The class NP consists of those problems that are verifiable in polynomial time. That is, if we are given a potential solution, then we could check if the given solution is correct in polynomial time.

Some examples are the Boolean Satisfiability (or SAT) problem, or the Hamiltonian-cycle problem. There are many problems that are known to be in the class NP.

NP-Complete means the problem is at least as hard as any problem in NP.

It is important to computer science because it has been proven that any problem in NP can be transformed into another problem in NP-complete. That means that a solution to any one NP-complete problem is a solution to all NP problems.

Many algorithms in security depends on the fact that no known solutions exist for NP hard problems. It would definitely have a significant impact on computing if a solution were found.

  • this is wrong. A problem in NP can be transformed into any problem in NP-complete, not any problem in NP. That's a big difference. Oct 17 '08 at 2:19
  • Also, "the problem is as hard as any problem in NP" -- true, but better wording would be "at least as hard". Overall, this answer comes closer than any other answer I've seen, and closer than the unfortunately accepted answer. Oct 17 '08 at 6:17
  • Thank you for your observations. I have updated the answer tio include your corrections. Oct 19 '08 at 2:06
  • 1
    Your definition of NP-Complete is not complete, you need also to specify that NP-Complete problems are also NP (and NP-hard) problems and not just as hard as any NP problems. I will downvote, if you decide to change, make me know and I remove the downvote.
    – nbro
    Jun 15 '15 at 14:49

It's a class of problems where we must simulate every possibility to be sure we have the optimal solution.

There are a lot of good heuristics for some NP-Complete problems, but they are only an educated guess at best.

  • Almost right. A problem can have a non-exhaustive solution that's still not polynomial in nature. Oct 17 '08 at 1:51
  • 1
    Although not exactly right, this is close enough for practical use. The pedantic definition is not necessary although the OP probably wants the pedantic definition. It's a good approximation!
    – doug65536
    Jan 2 '13 at 19:24

If you're looking for an example of an NP-complete problem then I suggest you take a look at 3-SAT.

The basic premise is you have an expression in conjunctive normal form, which is a way of saying you have a series of expressions joined by ORs that all must be true:

(a or b) and (b or !c) and (d or !e or f) ...

The 3-SAT problem is to find a solution that will satisfy the expression where each of the OR-expressions has exactly 3 booleans to match:

(a or !b or !c) and (!a or b or !d) and (b or !c or d) ...

A solution to this one might be (a=T, b=T, c=F, d=F). However, no algorithm has been discovered that will solve this problem in the general case in polynomial time. What this means is that the best way to solve this problem is to do essentially a brute force guess-and-check and try different combinations until you find one that works.

What's special about the 3-SAT problem is that ANY NP-complete problem can be reduced to a 3-SAT problem. This means that if you can find a polynomial-time algorithm to solve this problem then you get $1,000,000, not to mention the respect and admiration of computer scientists and mathematicians around the world.

  • Perhaps I'm confused by the other explanations here but shouldn't this read "ANY NP problem can be reduced to a 3-SAT problem in polynomial time." Because isn't that what makes 3-SAT NP-Complete? Oct 6 '17 at 18:04
  • @DubiousPusher Nope. The answer states it correctly. This image clarifies it stackoverflow.com/a/7367561/2686502 May 10 '20 at 14:13

Honestly, Wikipedia might be the best place to look for an answer to this.

If NP = P, then we can solve very hard problems much faster than we thought we could before. If we solve only one NP-Complete problem in P (polynomial) time, then it can be applied to all other problems in the NP-Complete category.

  • 6
    "If NP = P, then we can solve very hard problems much faster than we thought we could before." -- Nope. If NP = P then there exist solutions (there exist deterministic algorithms to solve them) but there's no guarantee that we'll ever know what they are. Oct 17 '08 at 6:10
  • A fair point. My guess is any proof that P = NP is likely to be constructive though (e.g., the publication of a polynomial algorithm for 3-SAT). Oct 17 '08 at 17:43

We need to separate algorithms and problems. We write algorithms to solve problems, and they scale in a certain way. Although this is a simplification, let's label an algorithm with a 'P' if the scaling is good enough, and 'NP' if it isn't.

It's helpful to know things about the problems we're trying to solve, rather than the algorithms we use to solve them. So we'll say that all the problems which have a well-scaling algorithm are "in P". And the ones which have a poor-scaling algorithm are "in NP".

That means that lots of simple problems are "in NP" too, because we can write bad algorithms to solve easy problems. It would be good to know which problems in NP are the really tricky ones, but we don't just want to say "it's the ones we haven't found a good algorithm for". After all, I could come up with a problem (call it X) that I think needs a super-amazing algorithm. I tell the world that the best algorithm I could come up with to solve X scales badly, and so I think that X is a really tough problem. But tomorrow, maybe somebody cleverer than me invents an algorithm which solves X and is in P. So this isn't a very good definition of hard problems.

All the same, there are lots of problems in NP that nobody knows a good algorithm for. So if I could prove that X is a certain sort of problem: one where a good algorithm to solve X could also be used, in some roundabout way, to give a good algorithm for every other problem in NP. Well now people might be a bit more convinced that X is a genuinely tricky problem. And in this case we call X NP-Complete.




A classic example of an NP-Complete problem is The Traveling Salesman Problem."

The author: ApoxyButt From: http://www.everything2.com/title/NP-complete


The definitions for NP complete problems above is correct, but I thought I might wax lyrical about their philosophical importance as nobody has addressed that issue yet.

Almost all complex problems you'll come up against will be NP Complete. There's something very fundamental about this class, and which just seems to be computationally different from easily solvable problems. They sort of have their own flavour, and it's not so hard to recognise them. This basically means that any moderately complex algorithm is impossible for you to solve exactly -- scheduling, optimising, packing, covering etc.

But not all is lost if a problem you'll encounter is NP Complete. There is a vast and very technical field where people study approximation algorithms, which will give you guarantees for being close to the solution of an NP complete problem. Some of these are incredibly strong guarantees -- for example, for 3sat, you can get a 7/8 guarantee through a really obvious algorithm. Even better, in reality, there are some very strong heuristics, which excel at giving great answers (but no guarantees!) for these problems.

Note that two very famous problems -- graph isomorphism and factoring -- are not known to be P or NP.


NP Problem :-

  1. NP problem are such problem that can be solved in non-deterministic polynomial time.
  2. Non deterministic algorithm operate in two stage.
  3. Non deterministic guessing stage && Non deterministic verification stage.

Type of Np Problem

  1. NP complete
  2. NP Hard

NP Complete problem :-

1 Decision Problem A is called NP complete if it has following two properties:-

  1. It belong to class NP.
  2. Every other problem in NP can be transformed to P in polynomial time.

Some Ex :-

  • Knapsack problem
  • sub set sum problem
  • Vertex covering problem
  • Quick question about your stages... can't the verification stage be deterministic? Aren't NP problems verified in P-time Nov 6 '19 at 17:23

As far as I understand

P is the set of problems which could be solved in polynomial time with a deterministic TM.

NP is the set of problems which requires a non-deterministic TM to be solved in polynomial time. This means that we can check all different combinations of variables in parallel with each instance taking polynomial time. If the problem is solvable then at least one of those parallel instances of TM would halt with "yes". This also means that if you could make a correct guess about the variables/solution then you just need to check it's validity in polynomial time.

NP-Hard is the set where problems are harder than NP. This means NP-Hard problem are more difficult than any problem in NP set. These problems are exponential even when using non-determinism of Turing machines. So parallel computation does not helps while solving these problems.

NP-Complete is the intersection set of NP and NP-Hard. According to what I understood,

  1. problems in NP-Complete are at least as hard as the hardest problem in the NP set.
  2. The class of all NP-Complete problems are equivalent to each other, i.e, a problem in NP-Complete set can be reduced to any other NP-Complete problem. That means if any of the NP-Complete problem would have an efficient solution then all of the NP-Complete problems could be solved with same solution.

If any problem in NP-Complete set is deterministically solvable in polynomial time, then the entire NP-Complete set is deterministically solvable in polynomial time. Also since NP-Complete problems are at least as hard as the hardest problem in the NP set, all problems in the NP set (which are equal or easier than the problems in NP-Complete set) will be bounded above by deterministically polynomial running time, expanding the P set over the NP set, resulting in P=NP.

Please let me know if I made any mistake.


