P问题和NP问题

怎么理解 P 问题和 NP 问题?

链接:https://www.zhihu.com/question/24653072/answer/28536702

时间复杂度

还是先用几句话简单说明一下时间复杂度。时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n2)的复杂度。还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(an)的指数级复杂度,甚至O(n!)的阶乘级复杂度。不会存在O(2n2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。同样地,O (n3+n2)的复杂度也就是O(n3)的复杂度。因此,我们会说,一个O(0.01n3)的程序的效率比O(100*n2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n3)的复杂度将远远超过O(n2)。我们也说,O(n100)的复杂度小于O(1.01n)的复杂度。
容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(na)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

P/NP问题是在理论信息学中计算复杂度理论领域里至今未被解决的问题,也是克雷数学研究所七个千禧年大奖难题之一。P/NP问题中包含了复杂度类P与NP的关系。1971年史提芬·古克(Stephen A. Cook)和Leonid Levin相对独立地提出了下面的问题,即复杂度类P和NP是否是恒等的(P=NP?)。

P类问题

P集合:在多项式时间内可以找出解的决策性问题的集合。

所有可以在多项式时间内求解的判定问题构成P类问题。判定问题:判断是否有一种能够解决某一类问题的能行算法的研究课题。

NP类问题

NP集合:在多项式时间内可以验证解是否正确的决策性问题的集合。

所有的非确定性多项式时间可解的判定问题构成NP类问题。非确定性算法:非确定性算法将问题分解成猜测和验证两个阶段。算法的猜测阶段是非确定性的,算法的验证阶段是确定性的,它验证猜测阶段给出解的正确性。

NPC问题

NP中的某些问题的复杂性与整个类的复杂性相关联.这些问题中任何一个如果存在多项式时间的算法,那么所有NP问题都是多项式时间可解的.这些问题被称为NP-完全问题(NPC问题)。

直白地讲
  • P集合:可以很快求解的问题。
  • NP集合:可以很快验证给定答案是否正确的问题。
  • NP-hard集合:至少比任何NP问题一样难的问题。
  • NP-complete集合:同时满足两个条件:(1)该问题是一个NP问题;(2)所有NP问题可以归约为该问题。
关于NP:为什么验证一个答案的正确性这么重要?

因为最开始的时候都是数学家在搞这个,对于数学家来说如果有一个机器能帮助他们证明各种定理那就爽了。数学家经常干的两件事:1. 给出证明 2. 验证某个证明是不是对的。直觉上肯定验证更容易一些,但如果somehow可以证明NP=P,也就是说 验证 和 给出证明 其实在数学上是等价的,那么这个证明很可能给出了如何把 验证一个证明是否正确(NP)转化为 如何给出一个证明(P)的方法,从此以后数学家只要思考如何验证证明的正确性就能自动得到证明了,那不爽炸了。那个时候密码学的重要性只是崭露头角,但即使是在数学上的重要性,也足够让这个定义吸引人了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值