NP-hardness

In computational complexity theory, a computational problem H is called NP-hard if, for every problem L which can be solved in non-deterministic polynomial-time, there is a polynomial-time reduction from L to H. That is, assuming a solution for H takes 1 unit time, H's solution can be used to solve L in polynomial time.

[1][2] As a consequence, finding a polynomial time algorithm to solve a single NP-hard problem would give polynomial time algorithms for all the problems in the complexity class NP.

For example, the optimization problem of finding the least-cost cyclic route through all nodes of a weighted graph—commonly known as the travelling salesman problem—is NP-hard.

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.

As NP plays a central role in computational complexity, it is used as the basis of several classes: NP-hard problems are often tackled with rules-based languages in areas including:

Euler diagram for P, NP, NP-complete, and NP-hard set of problems.
Euler diagram for P , NP , NP-complete, and NP-hard set of problems. The left side is valid under the assumption that P≠NP , while the right side is valid under the assumption that P=NP (except that the empty language and its complement are never NP-complete)