N 与 NP

P 问题指的是可以在多项式时间内被计算机解决的问题,而 NP 则是能在多项式时间内被验证的。

听起来挺无厘头的,感觉像是计算机科学家们简单粗暴地将问题划分为困难题和简单题。

举个示例,1个快递员需要送50件货物去50个不同的地方。P 问题:将50个地方由远及近排序。NP问题,找到一条快递员最短的路线。

如果从排列组合的角度来遍历 NP 问题,那么是 $50!$ 种路线需要被遍历,这是我的第一反应。鉴于我目前狭隘的数学认知和算法未入门,我这篇文章仅仅讨论一个门外汉对于这个问题的直觉,未来我学完了旅行商问题,我或许会进行补充。

征服NP

将 $50!$ 个情况组成的集合称为解空间 A,那么这个解空间 A 中的每个元素 a 拥有一个性质,就是路线长度。也就是快递员要找的最佳路线就是其中一个元素。我们把每个元素铺在一个平面上,然后根据长度来抬高每个元素,于是这个解空间变成了一张类似等高线图的地理图。如果我们有一个小球,将它均匀丢进不同的位置进行测试,那么我们就能不用懂脑子的得到最佳路线了。

所以我认为 NP 问题拥有如下性质:第一,我们知道如何遍历解空间的每一种情况,尽管这种遍历从实际角度可能是无穷的。第二,通常我们能从其中一种情况出发,找到接近的另一种情况,使得其能接近我们想要的结果,也就是快递员发现了他随便找到的路线的一小点优化方案。第三,基于一个方案不断改进确实不错,但是局部最优不等于全局最优。也就是小球从一个点确实会滑向低谷,但是山谷可能不止一处。

这让我想到了自然界中的演化,基因突变在自然界中,出现的往往是跳跃,而非连续的。因为中间的形态在自然界中并不稳定。就像是小球只会最终停留在一个个山谷一样。

似乎 P 问题与 NP问题之间的鸿沟,就是一个拥有一个小球和地图的人,开始做扔球实验和并未开始做扔球实验的差距。

自然界似乎不存在任由一个远小于且身处一个系统的个体,来预测一个系统的未来,除非这个系统处于一个循环中。