P,NP,NPC,NP-hard问题的概念

看博客和文章时经常看到这些概念,但是分不清楚,先记一些笔记,以后慢慢添加。

某大神的解读:什么是P问题、NP问题和NPC问题,值得一看

P即Polynomial的首字母,多项式的意思。讨论的是算法复杂度。


简单理解这几个概念:

P问题(Polynomial Problem): 能在多项式时间内解决的问题

NP问题(Non-deterministic Polynomial Problem): 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题

NPC问题(Non-deterministic Polynomial Complete Problem): NP完全问题,所有NPC问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决。

NP hard问题: NP难问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的问题(不一定是NP问题)。

关系如下:



1、P问题
P是一个判定问题类,这些问题可以用一个确定性算法在多项式时间内判定或解出。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。P事实上很直观,我们通常在编程中求解的问题大多都是P类问题.比如说排序,找最短路径等.
2、NP问题
NP是一个判定问题类,这些问题可以用一个确定算法在多项式时间内检查或验证出它们的解;然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图中的哈米尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。比如说对于哈米尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈米尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。这种可以在多项式时间内验证一个解是否正确的问题称为NP问题。显然,所有的P类问题都是属于NP问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。NP这个类事实上也很有趣,它并不要求给出一个算法来求解问题本身,而只是要求给出一个确定性算法在多项式时间内验证它的解.
3、NP完全问题
NP问题不一定都是难解的问题,比如,简单的数组排序问题是P类问题,但是P属于NP,所以也是NP问题,你能说他很难解么?刚才说了,现在还不知道是否有P=NP或者P<>NP,但是后来人们发现还有一系列的特殊NP问题,这类问题的特殊性质使得很多人相信P<>NP,只不过现在还无法证明。这类特殊的NP问题就是NP完全问题。
NP完全问题是求NP中判定问题的一个子类。NPC问题存在着一个令人惊讶的性质,即如果一个NPC问题存在多项式时间的算法,则所有的NP问题都可以在多项式时间内求解,即P=NP成立!!这是因为,每一个NPC问题可以在多项式时间内转化成任何一个NP问题。比如前面说的哈米尔顿回路问题就是一个NPC问题。NPC问题的历史并不久,cook在1971年找到了第一个NPC问题,此后人们又陆续发现很多NPC问题。所以,我们一般认为NPC问题是难解的问题,因为他不太可能存在一个多项式时间的算法(如果存在则所有的NP问题都存在多项式时间算法,这太不可思议了,但是也不是不可能)。类似哈米尔顿回路/路径问题,货郎担问题,集团问题,最小边覆盖问题(注意和路径覆盖的区别),等等很多问题都是NPC问题,所以都是难解的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
P、NPNPC、NP-hard和多项式归约是计算复杂度理论中的重要概念。 P问题指的是可以在多项式时间内解决的问题,也就是说,存在一个多项式时间的算法可以在合理的时间内解决该问题NP问题指的是可以在多项式时间内验证解的正确性的问题。也就是说,如果已经给出了一个解,我们可以在多项式时间内验证它是否是正确的。但是,目前并没有已知的多项式时间算法可以解决所有的NP问题NPC问题指的是NP问题中最难的一类问题,即NP完全问题。如果一个问题NP完全问题,那么它是NP问题的一种,并且所有的NP问题都可以归约到该问题。也就是说,如果我们能够在多项式时间内解决一个NPC问题,那么我们也可以在多项式时间内解决所有的NP问题NP-hard问题指的是至少和NPC问题一样难的问题,但不一定是NP问题。也就是说,NP-hard问题可能是更加困难的问题,但是它们至少和NPC问题一样难。 多项式归约是指将一个问题转化为另一个问题,使得解决原问题的算法可以用来解决目标问题。如果一个问题可以在多项式时间内归约为另一个问题,那么我们称它是多项式归约的。 P=NP和P≠NP是计算复杂度理论中的两个重要假设。P=NP的意思是,所有的NP问题都可以在多项式时间内解决。P≠NP的意思是,存在一些NP问题是不能在多项式时间内解决的。目前,这两个假设没有被证明或者证伪,它们仍然是计算复杂度理论中的重要问题

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值