关于P NP NP-hard NP-complete的相关知识

P问题

定义1:一个复杂问题如果能在多项式时间内解决,那么它便被称为P问题,这意味着计算机可以在有限时间内完成计算;

定义2可以在以多项式表达的时间内求出确切解的问题,也就是说它的计算复杂度是一个多项式。我们通常用的O(n),O(logn),On2)等等类似的都是这类问题。

 

NP问题:

定义1np指非确定性多项式时间(nondeterministic polynomial,一个复杂问题不能确定在多项式时间内解决,假如NP问题能找到算法使其在多项式时间内解决,也就是证得了P=NP

定义2英文是non-deterministicpolynomial,是多项式时间可以验证的问题。最初是在非确定图灵机上,如果一个问题存在一个解,那么就先猜它,一定可以在多项式时间内猜到这个解。(关键是就是不判定这个问题到底有没有解)

 

NP-hard问题:

是指从算法角度比NP还难的问题,指的是所有的NP问题可以通过某个多项式时间的函数规约到这类问题。就是说如果L’是NP的,且L'《pL,p是多项式表达式,那么L就是NP-hard问题。NP-hard问题不一定是NP问题,因为总有一些NP-hard问题无法在多项式时间判断一个解是否可行。

 

NP-complete问题:

是NP问题中最难的问题。因为NP也包含P呀,所以NP问题中有的简单,在多项式时间内就可以确定,有的相对难,只能验证。所以要区分对待一下,就把那些最难的挑出来,就是NP-complete问题了。

 

 NP-complete问题是NP-hard问题的一个子集。要证明某个问题是NP-complete问题,可以先证明它是NP的,再证明它是NP-hard

 

NP问题更难的则是NP完全NP-hard,如围棋便是一个NP-hard问题

 

p=NP 目前还没有被证实。也就是还不知道PNP的关系,但是可以确定的是P属于NP

—————————————————————————————————————————————————————————————————————————————————

定义:

为了研究问题的复杂性,我们必须将问题抽象,为了简化问题,我们只考虑一类简单的问题,判定性问题,即提出一个问题,只需要回答yes或者 no的问题。任何一般的最优化问题都可以转化为一系列判定性问题,比如求图中从A到B的最短路径,可以转化成:从A到B是否有长度为1的路径?从A到B是否有长度为2的路径?。。。从A到B是否有长度为k的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。如果一个判定性问题的复杂度是该问题的一个实例的规模n多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度多项式时间的问题的集合。然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图中的哈米尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。比如说对于哈米尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈米尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。这种可以在多项式时间内验证一个解是否正确的问题称为NP问题。显然,所有的P类问题都是属于NP问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。这就是P对NP问题。

 —————————————————————————————————————————————————————————————————————————————

NPC问题:

注意,NP问题不一定都是难解的问题,比如简单的数组排序问题是P类问题,但是P属于NP,所以也是 NP问题,你能说他很难解么?刚才说了,现在还不知道是否有P=NP或者P<>NP,但是后来人们发现还有一系列的特殊NP问题,这类问题的特殊性质使得很多人相信P<>NP,只不过现在还无法证明。这类特殊的NP问题就是NP完全问题(NPC问题,C代表complete)。 NPC问题存在着一个令人惊讶的性质,即如果一个NPC问题存在 多项式时间的算法,则所有的NP问题都可以在多项式时间内求解,即P=NP成立!!这是因为,每一个NPC问题可以在多项式时间内转化成任何一个NP问题。比如前面说的哈米尔顿回路问题就是一个NPC问题。NPC问题的历史并不久,cook在 1971年找到了第一个NPC问题,此后人们又陆续发现很多NPC问题,现在可能已经有3000多个了。所以,我们一般认为NPC问题是难解的问题,因为他不太可能存在一个 多项式时间的算法(如果存在则所有的NP问题都存在多项式时间算法,这太不可思议了,但是也不是不可能)。类似哈米尔顿回路/路径问题, 货郎担问题,集团问题,最小边 覆盖问题(注意和路径覆盖的区别),等等很多问题都是NPC问题,所以都是难解的问题。
要解决P = NP问题,NP完全的概念非常有用。不严格的讲,NP完全问题是NP类中“最难”的问题,也就是说它们是最可能不属于P类的。这是因为任何NP中的问题可以在多项式时间内变换成为任何特定NP完全问题的一个特例。例如, 旅行推销员问题的判定问题版本是NP完全的。所以NP中的任何问题的任何特例可以在 多项式时间内机械地转换成 旅行商问题的一个特例。 所以若 旅行商问题被证明为在P内,则P = NP!旅行商问题是很多这样的NP完全的问题之一。若任何一个NP完全的问题在P内,则可以推出P = NP。不幸的是,很多重要的问题被证明为NP完全,但没有一个有已知快速的算法。 [1]  
 


参考:

1:http://baike.baidu.com/link?url=dQ50BvB-tG82PnoMVPGjvxRJNZjeUNVeKArwFS3U5ZGmKRmZVMkp1l4KBvEZX8jwbrmqGBBnaDKUSEXHCQErNq

2http://blog.sina.com.cn/s/blog_497d70cd0100kduk.html

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值