关于P问题,NP问题和NPC问题

1、P问题

P是一个判定问题类,这些问题可以用一个确定性的算法在多项式时间内判定或者解出。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题集合。


NP是一个判定问题类,这些问题可以用一个确定的算法在多项式时间内检查或者验证他们的解;P事实上很直观,我们通常在编程中求解的问题大多数都是P类问题。比如说排序,找最短路劲等。


2、NP问题

然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图中的哈密尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。比如说对于哈密尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈密尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。这种可以在多项式时间内验证一个解是否正确的问题称为NP问题。显然,所有的P类问题都是属于NP类问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。NP这个类事实上也很有趣,它并不要求给出一个算法来求解问题本身,而只是要求给出一个确定性算法在多项式时间内验证它的解。


3、NP完全问题

此外注意,NP问题不一定都是难解的问题,比如,简单的数组排序问题是P类问题,但是P属于NP,所以也是NP问题,你能说它很难解么?刚才说了,现在还不知道是否有P=NP或者P<>NP,但是后来人们发现还有一些列的特殊NP问题,这类问题的特殊性质使得很多人相信P<>NP,只不过现在还无法证明。这类特殊的NP问题就是NP完全问题(NPC问题,C代表complete)。NP完全问题都可以在多项式时间内求解,即P=NP成立!!这是因为,每一个NPC问题可以在多项式时间内转化成任何一个NP问题。比如说前面说的哈密尔顿回路问题就是一个NPC问题。NPC问题的历史并不久,COOK在1971年找到了第一个NPC问题,此后人们又陆续发现很多NPC问题,现在可能已经有3000多个了。所以,我们一般认为NPC问题是难解的问题,因为它不太可能存在一个多项式时间的算法(如果存在则所有的NP问题都存在多项式时间算法,这太不可思异了,但是也不是不可能)。类似哈密尔顿回路问题,货郎担问题,集团问题,最先变覆盖问题,等等很多问题都是NPC问题,所以都是难解的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值