P类问题
这类问题是最简单的一类问题,即所有这类问题都可以用一个确定性算法在多项式时间内求出解。此类问题的复杂度是此类问题的一个实例的规模n的多项式函数。比如排序问题,求最短路径问题等。
简单来说,P就是能在多项式时间内解决的问题
NP(Non-deterministic Polynomial,即多项式复杂程度的非确定性问题)问题
有些问题很难找到多项式时间的解法(也许根本就不存在),但是如果给出了该问题的一个解,我们可以在多项式时间内判断这个解是否正确,比如对于哈密尔顿回路问题,如果给出一个任意的回路,我们可以很容易的判断出该回路是否是哈密尔顿回路(看是不是所有顶点都在回路中)。
P类问题是NP问题的子集,原因是P类问题既然能在多项式时间内求解,也必然能在多项式时间在验证它的解,满足NP类问题的定义。
简单来说,NP就是能在多项式时间验证答案正确与否的问题
NP完全问题(NPC)
如果所有NP问题都能在多项式时间内转化为A,则称A为NPC问题。NPC问题被认为是NP问题中最不可能是P问题的。NPC的定义的是:
一个决定性问题C若是为NPC,则代表它对NP是完备的,这表示:
它是一个NP问题,且
其他属于NP的问题都可变换(reducible)成它。
NPC是NP的子集。
NPH问题
NPH问题不一定是NP问题,之所以称为NP hard问题,是因为它们起码也和NP问题中最难的问题一样难。
NPH的定义和NPC的区别就在于NPH问题不用像NPC那样必须是一个NP问题。