P和NP问题

来源:互联网 发布:《大数据时代》电子书 编辑:程序博客网 时间:2024/05/18 03:07


背景知识:参考链接

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

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


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

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

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





什么是P问题?

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。

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


什么是NP问题?

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?


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

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

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