NP = Non-deterministic Polynomial time.
It is the set of all decision problems for which the answer 'yes' have verifiable proofs to prove that the answer is indeed 'yes'.
Non-deterministic = different behaviours on different algorithm run. E.g. Merge sort
Polynomial time = algo has an upper-bound run-time by a polynomical expression in the size of its inputs. E.g. O(n log n)
P: Solvable in deterministic Turing machine in polynomial time
NP: Solvable in non-deterministic Turing machine in polynomial time