您的位置:首页 > 其它

NP,NP-hard,P,NP完全问题

2017-10-31 16:05 169 查看
总是看到“NP难”或者“NP=P”还有“多项式时间”,这些到底是什么鬼,??今天好好查了一下,按照我自己的理解总结在这里,说实话在这个问题上我感觉百度好像比维基讲得明白些,知乎解释得比百度更清楚……

下面的解释来源于知乎作者王宇,链接:

https://www.zhihu.com/question/27039635/answer/101730260

最简单的解释:

P:算起来很快的问题

NP:算起来不一定快,但对于任何答案我们都可以快速的验证这个答案是否正确

NP-hard:比所有的NP问题都难的问题

NP-complete:满足两点: 1. 是NP hard的问题 2. 是NP问题

接下来是比较严谨的定义:

问题:对于一个包含由0和1组成的字符串集合S,以某个01字符串x作为输入,要求某个图灵机判断x在不在S里面。这里的图灵机可以先想象成平时我们用的计算机,S也可以被看成我们要解决的问题。注意我们的问题非常简单,就是要判断某个字符串x是否在某个集合S里面。

下面是定义:

P:有一个图灵机在多项式时间内能够判断x是否在S里面

NP:有一个图灵机M,如果某个字符串x在S里面,那么存在一个验证字符串u(注意这个u是针对这个x的,而且长度必须是x长度的多项式关系),M以x和u作为输入,能够验证x真的是在S里面。

NP-hard:如果某个问题S是NP-hard,那么对于任意一个NP问题,我们都可以把这个NP问题在多项式时间之内转化为S,并且原问题的答案和转化后S的答案是相同的。也就是说只要我们解决了S,那么就解决了所有的NP问题。

NP-complete:一个问题既是NP-hard,又在NP里面;也就是说 1. 解决了这个问题我们就解决了所有NP问题 2. 这个问题本身也是个NP问题

下面是百度和谷歌的解释,补充了上面的答案

多项式时间:在计算复杂度理论中,指的是一个问题的计算时间m(n)不大于问题大小n的多项式倍数。任何抽象机器都拥有一
复杂度类
,此类包括可于此机器以多项式时间求解的问题。以数学描述的话,则可说m(n)= O(n^k),此k为一常数值(依问题而定)。

其中这个多项式倍数是指,对于一个变量n,有这样一个倍数,它的值是n的一个多项式。比方说,我们假设n=5,那么n^2+10=5^2+10=35,这个35就是n的一个多项式倍数。因为对于n有无限多种多项式组合,所以它也就有无穷多个多项式倍数。(参考于知乎沈万马的解释,链接: https://www.zhihu.com/question/24653072

P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。

其中判定问题的解释是:它表现为寻求一种能行的方法、一种机械的程序或者算法,从而能够对某类问题中的任何一个在有穷步骤内确定是否具有某一特定的性质。

NP类问题:所有的非确定性多项式时间 可解的判定问题构成NP类问题。

上面的非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?再比如你参加了一个盛大的晚会,由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,虽然不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。

NPC问题:如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题(Non-deterministic Polynomial complete problem)也叫NPC问题。

生成问题的一个解通常比验证一个给定的解时间花费要多得多。人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算验证,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: