热点 数学

P vs. NP:从一则数学家谋杀案说起

严酷的魔王 发表于  2013-12-04 11:47

美剧《基本演绎法》(也就是美版“福尔摩斯”)第 2 季第 2 集中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明“P=NP 问题”,她为独吞成果而下了毒手。然而凶手的动机,并不是千禧年大奖难题那100万美元的奖金——解决了 P=NP 问题,就能够破译世界上所有的密码系统,这里面的利益比100万美元多多了。

剧中只用了一句话来介绍 P=NP 的意义:“能用电脑快速验证一个解的问题,也能够用电脑快速地求出解”。这句过于简单的话可能让大家一头雾水,今天我们就来讲一讲 P vs. NP。

什么是P和NP?

《基本演绎法》S02E02 截图。

计算机科学的一个主要研究方向是提高各种算法的速度。尤其在当前火热的“大数据”概念下,算法速度更显重要。很容易理解,处理的数据越大,计算的耗时就越多。对于一个算法,人们能够分析出运算时间与数据量之间的大致函数关系,这个关系被称为时间复杂度,它定量描述了该算法的运行时间。

假设有 n 个数要排序。一个初级的冒泡排序算法所需时间可能与 n2 成正比,快一点的算法所需时间与 nlog(n) 成正比。在某些条件下,桶排序算法所需时间甚至只和 n 成正比。最不实用的算法就是输入的数字随机排列,直到出现完全有序的情况为止……记前三个算法的时间复杂度分别记为 O(n2)、O(nlogn) 和 O(n),最后的“猴子排序”(Bogosort)算法平均时间复杂度则达到了 O(n*n!)。

在上面的例子中,前三种算法的复杂度是 n 的多项式函数;最后一种算法的复杂度是 n 的阶乘,根据斯特林公式,n! 相当于指数级别的增长。当 n 特别小时,多项式级的算法已经快过指数级的算法。当 n 非常大时,人类根本看不到指数级复杂度算法结束的那天。自然的,大家会对多项式级别的算法抱有好感,希望对每一个问题都能找到多项式级别的算法。问题是——每个问题都能找到想要的多项式级别的算法吗?

在一个由问题构成的集合中,如果每个问题都存在多项式级复杂度的算法,这个集合就是 P 类问题(Polynomial)。这意味着,即使面对大规模数据,人们也能相对容易地得到一个解,比如将一组数排序。

“NP”的全称为“Nondeterministic Polynomial”,而不是“Non-Polynomial”。NP 类问题指的是,能在多项式时间内检验一个解是否正确的问题。比如我的机器上存有一个密码文件,于是就能在多项式时间内验证另一个字符串文件是否等于这个密码,所以“破译密码”是一个 NP 类问题。NP 类问题也等价为能在多项式时间内猜出一个解的问题。这里的“猜”指的是如果有解,那每次都能在很多种可能的选择中运气极佳地选择正确的一步。

不妨举个例子:给出 n 个城市和两两之间的距离,求找到一个行走方案,使得到达每个城市一次的总路程最短。我们可以这样来“猜测”它的解:先求一个总路程不超过 100 的方案,假设我们可以依靠极好的运气“猜出”一个行走路线,使得总长度确实不超过 100,那么我们只需要每次猜一条路一共猜 n 次。接下来我们再找总长度不超过 50 的方案,找不到就将阈值提高到75…… 假设最后找到了总长度为 90 的方案,而找不到总长度小于 90 的方案。我们最终便在多项式时间内“猜”到了这个旅行商问题的解是一个长度为 90 的路线。它是一个 NP 类的问题。

也就是说,NP 问题能在多项式时间内“解决”,只不过需要好运气。显然,P 类问题肯定属于 NP 类问题。所谓“P=NP”,就是问——是不是所有的 NP 问题,都能找到多项式时间的确定性算法?

P会不会等于NP?

《基本演绎法》S02E02 截图。

这个问题目前还没有定论,当下学术界的大多数意见是 P≠NP。一个主要原因是,这么多年过去了,人们仍然没有找到解决上千个 NPC 问题中任何一个的多项式复杂度的算法。等等,NPC 又是什么?

在与数不尽的问题搏斗的过程中,人们有时候会发现,解决问题 A 的算法可以同时用来解决问题 B。例如问题 A 是对学生的姓名与所属班级同时排序,问题 B 是对人们按照姓名做排序。这时候,我们只需要让班级全都相同,便能照搬问题 A 的算法来解决问题 B。这种情况下,数学家就说,问题 B 能归约为问题 A。

人们发现,不同的 NP 问题之间也会出现可归约的关系,甚至存在这么一类(不只是一个)问题,使得任何其它的 NP 问题都能归约到它们上。也就是说,能够解决它们的算法就能够解决所有其它的 NP 问题。这一类问题就是 NPC 问题。这样的问题人们已经找到了几千个,如果我们给其中任何一个找到了多项式级别的算法,就相当于证明了 P=NP。但是人们至今没有成功找到,所以大家对 P=NP 的信心大打折扣。

解密无遮拦?

《基本演绎法》S02E02 截图。

虽然前景很不乐观,但是不妨来假想一下,如果 P=NP,《基本演绎法》中所说的“破解密码只是小菜一碟”就会成真了吗?

前面说过,证明 P=NP 的一个主要方法就是,给某一个 NPC 问题找到一个快速算法。但是,也不排除有人给出一个“存在性”而非“构造性”的证明,只是告诉大家存在符合要求的算法,但没法详细描述出来。如果 P=NP 被人以这种方式证明出来了,我们也没法依葫芦画瓢地把这个神奇的算法在电脑上写出来,所以对破解密码仍然没有帮助。

退一步说,假如有人构造出可以运用的多项式算法,以此证明了这个问题。这个算法恐怕也很复杂(毕竟这么难找),它的多项式级别的复杂度也可能会非常慢。假设这个算法的复杂度达到了 O(n10),那我们依然面临着不小的麻烦。即使 n=100,运算时间也会增长到非常巨大的地步。

再退一步,假设人类的运气好到 P=NP 是真的,并且找到了复杂度不超过 O(n3) 的算法。如果到了这一步,我们就会有一个算法,能够很快算出某个帐号的密码。《基本演绎法》里面所想象的可能就要成真了,所有的加密系统都会失去效果——应该说,所有会把密码变成数字信息的系统都会失去效果,因为这个数字串很容易被“金钥匙”计算出来。

除此之外,我们需要担心或期许的事情还有很多:

  • 一大批耳熟能详的游戏,如扫雷、俄罗斯方块、超级玛丽等,人们将为它们编写出高效的AI,使得电脑玩游戏的水平无人能及。
  • 整数规划、旅行商问题等许多运筹学中的难题会被高效地解决,这个方向的研究将提升到前所未有的高度。
  • 蛋白质的折叠问题也是一个 NPC 问题,新的算法无疑是生物与医学界的一个福音。

Wikipedia上有一个关于NPC问题的列表。如果我们手握解决NPC问题的金钥匙,它们全都能被飞快地解决。

除此之外,P=NP 最令人震撼的成果之一可能是下面这段话:

……(P=NP)会将数学转变为让计算机对任何问题寻找拥有合理长度的证明的学科,因为我们能够在多项式时间内验证一个证明是否正确。这些问题也正好包括千禧年大奖的那些问题。

它出自 NP 完全理论奠基人史提芬·古克的笔下。上面这些只言片语的描述,已经展现出了 P=NP情况下,世界将会出现怎样一副天翻地覆的变化。也正是因为这样的结果实在难以置信,人们普遍倾向于相信 P≠NP。我也希望 P≠NP ,这样至少我的网银相对来说还是挺安全的。

 

参考文献

  1. P vs. NP on Elementary
  2. 什么是P问题、NP问题和NPC问题
  3. A personal view of average-case complexity
  4. P versus NP problem

相关的果壳网小组

全部评论(50)
  • 31楼
    2013-12-12 09:42 穿鞋跑得快

    我擦,表示看不懂,过来打个酱油

    [0] 评论
  • 32楼
    2013-12-16 02:53 Xmod

    简单来说,NP can be solved in undeterministic Turing machine in polynomial time. But there is no way to make Turing machine undeterministic as you can't engineer luck.

    [0] 评论
  • 33楼
    2013-12-16 13:40 已注销用户

    H D
    P NP

    [0] 评论
  • 34楼
    2013-12-16 15:05 JoyeeCheung


    Jeff Dean巨巨在google面试的时候给P=NP的含义给过一个很碉堡的解释:N=1或P=0。
    ——然后在面试官笑完之前他看了眼google的公共证书然后把私钥写在了白板上……_(:з」∠)_

    [0] 评论
  • 35楼
    2013-12-18 19:02 athanos

    还是没怎么看懂

    来自果壳网移动版
    [0] 评论
  • 36楼
    2013-12-19 14:58 鱼骨全集

    上课讲就没听懂,现在还是似懂非懂。。。。。

    来自果壳网移动版
    [0] 评论
  • 37楼
    2013-12-20 20:04 方程 应用数学专业
    引用文章内容:根据斯特林公式,n! 相当于指数级别的增长。

    斯特林公式:

    不应该是相当于幂指型么?

    [0] 评论
  • 38楼
    2013-12-28 11:10 RDGE

    这问题的解决的影响力不亚于原子弹的发明啊,特别是如果证明成立的话影响是巨大的,估计军方都会要先控制了。不过我总觉得电影中有点想当然了,一位数学家如果解决了这个问题的话,肯定会告诉自己的亲朋好友,也会告知数学圈里面的朋友,很难掩盖消息的。除非他极其孤僻,总是一个人生活。

    [0] 评论
  • 39楼
    2013-12-29 12:37 星光伴我行

    假设,死的说成活的,假的说成真。

    [0] 评论
  • 40楼
    2014-01-03 16:05 梦里贤言

    看完全文,没懂。

    [0] 评论
  • 41楼
    2014-01-07 17:19 寥若丫头
    引用@uncrea 的话:看完突然想到,如果一个问题真的解真的会立即带来如此之大的社会改变,假使有人真的得到解他还会公布吗?
    我估计他没有机会公布~哈哈哈!
    [0] 评论
  • 42楼
    2014-02-01 15:06 Hidencracker

    留名

    [0] 评论
  • 43楼
    2014-08-24 21:26 枯木野狐

    有点意思

    [0] 评论
  • 44楼
    2014-10-19 17:52 刀尖红叶

    科普好文!

    [0] 评论
  • 45楼
    2014-12-06 17:52 巴拉娜

    感觉这文配图中间的三角会杀死很多强迫症啊

    [0] 评论
  • 46楼
    2015-07-12 11:36 喬海軍

    希望有生之年可以等到最终个结论

    [0] 评论
  • 47楼
    2015-10-11 08:52 葛立恒数

    高德纳倾向于认为P=NP,但是他同时认为多项式的指数n可能会很大,甚至可能是10^^^^3这样的数字(参见高德纳箭头表示法),这是一个大到无法用科学计数法表示的数字。甚至人们永远不会找到n的下限。

    [0] 评论
  • 48楼
    2015-10-11 09:12 葛立恒数
    引用@冰火梦幻 的话:Nondeterministic Polynomial怎么看这个都是说”不能在多项式时间验证“……

    这是非决定性图灵机在多项式时间能解决的问题。

    [0] 评论
  • 49楼
    2016-02-13 14:35 kxzybread

    看到题目立马想起了《嫌疑人X的献身》。。。

    [0] 评论
  • 50楼
    2016-05-08 03:22 DecisionTree

    其实除了P=NP之外还有一堆这样的问题:

    NC = P problem
    NP = co-NP problem
    P = BPP problem
    P = PSPACE problem
    L = NL problem
    L = P problem
    L = RL problem

    等等。。研究不完的~

    [0] 评论

显示所有评论

你的评论

登录 发表评论

严酷的魔王
严酷的魔王 统计学专业本科生,数学控

作者的其他文章

更多科研事,扫码早知道

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2015] 0609-239号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区