P问题
定义:有确定的多项式时间解的问题
例子:已知n个物品的重量,计算重量和(O(n))
NP问题
定义:不确定是否有多项式时间的求解算法,但能经过多项式时间验证一个解的正确性的算法
例子:已知n个物品的重量,是否存在重量>a的组合
可以通过多项式时间步骤验证某一个解的正确性,譬如n1 = 1kg, n2 = 2kg, n4 = 3kg,a = 5,此时我们可以验证n1,n2,n4组合是否为问题的可行解
NPC问题
定义:所有的NP问题都能在多项式时间内约化为同一个NP(0)问题,这个NP(0)问题就是NPC问题
约化:A约化为B意为可以用解决B的方法解决A。例如当你会解二元一次方程,你一定会解一元一次方程。此时就可以说“求解一元一次方程”可以“约化为求解二元一次方程”
约化具有传递性,所以证明一个问题是NP问题,再证明一个已知的NPC(0)问题能够约化到此NP问题,即证明了此问题是NPC问题
- NPC(0):经过极其复杂的证明,人类已近找到一个最基础的NPC问题(逻辑门问题)。而证明逻辑门问题能够约化成为某个NP问题,又需要及其复杂的证明,所以此处我们不加入具体例子。
NPH问题
定义:所有NP问题都能在多项式时间内约化成此问题,但此问题本身可能并不是NP问题
“并不是NP问题”:不能经过多项式时间求解
- 例子:已知n个物品的重量,是否不存在重量大>a的组合
• (我们不能通过多项式时间验证某一个解的正确性,此问题就不是NP问题)
“所有NP问题可约化为此问题”
- 上述例子和NP问题的例子非常的相似,我们可以粗略的理解到“NP问题约化成为一个不是NP问题的问题”这种可能性的确存在,即“A问题是NPH问题但不是NPC问题可能存在”