Hard
In computational complexity theory, NP-hard (Non-deterministic Polynomial-time hard) refers to the class of decision problems H such that for every decision problem L in NP there exists a polynomial-time many-one reduction to H, written more...
Home
Boys
Girls
Infants & Toddlers
Men's Accessories
Backpacks, Bags
Belt Buckles
Belts
Briefcases
Hard
Other
Soft
Gloves, Mittens
Hats
Keychains
Neckwear, Ties
Organizers, Planners
Other Items
Sunglasses
Suspenders, Braces
Wallets, Holders
Men's Clothing
Uniforms
Vintage
Wedding Apparel
Women's Accessories,...
Women's Clothing
If H itself is in NP, then H is called NP-complete. Informally, this class can be described as containing the problems that are at least as hard as any decision problem in NP. This intuition is supported by the fact that if we can find an algorithm A that solves one of these problems H in polynomial time, we can construct a polynomial time algorithm for any problem L in NP by first performing the reduction from L to H and then running the algorithm A.
So, formally, a language L is NP-hard if The notion of NP-hardness plays an important role in the discussion about the relationship between the Complexity classes P and NP. The class NP-hard can be understood as the class of problems that are NP-complete or harder.
A common mistake is to think that the "NP" in "NP-hard" stands for "non-polynomial". Although it is widely suspected that there are no polynomial-time algorithms for these problems, this has never been proven. Furthermore, one should also remember that polynomial complexity problems are contained in the complexity class NP (though are not NP-hard unless P=NP).
The NP-family naming system is confusing: NP-hard problems are not all NP, despite having 'NP' as the prefix of their class name! However the names are now entrenched and unlikely to change.
Examples
An example of an NP-hard problem is the decision problem SUBSET-SUM which is this: given a set of integers, does any non empty subset of them add up to zero? That is a yes/no question, and happens to be NP-complete.
There are also decision problems that are NP-hard but not NP-complete, for example the halting problem. This is the problem "given a program and its input, will it run forever?" That's a yes/no question, so this is a decision problem. It is easy to prove that the halting problem is NP-hard but not NP-complete. For example the Boolean satisfiability problem can be reduced to the halting problem by transforming it to the description of a Turing machine that tries all truth value assignments and when it finds one that satisfies the formula it halts and otherwise it goes into an infinite loop. It is also easy to see that the halting problem is not in NP since all problems in NP are decidable in a finite number of operations, while the halting problem, in general, is not.
Alternative definitions
An alternative definition of NP-hard that is often used replaces polynomial-time many-one reductions with polynomial-time Turing reductions. This notion of NP-hardness can be formulated for function problems and not just decision problems.
Read more at Wikipedia.org
|