美文网首页
NP完全问题求知

NP完全问题求知

作者: 技术与健康 | 来源:发表于2018-04-01 17:15 被阅读902次

    在一本关于数据结构的书末尾提到了NP完全问题,毫无概念。因此做一番搜索和整理,便于反复阅读和理解。

    百度百科的摘录

    NP完全问题(NP-C问题),是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。

    详细信息

    P类问题:所有可以在多项式时间内求解的判定问题构成P类问题。**判定问题****:判断是否有一种能够解决某一类问题的能行算法的研究课题。

    NP类问题:所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。设算法A是解一个判定问题Q的非确定性算法,如果A的验证阶段能在多项式时间内完成,则称A是一个多项式时间非确定性算法。有些计算问题是确定性的,例如加减乘除,只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式能推出下一个质数是多少呢?这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式(polynomial)时间内算出来,就叫做多项式非确定性问题。

    NPC问题NP中的某些问题的复杂性与整个类的复杂性相关联.这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的.这些问题被称为NP-完全问题(NPC问题)。

    举例叙述

    在一个周六的晚上,你参加了一个盛大的晚会。由于感到局促不安,你想知道这一大厅中是否有你已经认识的人。你的主人向你提议说,你一定认识那位正在甜点盘附近角落的女士罗丝。不费一秒钟,你就能向那里扫视,并且发现你的主人是正确的。然而,如果没有这样的暗示,你就必须环顾整个大厅,一个个地审视每一个人,看是否有你认识的人。

    生成问题的一个解通常比验证一个给定的解时间花费要多得多。这是这种一般现象的一个例子。与此类似的是,如果某人告诉你,数13,717,421可以写成两个较小的数的乘积,你可能不知道是否应该相信他,但是如果他告诉你他可以因式分解为3607乘上3803,那么你就可以用一个袖珍计算器容易验证这是对的。人们发现,所有的完全多项式非确定性问题,都可以转换为一类叫做满足性问题的逻辑运算问题。既然这类问题的所有可能答案,都可以在多项式时间内计算,人们于是就猜想,是否这类问题,存在一个确定性算法,可以在多项式时间内,直接算出或是搜寻出正确的答案呢?这就是著名的NP=P?的猜想。 不管我们编写程序是否灵巧,判定一个答案是可以很快利用内部知识来验证,还是没有这样的提示而需要花费大量时间来求解,被看作逻辑和计算机科学中最突出的问题之一。它是斯蒂文·考克于1971年陈述的。

    看到概念中有一个 多项式复杂度,会影响对NP问题的理解。在知乎上找到一篇 知乎老抽 Club的解释。

    首先知道多项式吗?也就是对于变量n,5n2+2n+1这种就叫做多项式。前面再加上n3甚至一路增加到nm,只要m是个常量,就都是多项式。因为这样的式子合并同类项什么的简化到最后还是会有好几个含n的项,所以叫做多项式。然后再说问题大小n。其实字面理解就对了…也就是说,我们要解决一个问题,这个问题里面有n个“东西”要处理,这个问题的大小就是n。比方说,我们要把5、7、9这三个数字排序,问题大小就是3。我们要把全世界人类里面的男的找出来,问题大小就是全世界人口数。然后是多项式倍数。这个倍数是指,对于一个变量n,有这样一个倍数,它的值是n的一个多项式。比方说,我们假设n=5,那么n2+10=52+10=35,这个35就是n的一个多项式倍数。因为对于n有无限多种多项式组合,所以它也就有无穷多个多项式倍数。多项式倍数之所以特殊,主要是由于其值随n增大而加速增大的特性。如果是常数时间的话,意思就是无论n是什么值运算所花时间都一样。线性时间则是说多大n就花多少时间。多项式时间则意味着随着n增大,n每增加1所花的时间增长越来越多。对于n2-3这样一个多项式时间来说,n=2的时候可能只要花1的时间,甚至低于线性时间,但n=4的时候可能就要花13的时间了,可以想象再大一些这个数值会变得巨大。但是它又不及指数时间增长快(mn),且mn不能写成多项式形式,所以它又和多项式时间有区别。而且,这个增长变速的特性是不受参数限制的。也就是说,无论你把m*n^2的m这个常量改成多么微小的一个值,总有一个n让这个多项式的值大于n,也就是说到这一刻多项式时间的算法耗时高于了线性时间的算法,之后耗时差距一定会越来越大。这一特性是多项式本身的性质决定的。类似,指数级时间也是如此,无论你将n的一个多项式中的所有常量设置到多大,总有一个n的指数值大于多项式值。所以我们说指数时间大于多项式时间,我们说多项式时间大于线性时间,我们还说线性时间大于常数时间,一定要注意这些大于并不是对于所有n的所有情况成立的,只是在说随着n增加前者一定超过后者。希望有帮助。

    至此对NP完全问题,能有一知半解。后续在深入学习实践

    相关文章

      网友评论

          本文标题:NP完全问题求知

          本文链接:https://www.haomeiwen.com/subject/whkacftx.html