NP完全问题

来源:互联网 发布:word 矩阵对齐 编辑:程序博客网 时间:2024/05/29 11:36

什么是NP完全问题,NP=Non-deterministic Polynomial,也就是多项式复杂程度的非确定性问题, 是不是看汉语翻译一下子给懵了。没事,我们慢慢来,要了解NP问题,我们先从P问题开始,P就是Polynomial(多项式)的意思。P类问题就是所有复杂度为多项式时间的问题的集合。时间复杂度了解吧,我不多讲;多项式就是n^k+n^(k-1)+……等等其中k为任意整数(一般不会很大)。这个数看起来很大,其实人类计算机相对都能接受。就怕遇到指数方增长的问题。

    接下来我们探讨非确定性问题。什么是非确定性问题呢?有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。但是,有些问题是无法按部就班直接地计算出来。比如,找大质数的问题。有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。再比如,大的合数分解质因数的问题,有没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少?也没有这样的公式。这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。这也就是非确定性问题。而这些问题通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式时间内算出来,就叫做多项式非确定性问题。而如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题。

  完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。经典的NP问题有:梵塔问题,推销员旅行问题等。

    总之理解一句:NP完全问题就是 NP=P?的问题。

转自:http://blog.csdn.net/xueyong4712816/article/details/6509592


P就是能在多项式时间内解决的问题,NP就是能在多项式时间验证答案正确与否的问题。用大白话讲大概就是这样。所以P是否等于NP实质上就是在问,如果对于一个问题我能在多项式时间内验证其答案的正确性,那么我是否能在多项式时间内解决它?这个表述不太严谨,但通俗来讲就是如此。

转自:https://www.zhihu.com/question/27039635/answer/35040172