P与NP问题的简单解释

来源:互联网 发布:海外淘软件 编辑:程序博客网 时间:2024/05/17 05:12
要计算或解决一个问题,该问题通常有一个大小规模,用n表示。例如,若分析计算一个二进制数,该数有多少位,这个位就是其大小规模。再比如,从n个数里面找出最大的那个数,这个n就是该问题的规模大小。怎么找?我们要比较n-1次才能得到结果,这个n-1就是所花的时间,也就是时间复杂度。再比如,将n个数按从大至小排序,n是其规模大小,若是我们按这样的方法:第一次从n个数里找最大,第二次从n-1个数里找最大,以此类推,需要的比较次数就是n(n-1)/2,称我们所用的方法为算法,称n(n-1)/2为该算法的时间复杂度。对于时间复杂度,当n足够大时,我们只注重最高次方的那一项,其他各项可以忽略,另外,其常数系数也不重要,所以,n(n-1)/2我们只重视n的平方这一项了,记为O(n的平方),这就是该算法对该问题的时间复杂度的专业表示。
 
所有形如a*n^k+b*n^(k-1)+c*n^(k-2)……都可记为O(n^k), n^k表示n的k次方,*为乘号,这样的复杂度称为多项式时间复杂度,若是时间复杂度形如k^n,k为大于1的常数,或n!,或更大的,就称为指数型时间复杂度。显然,当n足够大时,指数型时间比多项式要大得多的多。
 

所有能用多项式时间算法计算得到结果的问题,称为多项式问题,也就是P,所有绝对不可能用多项式时间求解的问题,称为指数型问题。

有这样一类问题,假使你得到了问题的解,我要验证你的解是否正确,我验证所花的时间是多项式,至于求解本身所花的时间是否是多项式我不管,可能有多项式算法,可能没有,也可能是不知道,这类问题称为NP问题。
 
NP概念的奥妙在于,它躲开了求解到底需要多少时间这样的问题,而仅仅只是强调验证需要多少时间,从而为P与NP这一千年难题的产生埋下了伏笔。显然,P肯定是NP,因为你既然能用多项式求解,就肯定能用多项式验证(难不成我再算一遍!),但NP是否是P谁也确定不了。另外,目前已经很明确的指数型问题也肯定不是NP。当然要理解这一点还有点难,看我下面的解释。
 
讲到目前为止,NP的概念还是抽象的,听者恐怕还没有达到透彻掌握的程度。要是我给学生讲课的话,对这样抽象难理解的概念,我会告诉学生用如下方式去透彻的掌握它(呵呵,但愿我不要是那种自己仅停留在背概念的水平,甚至连概念都没有理解透,却要厚脸皮地自吹自己“讲课水平高”的人了,我的逻辑非常简单,我自己曾经用这样的方法高效透彻地掌握了,我让学生按这样的方法去做,他们也能达到高效而透彻):

http://blog.sciencenet.cn/blog-327757-531546.html  此文来自科学网杜立智博客,转载请注明出处

1 0