编程语言
首页 > 编程语言> > 算法设计——P和NP问题的前世今生

算法设计——P和NP问题的前世今生

作者:互联网

算法设计——P和NP问题的前世今生

什么是P和NP问题

在这里插入图片描述

背景

20世界科学家在研究如何用巨大的复古电脑解决世界上所有的问题时,第一版被使用的程式通常都会特别慢,随着时间的推移,人们会想出巧妙方法来使它变得更快,可是对于另一些问题,没有人能想出更快的程式。
在这里插入图片描述
为了解决这些事情,他们以问题的解决速度来做问题的分类,像乘法问题,有非常快的程式可解,但像下一盘完美的棋,就没有那么快的程式可解了。
但介于这两者间的问题,他们不知道是否存在快速的解法,此时有了P和NP问题
在这里插入图片描述

著名的NP问题——TSP问题

-旅行家推销问题(TSPTSPTSP)。即有一个推销员,要到nnn个城市推销商品,他要找出一个包含所有nnn个城市的环路,这个环路路径小于aaa。我们知道这个问题如果单纯的用枚举法来列举的话会有(n1)!(n-1)!(n−1)! 种,已经不是多项式时间的算法了,(注:阶乘算法比多项式的复杂)。那怎么办呢?我们可以用猜的,假设我人品好,猜几次就猜中了一条小于长度aaa的路径,我画画画画,好的,我得到了一条路径小于aaa的环路,问题解决了,皆大欢喜。可是,我不可能每次都猜的那么准,也许我要猜完所有种呢?所以我们说,这是一个NPNPNP类问题。也就是,我们能在多项式的时间内验证并得出问题的正确解,可是我们却不知道该问题是否存在一个多项式时间的算法,每次都能解决他(注意,这里是不知道,不是不存在)。

NP类问题=P类问题?

所以这就引出了这类讨论的一个千年问题:是否 NP类问题=P类问题?即,是否所有能在多项式时间内验证得出正确解的问题,都是具有多项式时间算法的问题呢?太让人震惊了,要是解决了这个问题,那岂不是所有的NP问题都可以通过计算机来解决?

约化

所谓问题约化就是,可以用问题B的算法来解决A ,我们就说问题A可以约化成问题B。举个例子,一元一次方程的求解,跟二元一次方程的求解,我们知道,只要能求解二元一次方程,那就可以用二元一次方程的解法来求解一元一次方程,只需要将一元一次方程加上y,并附加一个方程y=0就可以将一元一次方程变形为一个二元一次方程,然后用二元一次方程的解法来求解这个方程。注意,这里二元一次方程的解法会比一元一次的复杂。所以我们说,只需要找到解二元一次方程的规则性解法,那就能用这个规则性解法来求解一元一次方程。

为了证明这个千古难题,科学家想出了很多办法。其中之一就是问题的约化。从这里也可以看出,约化是具有传递性的,如A约化到B,B约化到C,A就可以约化到C,同时不断约化下去,我们会发现一个很惊人的特性,就是他一定会存在一个最大的问题,而我们只需要解决了这个问题,那其下的所有问题也就解决啦!这就是我们所说的NPC问题的概念!!!

NPC问题

定义

存在这样一个NP问题,所有的NP问题都可以约化成它。换句话说,只要解决了这个问题,那么所有的NP问题都解决了。需满足以下两个条件:

证明思路

先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它。

NPC意义

引到NP问题里就是,对于同一类的所有的NP类问题,若他们都可以在多项式时间内约化成最难的一个NP类问题,(我们直观的认为,被约化成的问题应具有比前一个问题更复杂的时间复杂度)当我们针对这个 时间复杂度最高的超级NP问题 要是能找到他的多项式时间算法的话,那就等于变向的证明了其下的所有问题都是存在多项式算法的,即NP=P!!!!

NP难问题(NP-hard问题)

满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,NP-Hard问题没有限定属于NP),即所有的NP问题都能约化到它,但是他不一定是一个NP问题。

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

以上四个问题他们之间的关系可以用下图来表示:
在这里插入图片描述

解决N=NP问题的意义

在这里插入图片描述
只要问题不会指数级增长,我们要等的就是电脑变强来解决这些问题

图中魔方只是问题越来越复杂的泛化,不代表魔方解决是ppp问题

np问题即非确定性多项式时间,用数学术语可以解释为如果你有无限多部电脑,可以在同一时间内检查所有可能答案,就可以在多项式时间内找到正确解答
在这里插入图片描述在这里插入图片描述
所有的np问题的解决最终归结为用简单的多项式时间转换,即“NP-complete”问题,类似研究蛋白质的折叠以解决癌症问题,许多金融难题许多领域的重大难题都可以归结为“NP-complete”,一旦解决“NP-complete”,各个领域将迎来改变。

展望

计算机算法的问题很多,多项式层叠,指数层叠,最外围的甚至是没有任何一台电脑在任意时间和空间可解出来的问题,这里我们不仅看到计算的特性还有时间和空间本身的特性,这一团乱七八糟的算法复杂度分类甚至会影响物理学,生物学和我们所了解的一切基本!
在这里插入图片描述

参考资料

世界七大数学难题之一: P与NP复杂度问题 | 熟肉
P问题、NP问题、NP完全问题和NP难问题

标签:一次方程,今生,约化,多项式,问题,算法,前世,NP
来源: https://blog.csdn.net/liuyiming2019/article/details/106678673