非多项式级别/多项式级别
非多项式级别(运算慢,巨大):o(n!) o(
)
多项式级的复杂度(运算快,比较小):o(1) o(n) o(
) o(logn) o(nlogn)
P问题
该问题能够找到一个解决算法,时间复杂度是o(1) o(n) o(
) o(logn) o(nlogn) 多项式时间 的级别
NP问题
(找一个解很困难,但验证一个解很容易。)
我们可能没有一个已知的快速的解决问题的方法,
但是如果给我们一个候选的答案,我们能够在短时间内(多项式时间)验证这个答案到底是不是我们已知问题的正确答案,这类问题叫做NP problem。
所以很显然 P Problem是NP problem的一个子集。
NPC问题
约化
解决了B,A就能解决。 A能约化成B,B问题比A问题复杂一点。
求解 一元一次方程(5x = 10) -- > 求解二元一次方程 (5x + y = 11)
求解 简单电路 --> 求解复杂电路
求解 一年级数学 --> 求解 二年级数学
NPC的直观解释
存在这样一个NP问题,所有的NP问题都可以约化成它。
换句话说,只要解决了这个问题,那么所有的NP问题都解决了。 这个问题就是NPC问题
我们有理由相信,NPC问题是最复杂的问题。
人们想表达一个问题不存在多项式的高效算法时应该说它“属于NPC问题”。
NPC的定义
同时满足下面两个条件的问题就是NPC问题
- 它是一个NP问题
- 所有的NP问题都可以约化到它。
如何证明一个问题是NPC问题
- 先证明它至少是一个NP问题
- 再证明其中一个已知的NPC问题能约化到它(约化的传递性)
为什么人们坚信P≠NP
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P 了。因此,给NPC找一个多项式算法太不可思议了。“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。