计算复杂度:P、NP、NP 完备

时间复杂度是算法的特性,而不是问题的特性。因为一个问题可以用两种以上的算法进行解答,且各自的时间复杂度也不相同。计算机理论科学的计算复杂度理论就是属于这一类的学科。

  • P 指的是用计算机能很快求解的问题;
  • NP 指的是我们想找到最优解的问题;

1. 问题的特性

计算复杂度理论研究的是问题的特性

计算复杂度理论是学习各类问题特性的一门学科,先来比较如下两个问题:

  • 排序问题:对给定的 N 个整数进行排序,答案是什么?
  • 子集和(subset sum)的问题:N 个数中挑选几个数,能否使其和为 S

能否直接判断两个问题孰难孰易?此处的“难”并不是指解题的难度(对人而言,而是对计算机而言)。计算复杂性理论中,问题的难度指的是当前问题是存在快速解题算法

通常认为,有快速解题算法的问题计算起来比较容易,反之,计算起来比较难。

快速算法的标准是什么呢?一般把多项式时间算法或比它更快的算法称为“快速算法”。(快速其实是定量的,不只是简单地你说它比其他的快,它就快,最后都要落实到计算机的执行)。

计算复杂度理论中存在着多项式时间算法的问题合称为“P 问题”(Polynomial)。

例如,排序问题有无数个多项式算法,因此排序问题是 P 问题。像 P 问题 这种把具有相同特性的问题聚集到一起的集合就是“计算复杂度类(complexity class)”

计算复杂度类:

  • P 问题(Polynomial Problem),已找到多项式时间的快速算法的问题构成的集合
    • nO(1)
    • NP 问题(Non-Polynomial ),NP 问题是可在多项式时间内验证已确定答案的问题。
      • 问题的解可在多项式时间内得以验证(checked)的问题构成的集合;
    • 所有 P 问题都包含于 NP 问题的集合
    • 证明一个问题能在多项式时间内完成比较容易,但不能解是十分困难的。就像经常谈论的 UFO,要证明它的存在,只需获取一架 UFO 即可,但要证明它的不存在,最笨的方法自然是遍历整个宇宙空间。

      比如子集和(subset sum)的问题,目前尚未发现解出子集和的多项式时间算法,但也不能证明这种算法就不存在。

      2. 所谓难度

      计算复杂度理论使用规约(reduction)方法比较两个问题的难度。约简是把一个问题转换成另一个问题进行解答的方法。假如有一个约简算法能把 B 的输入值适当地变换成 A 的输入值,那么利用解 A 题的最快算法和约简算法就能编写解 B 更难的问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值