首页 > 代码库 > 简单理解 NP, P, NP-complete和NP-Hard

简单理解 NP, P, NP-complete和NP-Hard

P是一类可以通过确定性图灵机(以下简称 图灵机)在多项式时间(Polynomial time)内解决的问题集合。
NP是一类可以通过非确定性图灵机( Non-deterministic Turing Machine)在多项式时间(Polynomial time)内解决的决策问题集合。
PNP的子集,也就是说任何可以被图灵机在多项式时间内解决的问题都可以被非确定性的图灵机解决。
 
接下来说说NP 里最难得问题 NP-complete
其定义如下,
如果一个决策问题 L 是 NP-complete的,那么L具备以下两个性质:
1) L  是 NP(给定一个解决NP-complete的方案(solution,感兴趣的读者可以思考一下solution 和 answer的区别),可以很快验证是否可行,但不存在已知高效的方案 。)
2) NP里的任何问题可以在多项式时间内转为 L。
 
NP-Hard只需要具备NP-complete的第二个性质,因此NP-completeNP-Hard的子集。
这四者的关系如下图(假设P!=NP):
技术分享
 

简单理解 NP, P, NP-complete和NP-Hard