HITSY 版 (精华区)
发信人: lrping (不谈恋爱), 信区: HITSY
标 题: NP问题和NPC问题
发信站: 哈工大紫丁香 (2003年10月19日12:50:08 星期天), 站内信件
什么叫做NP问题,什么叫做NPC问题?
首先说明一下问题的复杂性和算法的复杂性的区别,下面只考虑时间复杂性。算法的复杂
性是指解决问题的一个具体的算法的执行时
间,这是算法的性质;问题的复杂性是指这个问题本身的复杂程度,是问题的性质。比如
对于排序问题,如果我们只能通过元素间的相互比较
来确定元素间的相互位置,而没有其他的附加可用信息,则排序问题的复杂性是O(nlgn),
但是排序算法有很多,冒泡法是O(n^2),快速排序平
均情况下是O(nlgn)等等,排序问题的复杂性是指在所有的解决该问题的算法中最好算法的
复杂性。问题的复杂性不可能通过枚举各种可能算法
来得到,一般都是预先估计一个值,然后从理论上证明。
为了研究问题的复杂性,我们必须将问题抽象,为了简化问题,我们只考虑一类简单的问
题,判定性问题,即提出一个问题,只需要
回答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?这个问题至今还
未解决。注意,NP问题不一定都是难解的问题,比如
简单的数组排序问题是P类问题,但是P属于NP,所以也是NP问题,你能说他很难解么?
刚才说了,现在还不知道是否有P=NP或者P<>NP,但是后来人们发现还有一系列的特殊NP问
题,这类问题的特殊性质使得很多人相信P<>NP,只
不过现在还无法证明。这类特殊的NP问题就是NP完全问题(NPC问题,C代表complete)。N
PC问题存在着一个令人惊讶的性质,即如果一个NPC
问题存在多项式时间的算法,则所有的NP问题都可以在多项式时间内求解,即P=NP成立!
!这是因为,每一个NPC问题可以在多项式时间内转化
成任何一个NP问题。比如前面说的哈米尔顿回路问题就是一个NPC问题。NPC问题的历史并
不久,cook在1971年找到了第一个NPC问题,此后人们
又陆续发现很多NPC问题,现在可能已经有3000多个了。所以,我们一般认为NPC问题是难
解的问题,因为他不太可能存在一个多项式时间的算
法(如果存在则所有的NP问题都存在多项式时间算法,这太不可思议了,但是也不是不可
能)。
类似哈米尔顿回路/路径问题,货郎担问题,集团问题,最小边覆盖问题(注意和路径覆盖
的区别),等等很多问题都是NPC问题,所以都是难解的问题
--
走过这么长的路,才发现爱情是如此的美丽
走过这么长的路,才发现爱情是如此的伤心
虽然从此以后,我不会再对你说 我爱你
你给我的那段时光,我真的要对你说
--- 谢谢你
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.226.228]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.138毫秒