P vs NP vs NP Complete vs NP Hard

目录

1.写在前面

2.千禧年世纪难题

3.P类和NP类问题特征

4.NPC问题

5.NP-Hard问题

6.总结


1.写在前面

        我们看到一个问题,经常会说:“这个没法做,是一个NP问题”,其实这句话是有问题的,我们并没有搞清楚NP问题和NPC问题,大部分情况下,我们想说的NP问题都是NPC问题,NP问题并不是没法做,NPC才是。最近看到一篇文章【我国数学家证明NP=P】,论文中结论对错我没有能力评价,从现有反馈上看,作者结论不成立可能性更大,如果能解决这个问题,几乎就是以凡人之躯抵达神坛。我今天想帮助大家理清P、NP、NP Complete、NP Hard这几个概念。

2.千禧年世纪难题

        千禧年大奖难题 Millennium Prize Problems 是七个由美国克雷数学研究所 Clay Mathematics Institute 于2000年5月24日公布的数学难题。根据克雷数学研究所订定的规则,所有难题的解答必须发表在数学期刊上,并经过各方验证,只要通过两年验证期,每解破一题的解答者,会颁发奖金100万美元。这些难题是呼应1900年德国数学家大卫·希尔伯特在巴黎提出的23个历史性数学难题,经过一百年,许多难题已获得解答。而千禧年大奖难题的破解,极有可能为密码学以及航天、通讯等领域带来突破性进展。不妨看下这7个多金的题目:

  • P/NP问题(P versus NP)
  • 霍奇猜想(The Hodge Conjecture)
  • 庞加莱猜想(The Poincaré Conjecture)
  • 黎曼猜想(The Riemann Hypothesis)
  • 杨-米尔斯存在性与质量间隙(Yang-Mills Existence and Mass Gap)
  • 纳维-斯托克斯存在性与光滑性(Navier-Stokes existence and smoothness)
  • 贝赫和斯维讷通-戴尔猜想(The Birch and Swinnerton-Dyer Conjecture)

        P=NP问题被认为是理论计算机和数学领域的综合问题,该问题的研究成果将对计算机领域和现实生活带来巨大的影响。

3.P类和NP类问题特征

        P和NP问题是斯蒂芬·库克和列昂尼德·莱文在1971年提出的,当摆在我们面前一个具体的问题的时候,我们一般会计算问题时间复杂度,比如让你计算1-100连续整数之和,这种问题我们是在一定时间内可以解决的,属于all problems solvable, deterministically, in polynomial time【多项式时间内可解决的问题(当然在多项式时间是可验证的)】,这种问题我们称为P问题(easy to find);另外如果让你计算地球上所有原子数目,这个问题就很难给出答案甚至根本没有答案,但是如果我说地球上所有原子数目是300个,你会马上反驳我,因为你知道这个肯定是错的,这种问题很容易验证但是不容易求解,属于NP问题(esay to check)

        P类问题是可以在多项式时间内解决并验证的一类问题,NP类问题是可以多项式时间验证但是不确定能否在多项式时间内解决的一类问题

        另外我们一直在提到多项式时间,到底什么样的时间才是多项式时间呢?在做算法题或者日常工作时我们都会说,这个解法的时间复杂度是O(n^2)性能不是很好,那个解法的时间复杂度是O(nlogn)还可以。我们可以看一下多项式表达:

        上面的多项式表达式可以理解为O(n^k)的复杂度,这个世界并不是只有多项式时间这么简单,我们还知道有指数函数形如2^n这个计算量已经非常可怕,更不要说n^n和n!这种问题了。我们通常将多项式时间看作是计算机解决问题的分水岭,因为超过多项式时间之后时间消耗上就不太好接受了。回过头看看NP问题是non-deterministic Polynomial time,也就是NP问题能否在多项式时间内解决存在不确定性。也就是说很多NP类问题如果无法在多项式时间内解决,那么于我们当前的计算能力而言是几乎无解的,量子计算机目前还处于初级阶段,或许若干年后这些问题对于量子计算机而言是可以接受的...。或许你会问像超级计算机这种能行吗?我们从时间增长曲线来看,问题规模扩大一点点,我们需要的算力就是更大倍数的增加,这样堆砌机器不是好办法,我们最好寄托于其他解决思路。看到这里聪明的读者会不由感叹:要是把NP问题转化到多项式时间内解决,那将是多么的进步啊!

4.NPC问题

        从特征上看,我们可以知道P类问题属于NP问题,因为P类问题属于NP类问题中可在多项式时间验证并解决的问题,可以简单认为P类问题属于特例最基本简单的NP问题。P类问题是在我们目前能力范围内的,但是NP类问题要寻找最优解可能超越多项式时间,我们知道P类问题属于NP类问题。那么NP类问题是否可以归类为P类问题呢?好了,截止到这里我们终于引出了 P=NP 问题在表达什么:是否所有NP类问题都可以在多项式时间内解决并验证,也就是转化为P类问题虽然目前 P=NP 问题还没有被证明或者证伪,但是经过多年的研究,学术界的一个方向性的共识是 P=NP 问题应该是不成立的,换句话说就是至少存在一个 NP类问题是无法在多项式时间内解决的。不由得问为什么会有这个不成立的倾向呢?因为很多学者做了很多研究之后,虽然没有解决问题,但是仍然取到了很大的进步提供了研究方向:NPC问题的发现。

        俗语有云:射人先射马 擒贼先擒王。没错,NPC类就是NP类问题的王。NPC问题Non-deterministic Polynomial complete problem又称NP完全问题。

        为了说明NPC问题,我们先引入一个概念——约化(Reducibility,有的资料上叫“归约”)。简单地说,一个问题A可以约化为问题B的含义即是,可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。 现在再来说一下约化的标准概念就不难理解了:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。

        从约化的定义中我们看到,一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。再回想前面讲的P和NP问题,联想起约化的传递性,自然地,我们会想问,如果不断地约化上去,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?答案居然是肯定的。也就是说,存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC 问题,也就是NP-完全问题。NPC问题的出现使整个NP问题的研究得到了飞跃式的发展。我们有理由相信,NPC问题是最复杂的问题。再次回到全文开头,我们可以看到,人们想表达一个问题不存在多项式的高效算法时应该说它“属于NPC问题”

        NPC问题的定义非常简单。同时满足下面两个条件的问题就是NPC问题。首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。既然所有的NP问题都能约化成NPC问题,那么只要任意一个NPC问题找到了一个多项式的算法,那么所有的NP问题都能用这个算法解决了,NP也就等于P 了。但是,给NPC找一个多项式算法太不可思议了。因此,前文才说,“正是NPC问题的存在,使人们相信P≠NP”。我们可以就此直观地理解,NPC问题目前没有多项式的有效算法,只能用指数级甚至阶乘级复杂度的搜索。

5.NP-Hard问题

        NP-Hard问题是这样一种问题,它满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广)。NP-Hard问题同样难以找到多项式的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

6.总结

  1. P问题: 能在多项式时间内解决的问题
  2. NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题
  3. NPC问题: NP完全问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决。
  4. NP hard:NP难问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的问题(不一定是NP问题)。

        集合关系上,P问题属于NP问题,NPC问题属于NP问题,NPC问题同时属于NP hard问题,是NP与NPhard的交集。因此说,正是因为NPC问题的存在,P=NP变得难以置信。P=NP问题还有许多有趣的东西,有待大家自己进一步的挖掘。攀登这个信息学的巅峰是我们这一代的终极目标,现在我们需要做的,至少是不要把概念弄混淆了。

猜你喜欢

转载自blog.csdn.net/Suyebiubiu/article/details/107761122
np