P、NP、NPC、NP-Hard

      P=NP?一直是一个未解决的世纪难题,这个问题的意义非凡,当然了,如果等号成立才是有非凡的意义,但是如今大多数科学家都认为等号是不成立的,只是还没有人能够证明或证伪。

      P和NP是两类问题的集合。P集合中的问题叫做P问题,其表示可以通过确定机(可以认为就是现在的计算机)在多项式时间内找到解的问题。这里的多项式时间并不是直接的表示真正意义上的时间,因为我们无法准确的定义某个问题的计算机时间,因为不同的问题处理时间不一样,也没办法直接在时间上直接标准化,但是因为计算机的计算次数和时间是正比的,而计算机的计算次数是可以标准化的,因此这里我们就把计算机的计算次数间接的定义为计算机时间,所以这里的多项式时间可以解决一个问题,实际上表示的是,计算机可以在多项式次数内就可以找到这类问题的解,而这个多项式次数是关于n的多项式函数,这里的n表示这类问题的一个量级大小。比如,我们要找出一组size为n的数的最大值,那么必然的每个数都要进行至少一次比较,实际上只要比较n-1次就可以找到最大值,这里n-1就是这类问题的次数,是一个关于n的多项式,也可以表示为时间为O(n),那么我们就说这类问题就属于P问题。而NP问题表示的是可以在多项式时间内可以验证一组猜测的解是不是真的就是这个问题的解的这样一类问题,说起来有点拗口,举个例子,我们日常生活中的各种密码,比如要找到一组密码,这类问题目前就是没有多项式时间内的算法的,可以暴力破解,但这种暴力破解的算法显然就是在指数时间内的算法,因此这类问题就不是P问题,但是对于一组字符,它到底是不是真的密码,计算机是很容易就可以验证的,直接输入看是否正确就可以了,一次就可以,所以显然这是一个O(1)时间就可以验证的问题,所以这样的问题我们称之为NP问题。所以NP问题表示的是可以在多项式时间内可验证的问题,其可以是P问题,也可以不是P问题。

      P肯定属于NP,即多项式时间可以解决的问题肯定可以在多项式时间内验证,这是很显然的。但是NP问题属不属于P问题?也即P=NP是否成立呢?试想一下,如果P=NP,这就说明任何可以在多项式时间内可验证的问题便一定可以在多项式时间内找到解,因为多项式时间对于计算机来说是挺easy的事情,所以这也意味着我们现在的密码的安全性将会受到重大威胁,密码可能就失去作用了,这只是其中一个影响,类似的影响还有很多。但是其实不用担心,因为其实现在都普遍认为P是不等于NP的,只是很难证明罢了。

      NPC叫做NP完全问题,其属于NP问题,但不是P问题,特指那些所有NP问题都可以规约到这些问题的NP问题,所谓B可以规约到A指的就是B问题总是可以通过多项式时间内的转化,转为A问题的求解,即B问题可以在多项式时间内转为A问题,也即如果A问题可以找到某算法求解,那么B问题也可以通过将这个算法经过多项式时间内的转化得到B问题的算法解。所以,如果可以找到一个NPC问题的多项式时间内的算法,那么所有的NP问题也都可以在多项式时间内找到解,也就是说P=NP,当然,这是不太可能的。

      NP-Hard这类问题叫做NP难问题,其也是表示所有NP问题都可以规约成这些问题的问题,其和NPC的不同之处在于,其不一定是NP问题,但NPC一定是NP-Hard问题。

      P、NP、NPC、NP-Hard四者的关系如下图所示,当然这里图中已经默认NP>P了。

(图片来自网络)

猜你喜欢

转载自blog.csdn.net/S_o_l_o_n/article/details/86004287