目录
一、计算机中的P问题、NP问题、NP-hard、NP-C问题
一、计算机中的P问题、NP问题、NP-hard、NP-C问题
◼ 时间复杂度
时间复杂度定义为随着问题规模的增大,算法执行时间增长的快慢。它可以用来表示一个算法运行的时间效率。
上图中,白色字部分的时间复杂度是多项式复杂度,黑色字部分的时间复杂度是非多项式复杂度,我们用经典计算机来实现这种算法时,花费时间会很多。
◼ P问题
通俗来说,p问题,就是可以在多项式时间内解决的问题。
算法要处理的数据是关于n的函数,比如有n个数据传过来,我们要进行排序,如果排序的算法的时间复杂度是n的多项式,那么就是一个p问题。
◼ NP问题
通俗来说,np问题,就是我们给你一个解,要验证这个是否该问题的一个解,在验证的过程中,如果我们能在n的多项式时间复杂度内验证这个解是该问题的一个解, 那么就是np问题。
比如说有一个party聚会,让你从上万人中找出所有好看的人,找出美女帅哥,那么肯定要一个一个去遍历判断,就很麻烦,很耗时间。但是如果反过来,我从上万人中找出一个人,让你判断这个人好看不好看,这就很容易了,你看一眼就知道这个人好看不好看。
很显然,p问题也是np问题。因为p问题可以在多项式时间内解决一个问题,那么肯定也可以在多项式的时间内验证一个解是否是该问题的解。
问题:那么,np问题是不是p问题?
在讲这个问题之前,我们先来了解什么是NP-hard问题和NP-C问题。
◼ NP-hard问题,NP-C问题
那也就是说,NP-C问题就是最复杂的问题。有了这个思路,那么我们假设如果NP-C问题能够在多项式时间内解决的话,那么所有的np问题就都能够在多项式时间内解决,也就是所有的np问题都是p问题,那么我们就可以证明p问题就是np问题。但是现在并没有证明这个结论。
有哪些问题是np完全问题呢?
比如说逻辑电路问题,本身就是一个np问题。Hamilton问题就是给一个地图,地图上有很多城市, 我们选择两个城市作为起点和终点,路过一次且仅一次,到达终点。
旅行商问题:送货员开着一辆货车,从A城市出发,经过所有的城市,最后回到A,找出一条最短路径。目前的想法是我把他经过所有的城市最后回到A的所有路线都枚举出来,其实就是一个组合数学的全排列问题。假设一共有20个城市,A不用参与排列,那么一共就是19!种可能,把所有的排列方法全都计算,找出最好的那条路线。
19!是一个非常大的数据,对传统计算机来说非常耗时,不可接受。这就是一个np问题,而且是一个np完全问题。
二、计算机中的"NP=P?"问题
NP-C问题就是最复杂的问题。有了这个思路,那么我们假设如果NP-C问题能够在多项式时间内解决的话,那么所有的np问题就都能够在多项式时间内解决,也就是所有的np问题都是p问题,那么我们就可以证明p问题就是np问题。但是现在并没有证明这个结论。
现在大多数觉得np问题不等于p问题,因为np问题中存在着np完全问题,就像我们上文提到的逻辑电路问题,旅行商问题和Hamilton问题,想把这些问题在多项式时间内解决是不太可能的。
我们把它们归纳为一个集合时,分两种情况: