Nondeterministic polynomial time

 

A verifier for a language A is an algorithm V, where

A = {w | V accepts <w,c> for some string c}.

 

We measure the time of a verifier only in terms of the length of w, so a polynomial time verifier runs in polynomial time in the length of w.

 

A language A is polynomially verifiable if it has a polynomial time verifier.

 

NP is the class of languages that have polynomial time verifiers.

 

NTIME(t(n)) = {L| L is a language decided by a O(t(n)) time nondeterministic Turing machine}.

 

NP  =  NTIME(nk)

 

The best method known for solving languages in NP deterministically uses exponential time. (Remember, computers are deterministic by their very nature.)

 

NP Í EXPTIME = TIME(2)


Exponential time algorithms typically arise when we solve problems by exhaustively searching through a space of solutions, called brute-force search.

 

Sometimes, brute-force search may be avoided through a deeper understanding of a problem, which may reveal a polynomial time algorithm.

 

The question of whether P = NP is one of the greatest unsolved problems in theoretical computer science and contemporary mathematics.

 

If these classes were equal, any polynomially verifiable problem would also be polynomially decidable/solvable.

 

People have invested enormous effort to find polynomial time algorithms for certain problems in NP and have proven unsuccessful.

 

In order to prove that the two classes are in fact unequal, one would have to show that no fast algorithm exists to replace brute-force search. Doing so is currently beyond scientific research.