NP Problems

来源:http://www.matrix67.com/blog/archives/105

时间复杂度大致可以被分为两种级别,一种是O(1),O(logn),O(n^a) 等,我们把它叫做多项式级的复杂度;另一种是O(a^n)和O(n!)复杂度,它们是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,选择的算法通常都需要是多项式级的复杂度。
P问题:一个问题可以找到一个能在多项式的时间里解决它的算法。
eg. 最短路径问题,最小生成树问题...
NP问题:可以在多项式的时间里验证一个解的问题。
eg. 哈密顿路径,哈密顿回路...
哈密顿回路就是NP问题,这个问题现在还没有找到多项式级的算法,但是验证一条路是否经过了每一个顶点非常容易。
之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法,我们不会指望一个连多项式时间验证一个解都不行的问题存在一个解决它的多项式级的算法。

P=NP?

所有的P类问题都是NP问题,也就是说,能多项式地解决一个问题,必然能多项式的验证一个问题的解——既然正解都出来了,那么验证任意给定的解也只需比较一下就行了。
但是人们想知道是否所有的NP问题都是P类问题。通常所谓的NP问题,其实就是探讨P=NP?

NPC

约化:如果能找到一个变化法则,对任意一个程序A的输入,都能按照这个法则变换成程序B的输入,使两程序的输出结果相同,那么我们说问题A可以约化为问题B。问题A可以约化为问题B有一个重要的直观意义:B的时间复杂度高于或等于A的时间复杂度。约化具有一项重要的性质:约化具有传递性。
存在这样一个NP问题,所有的NP问题都可以约化为它。换句话说,只要解决了这个问题,那么所有的NP问题就都解决了。这种问题就是NPC问题,它不只一个,而是一类问题。NPC问题是最复杂的问题。
NPC问题的定义:首先它是一个NP问题;其次所有的NP问题都可以约化到它。
既然所有的NP问题都可以约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题就都能用这个算法解决了,NP也就等于P了。但是,目前NPC问题没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。
eg. 3SAT, 顶点覆盖,团,哈密顿回路...

NP-hard

NP-hard问题:所有的NP问题可以在多项式的时间规约到它。它满足NPC问题定义的第二条但是不一定满足第一条。NP-hard问题不一定是NP问题,NP-hard问题也同样难找到多项式级的算法。


NP Problems_第1张图片
image.png

来源:http://mathworld.wolfram.com/NP-Problem.html

A problem is assigned to the NP (nondeterministic polynomial time) class if it is solvable in polynomial time by a nondeterministic Turing machine.

图灵机

图灵机就是指一个抽象的计算机,它有一条无限长的纸带,纸带分成了一个一个的小方格。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。

确定性图灵机

每一步都唯一确定的图灵机。设M为一个图灵机,则只要给M一个输入,M便会以一种唯一确定的方式进行运行。即对M的同一输入,只有一种计算过程与之相应。

非确定性图灵机

在计算的每一时刻,根据当前状态和读写头所读的符号,机器存在多种状态转移方案,机器将任意地选择其中一种方案继续运作,直到最后停机为止。

你可能感兴趣的:(NP Problems)