码迷,mamicode.com
首页 > 其他好文 > 详细

P、NP、NP-hard、NPC问题

时间:2017-12-14 04:13:51      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:传递   输入   转化   证明   blog   应用   逻辑   快速   class   

P问题:一个问题可以在多项式的时间得到解决。P为英文polynominal的首字母。多项式时间的时间复杂度例如O(n)、O(n^2)等等。

NP问题:NP问题可能没有一个已知的快速解决方案。但如果能够在多项式的时间内验证一个解是否正确,则称此问题为NP问题。例如根据数据画好了一个图。求解能否找到权重和小于100的生成树。这个问题可以在多项式的时间内得到验证。假设你运气好,随手一画就得到了小于100的生成树,验证的方法只需要将生成树的所有树边权重相加。时间复杂度为O(V)。V代表树的结点树,生成树的边数为|V|-1。

提到NPC问题之前需要了解的概念是规约。例如一个问题A可以约化为问题B的含义是,可以用问题B的解法来解决问题A。或者说A可以转化为B。例如求一元一次方程可以规约到求一元二次方程。将一元二次方程的二次项系数变为0。这样两个问题就等价了。通过实例也可看出问题B不比问题A简单,即问题B的时间复杂度高于或者等于A。规约是具有传递性的。A规约成B,B规约成C,则A能够规约成C。

通过不断地规约,我们能得到复杂度更高但是应用范围更广的算法来代替复杂度虽低但是应用范围小的一类问题的算法。根据传递性,最终可以得到一个复杂度最高,并且可以解决所有NP问题的NP问题。这就是NPC问题,即NP完全问题。NPC不止一个,而是一系列问题。

证明一个问题是NPC问题的步骤:1.首先要证明此问题是一个NP问题。2.证明一个已知的NPC问题能够规约到此问题。已知的NPC问题,给定一个逻辑电路,是否存在一种输入使得输出为True。所有的NP问题都可以规约到逻辑电路问题。直观地解释是计算机中所有的程序最终都转化成01组成的机器语言执行。

另外一个比较神奇的问题是,因为NPC问题是NP问题不断规约而来的,所以如果能证明一个NPC问题可以在多项式时间内解决。那么所有的NP问题都能在多项式时间内解决。即NP=P。遗憾的是此题目前无解。

NP-hard问题:NP-hard问题满足NPC问题定义中的第二条。但是不一定满足第一条。即NP-hard的范围比NPC范围更广。

P、NP、NP-hard、NPC问题

标签:传递   输入   转化   证明   blog   应用   逻辑   快速   class   

原文地址:http://www.cnblogs.com/qlbaird/p/8034913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!