NP理论

NP理论

对于一个问题,如果解决它的算法的的时间复杂度为多项式级别,如 O ( n ) O(n) O(n) O ( log ⁡ ( n ) ) O(\log(n)) O(log(n)) O ( n a ) O(n^{a}) O(na) O ( a ⋅ n ) O(a\cdot n) O(an),其中 n n n为数据规模,就称这个问题为P问题,显然,如 O ( a n ) O(a^{n}) O(an) O ( n ! ) O(n!) O(n!)这类是非多项式的,它的复杂度往往令计算机难以承受;如果一个问题能在多项式时间内被验证,则这个问题称为NP问题,显然,验证一个问题比找到一个问题的解法容易得多。

例如Hamilton回路,显然能在多项式时间内验证得出来的路径是否经过每个顶点,但不能验证“一个图不存在Hamilton”,这需要证明所有的路径都不是Hamilton回路,显然不能再多项式时间内验证,这类问题称为不可解问题(Undecidable Decision Program)

之所以要定义NP问题,是因为不可能指望在多项式时间内连验证都做不到的问题存在一个在多项式时间内的解法。很显然,P问题都是NP问题,那么P意外的NP问题,会不会总有一天,会发现一种新的算法,将NP问题再多项式时间内解决,即究竟是否有 P = N P P=NP P=NP?通常所谓的“NP问题”,就是“证明或推翻 P = N P P=NP P=NP”,这是NP问题的本质。

归约(Reducibility):问题A可以归约成问题B的含义是,问题A向更复杂的问题B归约,B如果能被解决,那么A也可以用B的解法去解决。如Hamilton问题可以约化为旅行商(TSP)问题。显然,归约具有传递性,即如果B能被归约到问题C,那么问题A也可以归约到问题C,它们的时间复杂度是递增的。

可想而知,证明NP=P的路途是艰难的,因为NP问题实在太多了,要一一找到多项式算法。这时Stephen A. Cook这位大牛出现了,写了一篇The Complexity of Theorem Proving Procedures,提出了一个NP-complete的概念。NP-complete问题指的是NP问题中最难的一部分问题,所有的NP问题都能在多项式时间内归约到NPC上。显然,如果有任何一道NPC问题在多项式时间内解决了,那么所有的NP问题就都成了P类问题,NP=P就得到证明了,这极大的简化了证明过程。

那么怎样证明一个问题C是NPC问题呢?首先,要证明C是NP问题,也就是C的解的正确性容易验证;然后要证明有一个NPC问题B,能够在多项式时间内归约到C。这就要求必须先存在至少一个NPC问题。这时Cook大牛就在1971年证明了NP完全问题的祖先就是SAT。Cook证明了SAT是一个NPC问题,如果SAT容易解决,那么所有NP都容易解决。Cook是怎样做到的呢?

SAT(Boolean Satisfiability Problem)问题是指给定一个包含n个布尔变量的方程式,问是否存在一个取值组合,使得该式被满足。

他通过非确定性图灵机做到的。非确定性图灵机是一类特殊的图灵机,这种机器很会猜,只要问题有一个解,它就能够在多项式时间内猜到。Cook证明了,SAT总结了该机器在计算过程中必须满足的所有约束条件,任何一个NP问题在这种机器上的计算过程,都可以描述成一个SAT问题。所以,如果你能有一个解决SAT的好算法,你就能够解决非确定性图灵机的计算问题,因为NP问题在非图机上都是多项式解决的,所以你解决了SAT,就能解决所有NP,因此——SAT是一个NP完全问题。感谢Cook,我们已经有了一个NPC问题,剩下的就好办了,用归约来证明就可以了。目前人们已经发现了成千上万的NPC问题,解决一个,NP=P就得证,可以得千年大奖(我认为还能立刻获得图灵奖)。

有一些在多项式时间内不能被验证的问题,就算是NP=P,都不一定能多项式解决,被命名为NP-hard问题。NP-hard太难了,怎样找到一个完美的女朋友就是NP-hard问题。一个NP-hard问题,可以被一个NPC问题归约到,也就是说,如果有一个NP-hard得到解决,那么所有NP也就都得到解决了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值