N、NP、NPC问题分析总结

目录

  • 一、时间复杂度
    • 1、定义
    • 2、多项式级别的复杂度
    • 3、非多项式级别的复杂度
    • 4、并非所有的问题都能够找到多项式级别时间复杂度的解法
  • 二、P、NP、NPC问题
    • 1、P问题
    • 2、NP问题
    • 3、一类特殊的NP问题
    • 4、约化(Reducibility)
    • 5、NPC问题
    • 6、NPC问题的定义
    • 7、证明一个问题是NPC问题
    • 8、NP-Hard问题。
    • 9、P、NP、NPC、NP-Hard问题关系

一、时间复杂度

1、定义

时间复杂度并不是一个程序运行完成需要的时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。

2、多项式级别的复杂度

n出现在底数的位置(n表示数据的规模)。如:O(1)、O(log(n))、O(n^a)

3、非多项式级别的复杂度

O(a^n)、O(n!)

4、并非所有的问题都能够找到多项式级别时间复杂度的解法

如:The Halting Problem图灵停机问题,甚至不会有解。
输出1到n这n个数的全排列,至少是阶乘级。
Hamilton回路:给定一个图,是否能找到一条经过每个顶点一次且恰好一次(不重复也不遗漏)最后又走回来的路。(NPC问题)

二、P、NP、NPC问题

1、P问题

P——polynomial多项式
如果一个问题可以找到一个能在多项式时间内解决它的算法,那么这个问题属于P问题。

2、NP问题

可以在多项式的时间内验证一个解的问题。
NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
NP问题并不是非P类问题,因为有很多问题无法在多项式时间内验证,如:证明一个图中不存在Hamilton回路。
之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不可能指望一个问题连多项式地验证一个解都不行,却存在一个解决他的多项式级的算法。
信息学中号称最困难的问题——“NP问题”,实际上是在探讨NP问题与P类问题的关系。
显然,所有的P类问题都是NP问题(能多项式的解决一个问题,必能多项式的证明一个问题),即P属于NP。现在的NP问题,即研究是否所有的NP问题都是P类问题,是否有P=NP,证明或推翻P=NP?

3、一类特殊的NP问题

.目前人们普遍认为P=NP不成立,即,存在至少一个不可能有多项式级复杂度的算法的NP问题。原因是在研究NP问题的过程中找到了一类特殊的NP问题叫做NP-完全问题,即NPC问题。

4、约化(Reducibility)

问题A可以“变成”问题B来求解。如:一元一次方程可以约化为一元二次方程,通过二次项系数置0. Hamilton回路可以约化为TSP问题(Travelling Salesman Problem, 旅行商问题)
“问题A可约化为问题B”——> B的时间复杂度高于或者等于A的时间复杂度。
约化具有传递性。
我们说的“可约化”是指的可“多项式地”约化(Polynomial-time Reduible),即变换输入的方法是能在多项式的时间里完成的。

5、NPC问题

一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增加了。
通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但是应用范围更广的算法来替代复杂度虽然低但是适用范围很小的一类问题的算法。
类似,我们也可以找到一个“超级”NP问题,使得所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种“超级”NP问题存在多个,是一类问题,交过NP-完全问题,即NPC问题。

6、NPC问题的定义

(1)它是一个NP问题,(2)所有NP问题都可以约化到它。
既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P了。因此给NPC找一个多项式算法太不可思议了。所以前面才说,“正是NPC问题的存在,使人们相信P不等于NP”。所以,普遍认为,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

7、证明一个问题是NPC问题

先证明它是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足,第一个NPC问题来源,下文将介绍),这样就可以说它是NPC问题了。
第一个NPC问题可设定为逻辑电路问题:给定一个逻辑电路,问是否存在一种输入使输出为True。
逻辑电路问题属于NPC问题,这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它。证明过程很复杂,大意是任意一个NP问题的输入和输出都可以转换为逻辑电路的输入和输出。因此对于一个NP问题,转化成了为求出满足结果为True的一个输入(即可行解)。

8、NP-Hard问题。

NP-Hard问题满足NPC问题定义的第二条但不一定要满足第一条。也就是说,NP-Hard问题不一定是NP问题,它的范围比NPC问题要广。
NP-Hard问题同样难以找到多项式的算法,但不在我们的研究范围内,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。

9、P、NP、NPC、NP-Hard问题关系

如下图所示:
N、NP、NPC问题分析总结_第1张图片
参考资料

你可能感兴趣的:(算法,算法)