NP问题

P、NP、NPC、NP-hard问题说明

首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题。

看下面的图,他们之间的关系表示的比较清楚。

  • P Problem:这个应该最易理解,就是一个问题可以在Polynominal的时间的得到解决,当然,是对于任意input size。

  • NP Problem:对于一类问题,我们可能没有一个已知的快速的方法得到问题的答案,但是如果给我们一个candidate answer,我们能够在polynominal的时间内验证这个candidate answer到底是不是我们已知问题的答案,这类问题叫做NP problem。所以很显然 P Problem是NP problem的一个子集。

  • NP-hard Problem:对于这一类问题,用一句话概括他们的特征就是“at least as hard as the hardest problems in NP Problem”, 就是NP-hard问题至少和NP问题一样难。

  • NP-complete Problem:对于这一类问题,他们满足两个性质,一个就是在polynomial时间内可以验证一个candidate answer是不是真正的解,另一个性质就是我们可以把任何一个NP问题在polynomial的时间内把他的input转化,使之成为一个NP-complete问题。

所以对于NP-hard问题,我们可以把他们分成两个部分,一部分可以用polynomial的时间验证一个candidate answer是不是真正的answer,这一部分问题组成了NP-complete集合。

我们经常说的NP=P或者NP!=P,其实就是说目前而言,我们并不知道,是不是对于NP Problem集合里面的所有问题,都能够在Polynomial的时间内解决。当然只里面比较interesting的一点是,如果我们能把NP-complete集合中的任意一个问题在polynomial的时间内解决了,那么所有的NP问题都可以在polynomial的时间内解决。原因,看看上面说的NP-complete的性质就知道了,因为任何一个NP问题都可以在polynomial的时间内把他的input转化,使之成为一个NP-complete问题,所以….

这里写图片描述

NPC问题证明

证明一个问题是NP问题。证明给你一个结果,你能在polynomial的时间内验证他的正确性。

证明一个问题是NP-hard的。对于证明一个问题是NP-hard,我们经常用到的一个technique是归约(reduction),通常用<=这个符号来表示,如P<=Q,这个就表示P is reducible to Q or Q is the reduction from P or P is reduced to Q. P问题可以归约到Q问题。可以把P归约到Q。这里的reduction的符号可以当成是 比较难易程度的小于等于号,意味着问题Q至少和问题P一样难。当我们要证明一个问题是NP-hard的时候,我们通常要做的是找到一个NPC问题(就用这个代替NP-complete问题),把这个NPC问题归约到NP-hard上去,即NPC<=NP-hard。

证明一个问题是NPC的。要证NPC,我们要分两步走,第一步证明这个问题属于NP,就是验证答案(感觉这句话我都说烂了)。第二步,证明这个问题是NP-hard的。当然这里面第二步是问题的关键,但是第一步也一定要在证明里面提到。

如何证明一个问题是NP-hard 是以上证明的关键,即如何归约。
这里我们归约要做的主要步骤就是:
1. 把NPC的input转化到NP-hard的input,即每一个NPC的input,实际上都是一个NP-hard的input。
2. 把NP-hard的output转化到NPC的output上来,说明给我一个NP-hard的output,我就能给你一个NPC的output。
注意:以上的两个转化都要在polynomial的时间内完成。

典型问题

参考资料

http://www.cnblogs.com/Gavin_Liu/archive/2011/05/04/2012284.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值