作者:Lance Fortnow
译者:杨帆
读者:锅巴GG

在这本书里,我们将探讨许多计算问题,其中一部分可能永远都无法用简单的计算得到答案。试着解答它们是计算机科学,乃至整个数学和科学领域最重要的挑战。人们给这些问题起了一个有些奇怪的名字:P/NP问题。

P/NP是克雷数学研究所公布的7个千禧年数学难题之一,该研究所为求解这道难题设立了百万美元的奖金。不过,P/NP问题的意义远不止于此。

P指的是用计算机能很快求解的问题,NP指的是我们想找到最优解的问题。如果P=NP,那么我们将很容易找到任意给定问题的解。P=NP意味着我们所了解的社会将发生巨变,医学、科学、娱乐和人类社会一切任务的自动化程度都将立即发生质的飞跃。

相反,如果P≠NP,那么总会有部分问题无法迅速地被解决。那也没有关系,因为我们可以根据具体情况研发出某些技术来解决这些问题。P≠NP意味着不可能用自动化的方法解决所有问题。然而,知道哪些工具不好用也有助于人们找到更好用的工具。

“如果那帮物理学家可以写关于弦理论的畅销文章(和图书),那我们也可以向公众解释计算复杂度理论目前的进展,我希望如此。”于是我写了一篇文章,该文章以《ACM通讯》的读者为主要受众,不仅介绍了P/NP问题的现状(基本可以概括为“悬而未决”),也讲了一些人们在处理困难问题时积累的技巧。“P/NP问题的现状”(The Status of the P versus NP Problem)发表在2009年9月的《ACM通讯》上,它很快就成为该刊物创刊以来下载次数最多的文章。

本书没有给出P/NP问题的正式定义,有很多教科书和网站都详细论述了P和NP的定义及技术结论。本书旨在让你对计算科学的潜能和局限性有更多的了解,这非常有好处,毕竟计算机如今已成为人类生活不可或缺的部分了。


第1章 金券

故事1

一个糖果厂老板决定推出一个活动,将五张金券藏到巧克力的包装里,而这种巧克力每年的产量数以千万计。找到金券的人将得到一次珍贵的参观工厂的机会。
如何找到这些金券?你可以买尽可能多的巧克力。你可能会试试用磁铁,可惜金没有磁性。或者你可以雇用数千人,让他们每人筛查一小堆巧克力。这听起来很傻,但是小姑娘维露卡·索尔特就要这么做,因为她特别想得到一张金券,去参观威利·旺卡的巧克力工厂。
维露卡的父亲索尔特先生是个富商,他决定买光他能找到的巧克力。这还不够,就算有堆积如山的巧克力,要从中找到小小的金券也很困难。索尔特先生也有一家工厂,他不惜动用工厂的工人,终于找到了一张金券。和索尔特先生一样,无论你打算怎么找那张金券,你都需要大量时间、金钱,或者运气。也许有一天,有人能发明出一个快速找到金券的便宜装置,也许这样的装置并不存在。

然而,1000万对于今天的计算机来说只是很小的数字。如果你把糖果数字化,录入一个数据库,现在的电脑只用不到一秒就能把它找一遍。虽然计算机比人快得多,但它面对的问题的规模也比在糖果里找金券大得多。

故事2

认识一下可怜的旅行推销员Mary,她来自华盛顿特区,为美国木槌集团公司工作。她需要从家乡旅行到48个州的首府,向各州法院推销木槌。木槌公司为了削减成本,让Mary找到通过所有城市的最短路径。Mary画了一张图,写写画画了一会儿,制订了一个不错的路线。

旅行推销员问题的地图

差旅部门的人想让Mary试试能否找到另一条路线,把路程缩短到11 000英里以下。Mary写了个计算机程序,试图穷举所有可能的路线,找出最短的一条,但是一周以后,程序还没跑完。Mary坐下来开始算数。作为第一站的城市有48种选择,然后从剩下的47个城市中选一个作为第二站,再从剩下的46个城市中选一个,以此类推。可能的路径共有48×47×46×…×2×1种,也就是下面这个62位数:
12 413 915 592 536 072 670 862 289 047 373 375 038 521 486 354 677 760 000 000 000

即使计算机计算一条路线的时间等于光通过最小的原子直径的时间(大约0.000 000 000 000 000 000 33秒),仍然需要十亿亿亿倍于宇宙年龄的时间才能算完。难怪Mary的电脑算了一周还没有完。Mary想知道有没有比穷举更好的方法找到最佳路线,就像在所有可能行程的“巧克力山”里面刨出那张小小的金券。

这就是本书最基本的问题:P/NP问题。其中的一个实例就是能否为旅行推销员找到最短路径。P和NP自有其十分专业的定义,但是把它们看做概念比看做数学对象更好。NP是存在解的问题的集合,P则是能很快找到解的问题的集合。P=NP意味着我们能总是很快地计算出任何问题的解,当然也包括找到旅行推销员的最短路径。相反,P≠NP意味着我们不能。

划分的难题

看下边38个数字:
14 175, 15 055, 16 616, 17 495, 18 072, 19 390, 19 731, 22 161, 23 320, 23 717, 26 343, 28 725, 29 127, 32 257, 40 020, 41 867, 43 155, 46 298, 56 734, 57 176, 58 306, 61 848, 65 825, 66 042, 68 634, 69 189, 72 936, 74 287, 74 537, 81 942, 82 027, 82 623, 82 802, 82 988, 90 467, 97 042, 97 507, 99 564
这38个数字之和为2 000 000。你能把它们平分成两组,每组19个数字之和分别为1 000 000吗?你可以使用计算器、电子表格或写一个计算机程序。(答案在本章最后。)
不那么简单,是吧?把这些数分成两组有170亿种方式。如果程序编得巧妙,使用当今较快的计算机能够找到一个解。

这只是个无意义的数学谜题吗?就算存在一个厉害的计算机程序,它能解决这个平分数组的问题(假设有解),那又如何呢?如果是这样的话,我们能用这个程序做更多的事。这个程序能解决所有的问题,包括旅行推销员问题。这个简短的难题抓住了P/NP问题的本质:一个程序如果能解决这个难题的复杂版本,那么它也能解出任意问题。

你的手是最不可思议的工程装置,它能戳、抓和指,能系鞋带,能射箭,还能弹钢琴、拉小提琴,能变戏法,能驾驶车、船、火车或飞机。你的手可以握住其他人的手,或跟他们玩拇指相扑。手可以比划出信号语言,也能通过写字或打字来交流。手可以轻抚,也能重击。手可以使用修理钟表的精密工具,也能操作链条锯。有才华的人的双手可以创造艺术杰作,写出音乐或诗歌。人类取得的几乎所有成就,都离不开双手。

一只手有27块骨头,5根手指,包括最重要的拇指。手具有结构复杂的神经、肌腱和肌肉,这些都包裹在富有弹性的皮肤里。然而,这一不可思议的装置,自然造物的杰作,却不能自己做事,而只能执行人脑的指令。死人的手平平无奇,做不了任何事情。

手就是自然的硬件,硬件本身不能做什么。手需要软件(也就是大脑指令)来控制,软件告诉它如何执行和实现大脑希望它做的事情。

P/NP问题的魅力就在这里。究竟能否让所有的事都变得易如反掌?还是说,有些事情注定就没有简单的解决方法?不能排除这种可能性。无论如何,我们并不指望生活会那么简单。尽管我们并不认为P=NP,但这么美好的世界却让我们忍不住充满憧憬。

P/NP问题

P/NP问题讨论的是以上所述的所有问题,以及许多与之类似的问题。它们归根到底都是在问:我们搜索大量可能性的速度能有多快?我们找到“金券”(即最佳答案)的过程能变得多容易?

P/NP问题是库尔特·哥德尔在1956年寄给约翰·冯·诺依曼的一封信中首次提出的,哥德尔和冯·诺依曼都是20世纪数学界的泰斗。这封信后来不幸遗失,20世纪80年代又被找到。P/NP问题在学术界的亮相是在20世纪70年代初,由斯蒂芬·库克和列昂尼德·莱文独立提出,当时两位所在的国家正在冷战。之后理查德·卡普列出了这个领域中的21个重要难题,包括前面提到的旅行推销员难题和划分难题。计算机科学家从卡普的工作开始认识到P/NP问题极为重要,由此计算机科学研究的方向发生了戏剧性的转变。如今,P/NP问题的关键性作用已经不仅限于计算机科学领域,还延伸到其他许多领域,如生物学、医学、经济学和物理学。

P/NP问题已成为所有数学领域最难的开放问题之一。1994年安德鲁·怀尔斯证明了费马大定理,受这一消息的鼓舞,克雷数学研究所决定举办竞赛,攻克他们认为最为重要而尚未解决的数学难题。2000年,他们列出了下面这7个千禧年难题,并为每道难题的攻破设立了100万美元的奖金。

  1. 贝赫和斯维讷通-戴尔猜想(Birch and Swinnerton-Dyer conjecture)
  2. 霍奇猜想(Hodge conjecture)
  3. 纳维-斯托克斯方程(Navier-Stokes equations)
  4. P/NP问题(P versus NP)
  5. 庞加莱猜想(Poincaré conjecture)
  6. 黎曼猜想(Riemann hypothesis)
  7. 杨-米尔斯理论(Yang-Mills theory)

千禧年难题中的庞加莱猜想已于2003年被格里高利·佩雷尔曼解决,但他拒绝了100万美元的奖金。截至本书写作时其他6个难题都尚未解决。

找到金券

旅行时间有一个有趣的性质。随便选一个中间地点(比如匹兹堡),从芝加哥经过匹兹堡到纽约的最短路线,一定是芝加哥到匹兹堡的最短路线,再接上匹兹堡到纽约的最短路线。不走匹兹堡可能有更快的路线,但是芝加哥到纽约的最短路线,绝不会比从芝加哥经过匹兹堡到纽约的最短路线还要长。

GPS的计算机程序正是利用了这个性质,快速缩小搜索范围并找到了最佳路线。这可能仍需要检查上亿条路线,但是GPS的计算机处理器完全能胜任,毕竟这个数字比“不可思议”小多了。

找到最短路径并没有体现P/NP问题的全部力量。最短路径问题告诉我们,全部的可能性数量特别大,但这并不总意味着必须遍历所有的可能性才能找到答案。P/NP问题其实是问,是不是对于任意给定的搜索问题,我们都不必遍历所有的可能性就能找到答案?

漫漫长途

本书讲的是P和NP的故事。什么是P和NP?P/NP描述的是哪类问题?所有搜索问题中最难的问题——“NP完全问题”是怎么回事?这些问题如何影响P/NP问题?

如果P=NP会怎么样?那么我们将迎来一个美好的世界,计算所有的事物都将易如反掌。我们能快速地了解一切,揭开世界上所有事物的神秘面纱,从治愈绝症到洞悉宇宙的本质。美好的世界也有它灰暗的一面,人们将丧失隐私、丢掉工作,因为没有什么是计算机不能知道或完成的。

P和NP问题是如何产生的?这个故事发生在世界因冷战被割裂的那段日子,其实可以把它分成两个故事来讲。有关高性能计算的思路和问题分别在两个世界独立发展,而这两个世界的研究最终殊途同归,从而产生了P/NP问题。

从哪里着手证明P≠NP?库尔特·哥德尔证明数学不能解决所有的问题。能否用类似的方法,证明存在不能快速解决的搜索问题?为了分析问题的复杂度,我们可以把计算过程分解为最基本的单元。算术几何学(数学的一个抽象分支),为人们能在有朝一日解决这个重要的问题带来了新的希望。但我们距离那一天还很远。

P≠NP会带来什么好处呢?它能帮助我们保守秘密,产生看上去真随机的伪随机数。
未来基于量子力学的计算机能否让P/NP问题变得无足轻重?不太可能,不过量子计算机的建成将解决一部分现在计算机束手无策的问题,比如大数的因数分解。此外,量子力学也会透露P是否等于NP的玄机。
未来将会如何呢?我们仍将面临计算领域的巨大挑战。人们如何与互相协作处理问题的计算机打交道?如何分析每天产生的海量数据?所有事物都能联网,世界将会怎样?要解决这些问题,P/NP问题只会变得更为关键。


第2章 美妙的世界

假设有人请你写一篇关于过去20年互联网带来的社会变革的论文。你是写装在口袋里的设备让人们能够随时访问所有公开的信息,还是会探讨发生在音乐、电影、出版和新闻产业的巨大变化?无论怎么写,短短一篇论文都很难公允地描述过去20年发生的变化。好了,再想象一下:如果是让你在这些变化尚未发生的20世纪90年代写这篇论文,你又会对未来做出怎样的预测?
如果P=NP被证实,即我们掌握了一种对所有NP问题都有效的快速算法,那么社会将发生更加巨大的变化,互联网看起来只是历史的一个补充说明。不光不可能描述全部的变化,甚至不太可能预测新技术带来的深远影响。
为了能让读者对那个美妙的世界有些许认知,现在让我们来想象一下发现解决NP问题的有效算法几年之后会发生什么。让我们一起跳到2026年,去看看一个P=NP被证实的世界——当然,这个世界是科幻的。首先,咱们来看看这个世界是怎么打造出来的。

建议阅读,这个科幻世界,带了很多启发——锅巴GG

“天网是啥?”
“当计算机变得足够聪明,有了自我意识,它就会接管世界,就像《终结者》系列电影里的超级计算机‘天网’一样。”


第3章 P和NP

敌友国

为了更好地了解P和NP,让我们访问一个假想中的国度——敌友国。在那里,任意两个人之间的关系不是朋友,便是敌人。

敌友国住着2万居民。单看每个人都很正常,但是把两个人放在一起就会发生奇怪的事情。他们见到对方的第一眼,要么立刻变成最好的朋友,要么马上变成最坏的敌人。

虽然叫敌友国,但从没看到过两个人的关系会有中间立场,而是非敌即友。

看上去敌友关系几乎是随机建立的。朋友的朋友不一定是朋友,也可能是敌人,敌人的敌人亦然。它和性别、种族、信仰和社会地位都没什么关系,不过人们更倾向于树敌而不是交友,大部分人的朋友数量都要比敌人少很多。

互联网提供了大量敌友国中朋友关系的数据。通过检查Facebook和Twitter,敌友国理工学院的计算机科学家们获得了几乎完整的数据库,里面记录了哪两个人是朋友,哪两个是敌人。在本章,我们将看到研究者能利用这些数据做什么,不能做什么。

六度理论

随便从敌友国挑两个人出来,不妨叫他俩Alice和George,两个人互为朋友的可能性很低。但他们可能有一个共同的朋友Bob,也可能没有这么一个人。敌友国理工学院的计算机科学家把全国的人标记在一张散点图上(每个点代表一个人),并在代表朋友关系的两点之间连一条线。这张图的一部分像下面这样。

敌友国的好友关系图

研究者发现要连接Alice和George,中间要经过6个人:Alice和Bob是朋友,Bob和Cathy是朋友,Cathy和David是朋友,David和Eve是朋友,Eve和Fred是朋友,Fred和George是朋友。敌友国的科学家想,是不是任意两个人都能通过一条足够短的好友链联系起来。这个现象称为“小世界”,不是得名于迪士尼乐园里那个游乐项目,而是因为两个陌生人见面,通过攀谈发现彼此竟然七拐八弯地有关联时,通常会说:“世界真小啊!”

1967年心理学家斯坦利·米尔格拉姆做了一个著名的实验来检验小世界理论。好友链的平均长度是5.2个人,从而产生了所谓六度分割的概念,就是说任何人最多经过6个人就能认识所有人。尽管许多人从多方面指出了米尔格拉姆研究的不足,并且他本人从没有声称自己发现了六度空间法则,但是很明显,我们所有人之间的联系比预想中更为紧密。

敌友国的研究者决定首先检验六度空间法则在他们的国家是否成立。要检验Alice和George之间是否有长度为6的关系链,一个简单的方法是检查所有长度为6的关系链,看看其中是否有一条以Alice和George为端点。但是对于敌友国的2万居民,所有长度为6的关系链有3 198 400 279 980 000 480 000种可能,即使计算机每秒能检查1万亿条关系链,也需要100多年才能检查完。有没有更好的方法来检查Alice和George之间的距离呢?像这样对计算步骤做出的非正式描述就叫算法(algorithm),得名于19世纪波斯数学家穆罕默德·伊本·穆萨·花剌子密。

牵线搭桥

增广路径(augmenting path),它可以用来增大配对的数量。1957年,克劳德·伯杰证明任何未达到最大可能配对数的匹配方式都对应一个增广路径。

“递棍儿”

“递棍儿”的灵感来自19世纪的一个著名难题。在普鲁士的哥尼斯堡(今俄罗斯加里宁格勒)有七座桥横跨于普雷格尔河上,请看这张老地图。

柯尼斯堡的桥

哥尼斯堡的市民想知道能否有一条路线跨过每座桥一次,并且只跨过一次。1735年,著名的数学家莱昂哈德·欧拉着手解决这个问题,他画了一张图。

和“递棍儿”游戏中的孩子们不同的是,北区和岛区、岛区和南区之间都有多重的“友谊”,即桥梁。然而原理是一样的,欧拉证明,没有人能将每座桥跨过并且只跨过一次,因为四块地区都有奇数条桥梁与其他地区相连。

欧拉的难题

因为源于欧拉和哥尼斯堡七桥难题,“递棍儿”游戏的成功完成方式叫做欧拉回路。

当人数变得较多时,“递棍儿2”的难度陡然上升。1857年,数学家威廉·罗恩·哈密顿发明了一个叫Icosian的数学游戏。我们可以用“递棍儿2”来描述它的玩法,为了让图更简单,我们把每个人用名字的首字母代替。

Icosian游戏来自正十二面体,即一个有十二个平面的球。

Icosian难题

十二面体

如果顶点代表敌友国的人,每条边代表一对朋友之间的关系,就会得到上面那张好友关系图。
为了纪念Icosian游戏的发明者,“递棍儿2”游戏的成功完成方式叫做哈密顿回路。

P和NP

团、哈密顿回路(“递棍儿2”)、地图填色,以及最大割。这些问题有一个共性,都可以用很简单的方法检查方案的有效性。一旦敌友国的科学家找到了阿尔法会的成员,就很容易验证是不是所有成员之间都互为朋友,即阿尔法会成员组成的是一个团。孩子们如果听说了一个能完成“递棍儿”游戏的方法,只要顺着方法玩一遍就知道对不对。随便给出一个涂色方案,政府很容易检查它是否符合相邻的房子颜色不同。在最后一个例子里,对于任意一个分组方式,校长只要数数有几对敌人被分开就能判断方案的好坏。
这一类能够很快验证一个解的有效性的问题,计算机科学家给它们起了一个名字:NP。如果你非想知道的话,这两个字母代表nondeterministic polynomial time(不确定性多项式时间)。团、哈密顿回路、地图填色和最大割都是NP中的典型例子。

与之形成对比的是P类问题,即我们能很快找到最优解的这些问题:最短路径、配对、欧拉回路(“递棍儿1”),以及最小割。

判断P是否等于NP是计算机科学乃至整个数学领域最关键的问题。许多人呕心沥血,试图找到解决团、哈密顿回路或其他问题的好算法,可惜都失败了。与此相反,要证明P≠NP,必须证明无论现在还是将来,都不可能存在能够快速找到团或解决其他NP问题的算法。如何证明一件事不可能做成?目前这两个研究方向都没有什么实质性进展。

敌友国之外

讨论了生物学、物理学、经济学、数学中的P/NP问题。
精彩,值得阅读——锅巴GG

NP中最难的问题

心理学家以数学家为研究对象做了一个实验。把数学家关在一个小木屋里,地上放一些引火物、一张桌子,桌子上有一桶水。然后心理学家点着了地上的引火物。数学家提起桌上的水桶把火扑灭了。到目前为止一切正常。心理学家再次进行实验,还是把数学家关在那个有桌子、水桶和引火物的小屋里,但这次,水桶是放在地上的,靠近那堆引火物。然后心理学家又放了火。数学家提起水桶,把它放到桌子上,然后就等着。心理学家和同事们好容易才把数学家及时从即将烧塌的小木屋里救出来。
心理学家问数学家:“为什么不像上次一样把火扑灭?”数学家回答:“我已把问题归约到一个之前解决过的情形。”——一个老生常谈的数学笑话

第一个NP完全问题

计算机科学中最关键的概念:归约。我们把寻找团的问题归约到检查逻辑表达式的可满足性的问题。现在只要我们有解决可满足性问题的算法,就可以通过很容易的变换,得到团问题的求解算法。团问题的求解至少和可满足性的求解一样容易。如果可满足性是容易求解的,那么团问题也是。如果团问题没有有效解法,那么可满足性问题也没有。

能归约到可满足性问题的不仅是团问题,而且还包括我们前面讨论过的其他NP问题,包括旅行推销员问题、哈密顿回路、最大割和地图填色问题。事实上,斯蒂芬·库克证明了NP中的每一个问题都能通过某种方式归约到可满足性问题。解决了可满足性问题,你就能解决所有的NP问题。如果你有解决可满足性的有效算法,我们就能快速解决所有容易检查特定解有效性的问题,也就是说证明了P=NP。只要你有一个解决可满足性的有效算法,那么克雷研究所提供的几百万美元奖金就是你的了。

1971年5月4日,在当时的俄亥俄州榭柯高地斯托弗的萨默塞特酒店召开的STOC上,斯蒂芬·库克宣读了自己的论文。

结果表明,可满足性问题可以作为一个相对有用但尚未存在有效计算方法的待选课题来研究,并且我认为值得投入更多精力来证明这个猜想。找到它的证明将可能带来重大的突破。

P/NP问题从此诞生了。

21个问题

卡普不仅证明了团问题是NP中最难的问题之一,而且找出了其他19个同样难度的重要问题,包括分割难题、旅行推销员、哈密顿回路、地图填色以及最大割。只要有效解决了这些问题中的任意一个,你就能解决所有问题并证明P=NP。如果说P≠NP,那么这21个问题(包括可满足性问题)没有一个能被快速地解决。

起个好名字有那么重要吗

卡普的论文给出了我们今天使用的P和NP这些名字。但是该怎么称呼那些NP中最难的问题呢?库克用了一个非常学术的名称deg({DNF 重言式}),而卡普使用了术语(多项式时间)完全。可是这些名字太别扭了。

高德纳接手了这个命名问题。鉴于他一贯杰出的研究工作以及宛如丰碑般的三卷巨著《计算机程序设计艺术》1
,高德纳在1974年获得图灵奖。由于认识到了P/NP问题至关重要的作用,高德纳想在第4卷中最终敲定这个NP中最难问题集合的命名。1973年,他通过普通邮件做了一次投票调查。他直到今天都坚持不用电子邮件,这在业界是很有名的。但在1973年,只有普通邮件可用。

高德纳在投票中给出的几个候选项——herculean(艰巨)、formidable(可怕)和arduous(费劲),都不怎么受欢迎。他收到了许多来信建议,有些很直白,如intractable(顽固)和obstinate(执拗),有些则更加口语化,如hard-boiled(原意是煮得很硬的蛋,可能是在向库克致敬2)和hard-ass(抗揍的混蛋,简直像可满足性问题一样难啃)。
库克(Cook)这个姓的原意为“厨师”。——译者注

最终获胜的来信建议是“NP-complete”(NP完全),它由新泽西州贝尔实验室的几个人提出,是那里的研究者经过多次讨论之后产生的。“complete”(完全或完备)这个词出自数学逻辑学,一个事实集合被称为完备的,就是说它能解释某些逻辑系统的所有真命题。类似地,“NP完全”表示这些NP问题的集合强大到能够用来解决任何其他的NP问题。

高德纳对这个民选结果不太满意,但也没有觉得它差到让人活不下去的地步。他本人特别想要找一个英文词,既能捕捉“困难的搜索问题”这个直观的意象,又要琅琅上口,便于向大众普及。1974年,高德纳总结了他的调查过程,文中写道:“‘NP完全’这个名字其实学术气息有点儿浓,不好向大众推广,但也没有差到不能用的地步。”

“NP完全”很快成为标准术语。高德纳用了大概40年才完成巨著的第4卷。

超越卡普的工作

在卡普的论文之后,计算机科学界掀起了一个寻找并证明各种问题是否属于NP完全的热潮。在接下来的几年里,教授和研究生们成功证明了许多已知的搜索问题(以及一些新问题)是NP完全的。一本1979年出版的书1
中列举了三百多个主要的NP完全问题。NP完全问题持续在各个领域涌现,如计算机科学、物理学、生物学、经济学,以及其他许多攀登到困难顶峰的学科。Google学术搜索NP-Complete将返回超过138 000篇科研文献,时间跨度从1972年到2011年,单是2011年就有近1万篇。我们在此无法一一列举,只从中挑选几篇,看看这些文章是什么风格。

  • 大规模数独游戏
    数独(Sudoku)是一种起源于日本的填数字游戏,使用一个9×9的格子,如下图所示。

数独

数独的游戏目标是填满所有空格,并使每一行、每一列和由黑线标出的3×3小方格中的数字分别是1到9的不重复的数字。

数独的解

数独是NP问题,因为很好检查一个解。找到一个解有多难?不太困难。使用简单的回溯算法,普通计算机可以在几秒内找到一个有效解。

大规模的数独

但是如果谜题的规模变得更大,像上面这个25×25的版本,要求每行、每列和小方块中填入A到Y且不重复的字母,会发生什么呢?
这回普通计算机就得算好长时间了,而100×100的数独游戏能打败当今最快的机器。
大规模的数独游戏是NP完全问题。你自认为是数独高手?如果你能可靠地解决大规模的数独,那么你也能解决可满足性问题、旅行推销员问题,还有其他几千个NP完全问题。

数独可不是桌面游戏中唯一一个NP完全问题。来看微软Windows系统自带的扫雷游戏。

扫雷

俄罗斯方块

当然还有俄罗斯方块。玩家平移和旋转各种下落的积木,填满一行的那一刻整行会消失,游戏目标是不让整个画面都被方块填满,坚持尽可能长的时间。
积木分很多种形状。
经典俄罗斯方块游戏中你不知道下一块积木的形状。但即使你提前知道了各种形状的积木到来的次序,如何把俄罗斯方块玩到最好也是一个NP完全问题。

谁曾想把数独、扫雷和俄罗斯方块这些游戏玩好,就可以证明P=NP从而解决我们这一代面临的最大的挑战呢?

魔方

与玩好俄罗斯方块、扫雷和数独的困难程度相比,复原魔方的问题容易得出奇。
而双人对战游戏,如国际象棋、跳棋、黑白棋和围棋,它们的难度又如何呢?这些游戏的大规模版本,其难度和可满足性问题等NP完全问题的难度是相当的。但是这些双人游戏不属于NP类问题。比如我告诉你,这盘国际象棋肯定是白方赢,最后一步是三列卒吃王,你根本没法验证我的话。计算机科学家基本上都认为国际象棋、跳棋、黑白棋和围棋的难度均大于任何NP问题。

漏网之鱼

人们在20世纪70年代所研究的大部分NP问题,都要么被认定属于NP完全问题,要么被有效解决,从而归属于P。但还是有一些NP问题冥顽不灵,难以确定其归属。这些问题中的一部分在很多年后被解决了,另一部分直到今天都还没有被定性,成为漏网之鱼。

  1. 图的同构问题
  2. 质数和因数分解
  3. 线性规划

第9章 量子

1982年,诺贝尔奖得主物理学家理查德·费曼发现,不存在简单的方法可以利用电子计算机对量子物理系统进行简单的仿真。他把这个问题转化为一个机会,提议也许可以研发一种基于量子力学的计算设备,其计算效率比传统的计算机更高。在接下来的十年,计算机科学家和物理学家经过合作,在理论上证明了量子计算机能比普通计算机更快地解决某些问题,例如因数分解。至于是否能建造出真正可用的大型或中等规模的量子计算机,并且了解这类计算机到底能做什么,不能做什么,仍然是意义非凡的重大挑战。

量子录像机

传统计算机最基本的元素是比特(bit,binary digit的简写),它只能取两个值中的一个,如赢或输、真或假。而量子计算机的基本元素叫量子比特(quantum bit)。和只能取两个值之一的比特不同,量子比特的取值能介于两个值之间。

量子比特可以互相纠缠,就像汤姆和苏姗的录像带那样。让两个量子比特互相纠缠,这样它们在被观测到的那一刻就总能给出相同的答案。
不过二者的相似性就到此为止了。量子比特能以复杂得多的方式互相纠缠,而这些纠缠态可被操控,从而形成计算能力。
比赛的结果是一个简单的概率,可以在一条简单的直线上取任意值。

波士顿

五角星所处的位置代表波士顿有30%的概率会赢。汤姆看完了比赛,五角星要么左移到尽头,要么右移到尽头,至于向哪边移动则取决于比赛结果。

量子比特则可在一个圆圈上取值。

量子比特

这张图里的五角星在二维平面中的坐标是(0.55真, 0.84假)。量子比特也可以取负值。笑脸代表的量子比特取值为(﹣0.71真, ﹣0.71假)。量子计算机能以可控的方式旋转或翻转这个圆圈。
一个量子比特可用一个二维的圆圈来表示。两个量子比特则需要用一个四维版本的圆圈来表示其状态,很难在这里画出来,甚至难以想象。30个量子比特则需要超过1万亿个维度。

这启发人们可以用量子计算机的方法解决NP问题。想想从2万敌友国居民中找出50人的团的问题。我们能用大概500个量子比特表示出所有可能的50人的集合。然后可以同时并行地处理所有的集合,并通过适当的旋转和翻转操作标记出其中能够组成团的那些集合。

有某些证据表明格罗佛的算法是使用量子计算机来求解NP完全问题所能达到的最好结果,所以P=NP的量子版本也不太可能成立。即使物理学家们成功造出了量子计算机,它还是无法解决我们面临的最难的问题。

这并不意味着量子计算机就没有用了。它能对纳米级别的物理系统有效地进行复杂的仿真,这将有助于揭开宇宙的一些未解之谜。量子计算机还能求解某些人们无法用传统计算机有效解决的NP问题。

1994年,贝尔实验室的另一名研究人员彼得·肖尔意识到,量子计算机能对数字进行因数分解,例如对于数字16 461 679 220 973 794 359,找到两个数5 754 853 343和2 860 486 313,并有5 754 853 343×2 860 486 313=16 461 679 220 973 794 359。他的算法工作在快速的量子计算机上,对几百位甚至几千位的大数都有效。搜索一个数的因子问题有着良好的代数结构,可被量子计算机利用。尽管我们认为因数分解对于今天的计算机是很难的问题,量子计算机则能够借此克服这些困难,分解很大的数字。而NP完全问题则缺乏这种良好的代数结构,故肖尔的算法对通用的NP问题是无效的。

当然,我们能真正使用格罗佛或肖尔的算法的前提是:有一个能工作的量子计算机。为解决今天的机器无法解决的规模可观的问题,我们至少需要上万个量子比特彼此纠缠,并在几秒的时间内是可控的。可惜的是,量子纠缠态十分脆弱。量子系统和外界环境的任何交互作用都可能引起一次“观测”,导致某些纠缠态的丧失,这对于精密的量子计算是不可挽回的灾难。

甚至对于两个量子比特,目前物理学家还不能使其达到完美或接近完美的量子纠缠态。计算机科学家采用所谓量子纠错的方法来设计算法,以处理中等规模的量子纠缠。即使如此,我们不知道如何在超过5个量子比特之间创造出显著数量的纠缠态。可能存在某些自然界的基本法则,阻止量子之间在一段足够长的时间内处于显著的纠缠态,也可能这只是一个棘手的工程问题。我们还是让物理学家来解决这个问题吧。

还有其他利用量子效应来进行计算的方法,如量子绝热系统,或量子退火,而它们也分别有自身的技术和计算局限性。一个叫D-Wave的公司宣称建造了基于这些技术的机器,但这些机器的计算能力能否超过人们的桌面电脑,还有待评估。

即使我们发现了建造真正的量子计算机的方法,这些机器仍然是为特殊用途而建造的,如因数分解或者量子系统的仿真。它们也许有助于破解密码,以及加深人们对宇宙的本质的了解,但不太可能用它们来求解NP完全问题,或加快电子表格的运行速度。
想哭 —— by 锅巴GG

量子隐形传输

一定要看,精彩! —— by 锅巴GG

量子的未来

有些研究者认为应该从量子角度重新审视所有的计算问题。即使量子计算机不能解决NP完全问题,它对量子世界的仿真也将极大促进人类对物质、宇宙乃至人类大脑的认知,从而推动科技的进步,取得今天所无法想象的成就。

还有人看到,量子研究从20世纪90年代中期开始在算法和硬件两个方面的进展都十分缓慢,据此怀疑能否看到量子在计算设备中起到关键性作用的那一天。如果缺乏革命性的进展,量子计算技术在未来一段时期内仍将停留在科幻作品中。

如果量子不是计算领域的下一个浪潮,那什么是呢?有哪些巨大的计算挑战在前方等待着我们?


未来

作者本人对P/NP问题得到解决的前景持悲观态度:我认为P≠NP,而且此生都看不到它的证明。我们不会见证第2章中美妙世界的到来,但是也不能排除其可能性。我认为P/NP问题在未来的几个世纪内仍将是一个未解之谜。

P/NP问题不仅仅是一个数学上的异类。虽然我们不能直接解决它,但研究它的过程赋予了我们一种通用的框架,有助于思考如何应对从实际需求中产生的那些困难的问题。今天人们在计算学方面面临哪些重大挑战?

  • 并行计算:曾经每过18到24个月,计算机的计算速度就提高一倍,但现在我们正在触及物理极限,将来很难制造出比现在快得多的处理器。另一方面,计算机正在横向扩张,可以让多个处理器一起工作,不论是在同一块芯片上,还是在云端。如何调整我们的算法,以适应这个日趋并行化的世界呢?
  • 大数据:从互联网到科学实验再到仿真研究,我们每天都在生成海量的数据。如何试图理解、感受、学习如此庞杂的信息,并形成预测能力?
  • 一切事物的网络化:世界上大部分地区都有计算机网络,无论人们使用的是像Facebook这样的社交网络,或者仅仅通过电子邮件交流。很快几乎所有人造的物品都将成为这张大网的一部分,从我们穿的衣服,到阅读时提供照明的灯泡。我们如何更好地利用这个超级互连的世界?

无论最终的答案是P=NP还是P≠NP,对这一问题的研究过程本身都将在很大程度上影响我们应对这些挑战的方式。

应对科技变革

并行计算、大数据和一切事物的网络化并不只是出现在科幻作品中的概念。它们更是一场早已开始的变革的宣言,而这场变革将在未来的一二十年里横扫世界。社会将会发生怎样的变化?

需要注意的是,当一项科技在大部分情况下都表现良好时,大家会误以为它能在所有情况下都表现良好,这也许是其最危险的一面。如果人们对科技投入过多的信任,它可能就会在大家毫无防备的时候突然掉链子。未曾预料到的罕见事件的发生会加剧这个问题的严重程度。一些例子包括:卡特里娜飓风袭击下新奥尔良市的防洪堤决口,2010年深水地平线(Deepwater Horizon)公司的钻井平台爆炸之后大量原油泄漏的事故,以及2011年日本地震和海啸之后福岛核电站核泄漏灾难。我们应该像对待未被驯服的猛兽那样正视科技的力量与危险性。发生大规模科技事故的概率虽然很小,但仍有可能性。人们要警惕不要让科技事故酝酿出更加巨大的灾难。

关于P/NP问题的结束语

证明P≠NP并非易事。你需要证明不存在有效的算法能解决团问题或任何其他的NP完全问题,这些算法既包括现有的也包括将来发明的。如何证明每一个潜在的算法都必将失败?

P/NP问题远远不只是一个数学谜题那么简单。它是一种思考的方法,一种根据问题的内在难度对其进行分类和认识的方法。虽然尚没有P≠NP的确凿证据,我们起码知道了:当面临一个NP完全问题时,不可能找到一个在所有情况下都能解决该问题的算法。这时就需要借助于其他的工具,如近似计算、启发式方法、暴力破解等方法的组合,然后尽我们所能地争取最好的结果。NP完全性理论给了我们一个通用的思考框架,允许我们建立一套由很多技术组成的工具体系,向那些难以计算的问题发起有效的攻击。

P/NP问题让学术界团结在一起。物理学、生物学、经济学以及其他许多领域中都有NP完全问题的身影。虽然物理学家和经济学家所关注的问题有很大的差异,但这两类问题也存在着共性。所以分享各自的工具和技术将为双方都带来巨大的好处。例如,物理学中为了寻找物理系统的基态而开发的工具,对于经济学中寻找复杂经济环境中可能出现的均衡行为也是有帮助的。

P/NP问题内在的难度同样促进了新技术的发展。当代密码学家从P/NP问题受到启发,把密码学操作过程从一门艺术变成了科学。对于解决P/NP问题的强烈需求也在激励人们建造更快、更强的计算系统,催生了诸如量子计算这样的新技术。

计算是一种和过程有关的活动,而过程不仅仅出现在计算机上。P/NP问题归根到底与自然本身的极限有关,与生物和物理系统进化的极限有关,甚至可以说与人类思想所能达到的极限有关。只要P/NP问题还是一个未解之谜,人类就无法确切地知道自己所能取得的成就的极限在哪里。这不由得让人感到精神一振。

作者:锅巴GG
链接:http://www.jianshu.com/p/9174fdb66fd7
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

可能与不可能的边界:P/NP问题趣史相关推荐

  1. 可能与不可能的边界 P/NP问题趣史

    第一章 金券 假如我们想在数以万计的巧克力中找到一张含有金券的巧克力需要怎么做?(一共有5张金券) 有大量的时间,请大量的人,大量的金钱(买下非常非常多的巧克力),然后人工筛选 Mary的公司定制了一 ...

  2. 可能与不可能的边界(P/NP问题趣史)

    金劵 划分的难题 这个简短的难题抓住了 P/NP问题的本质:一个程序如果能解决这个难题 的复杂版本,那么它也能解出任意问题. 手 一只手有27块骨头,5根手指,包括最重要的拇 指.手具有结构复杂的神经 ...

  3. 最严谨的计算机语言p,P=NP?这世界真有捷径?

    原标题:P=NP?这世界真有捷径? 来自公众号:菲菲读书 在<嫌疑人X的献身>中,石神和汤川讨论,解决一个命题和判断一个命题是否正确,哪个更难.讨论中,他们提到了P≠ NP的证明.这是一个 ...

  4. (数学)P、NP、NPC、NP hard问题

    概念定义: http://m.elecfans.com/article/757041.html https://www.cnblogs.com/AndyJee/p/5048556.html P问题:能 ...

  5. 相爱相杀:程序员的数学

    "要想成为一名优秀的程序员,需要学好数学吗?"今天不回答这个问题--让咱们换个角度思考下:想搞定数学吗,尤其是编程中必须掌握的那些数学思维?或者,单纯地,曾经数学伤透了你的心,现在 ...

  6. 图灵十二月书讯 ——年底大餐

    寒潮来袭,什么道具才能抵挡最冷的冬天?火锅?Hot Hot Hot(麻辣烫)?No,no,no!这可不够,饱腹之暖怎能抵得求知的热情?图灵教育12月新书诚意上市,和广大读者一起暖暖过冬! --图灵编辑 ...

  7. 图灵12月书讯:抵挡严寒的不止涮锅,还有火爆的图灵新书

    寒潮来袭,什么道具才能抵挡最冷的冬天?火锅?Hot Hot Hot(麻辣烫)?No,no,no!这可不够,饱腹之暖怎能抵得求知的热情?图灵教育12月新书诚意上市,和广大读者一起暖暖过冬! --图灵编辑 ...

  8. 从黑白mask图提取模板(np.where实现)

    原图: 我想要提取这个 """-*- coding: utf-8 -*-author: Hao Hu@date 2022/4/10 9:00 PM "" ...

  9. 【numpy】np.digitize(arr, bins) 用法

    numpy.digitize(array_x, bins, right=False) 函数描述 返回array中每一个值在bins中所属的位置,返回arry中元素个数与原始array_x一致 按bin ...

最新文章

  1. perl: warning: Setting locale failed. Falling back to a fallback locale (“en_HK.UTF-8“).
  2. OpenCV读写视频文件解析
  3. C++负数、小数如何保存
  4. 反向代理or后端nginx 生产用于缓存视频需要解决的问题
  5. 【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式
  6. Enterprise Library 3.0 体验(3):使用配置文件的Validation Application Block
  7. 21世纪初最有影响力的20篇计算机视觉期刊论文 及 邓亚峰老师关于人脸识别方面总结
  8. 波形捕捉:(2)创建捕捉设备对象
  9. 一段话系列-Java是否是解释执行语言?
  10. D. Cut and Stick(Codeforces Round #716 (Div. 2))
  11. NAR再版 | 人类长非编码RNA知识库LncRNAWiki 2.0
  12. 4-7:TCP协议之流量控制
  13. postgresql-int,bigint,numeric效率测试
  14. eclipse同步svn时如何过滤target等文件
  15. 奇虎360-数据可视化
  16. PYTHON语言开发公司工资条通知短信
  17. 揭露淘宝不良商家,利用UI设计缺陷进行恶意修改销量以及评价!
  18. R语言Kmeans聚类分析
  19. 极大似然函数求解_极大似然估计详解
  20. HDU - 1425 sort

热门文章

  1. Resuming debugger: error during debugging loop: TypeError: firstViewRangeElement is null
  2. 电子计算机的字母是什么意思,电脑硬件的型号中的数字和字母都代表什么意思...
  3. 计算机的配件ppt,《认识计算机配件》PPT课件
  4. Matlab R2018b激活教程
  5. 计算机考证党必备的5个APP
  6. 【全年汇总】2023年CCF人机交互会议截稿时间汇总(持续更新)
  7. rename 批量修改文件名
  8. 使用Thumbnails工具对图片进行缩放,压缩
  9. 基于ZigBee的室内无线定位系统设计
  10. java对redis性能监控编码_Redis状态与性能监控