NP系列问题详解

NP系列问题详解_第1张图片

​时间复杂度

什么是NP问题?这个是我之前比较纠结的一个问题,一直没有搞清楚它的来龙去脉。直到看了《数学之美》附录中的介绍才清楚。要清楚地了解这个问题,得从怎么衡量计算量这个问题开始。现在基本每个学习计算机相关学科的同学都知道,衡量一个算法的计算量是用时间复杂度。现在看起来理所当然的事情,在计算机科学发展初期却是个大问题,因为没有衡量算法的标准,不同算法无法比较优劣。自从有了时间复杂度后,算法优劣可以很方便地衡量,也就鼓励学者们找出更多更好的算法,好的算法也可以得到最有效的利用。提出时间复杂度的学者也因此获得了诺贝尔奖。

 

P问题

自从用时间复杂度来衡量计算量后,学者们开始对现有的问题分类。有一类问题是能在多项式的时间内找到解的,这类问题学者们就把它叫作多项式问题,即P问题。P是多项式的英文单词polynomial的第一个字母。什么是多项式?我们来看一下维基百科上的定义:多项式是代数学中的基础概念,是由称为不定元的变量和称为系数的常数通过有限次加减法、乘法以及自然数幂次的乘方运算得到的代数表达式。例如X^2 - 3X + 4就是一个多项式。5^X + X 就不是一个多项式,因为有非自然数的幂次的乘方运算(5的X次方)。比如快速排序算法的时间复杂度是N*logN,属于多项式问题。

 

NP问题

现在区分出一类问题属于多项式问题,即P问题,那剩余的其它就是目前还不能在多项式的时间内找到解的问题, 这类问题统称为非多项式问题。非多项式问题需要的计算量非常大, 现有的计算能力不能有效地解决这些问题。于是很多学者就开始研究这些问题, 看能不能在多项式的时间内找到解。随着他们研究深入, 他们发现非多项式问题中有一类问题比较特殊,虽然这类问题还不确定能不能在多项式的时间内找到解,但是这类问题可以在多项式的时间内验证一个解是否正确。即,虽然不能在多项式时间内找到解,但可以在多项式时间内验证一个解是不是正确。这类问题就是NP问题(Non-deterministic Polynomial)。

 

NPC问题

学者们发现NP问题后又继续研究,然后他们发现一类特殊的NP问题。特殊在什么地方呢? 特殊在所有NP问题都可以在多项式时间内归约到它。他们称这类问题为NP-Complete问题,即NPC问题。NPC问题满足两个条件:首先它是NP问题,然后所有NP问题都能在多项式时间内归约到它。也就是说,如果能在多项式时间内找到一个NPC问题的解,也就相当于能在多项式时间内找到所有NP问题的解。从上可知,NPC问题也是NP问题中最难的问题。

 

NP-Hard问题

学者们还发现一类问题,所有NP问题都可以归约到它,但它不一定是NP问题,也就是说它们甚至不能在多项式时间内验证一个解是否正确。学者们把这类比NPC更难的问题,甚至不属于NP问题的这一类问题称为NP-Hard问题。

 

P问题,NP问题,NPC问题以及NP-Hard问题的关系

如下图所示,图的纵坐标是复杂度,越往上,复杂度越高。

NP系列问题详解_第2张图片
 

 

目前来说,P是否等价于NP,即能不能在多项式的时间内找到NP问题的解还没有定论。P是否等价于NP这个问题也是计算机科学界最经典,争论最多的问题之一。虽然目前主流认为P是NP的子集,但因为还没办法完全验证这一点,因此不能盖棺定论。据说清华大学的姚期智老师也在研究和探索P与NP的关系,在该问题的最前沿的研究也是各执一词,有兴趣的同学可以从通过下边链接查看姚期智老师的主页和历史上针对P是否等于NP的研究结论。

 

姚期智老师的主页:http://iiis.tsinghua.edu.cn/yao/

历史上针对P是否等于NP的研究结论:http://www.win.tue.nl/~gwoegi/P-versus-NP.htm

 

了解P,NP, NPC, NP-Hard问题分类的意义

当你思考怎么解决一个问题时发现你思考了很久,挠破了头皮也没想到高效办法的时候,你可以看看你思考的问题是不是属于NP问题。如果是属于NP问题或可以归约到NP问题,那你就应该重新认识这个问题的难度了,因为世界上最聪明的人都还没找到高效解决它的办法,所以你想不出来也就正常了。

 

更多最新文章,请扫描下边二维码,关注公众号:学习者说

NP系列问题详解_第3张图片

 

 

你可能感兴趣的:(NP系列问题详解)