Skip to content

Lecture 9. The Class NP NP 类 ​

非确定性复杂度 ​

定义:如果一个非确定性图灵机,对于任意长度为 的输入,所有的分支都会在 步骤内停机,那么这个非确定性图灵机(NTM)就是 时间的。简而言之,所有的分支对所有的输入停机。

定义:。

定义:,也就是所有的非确定性单带图灵机在多项式时间内能够判定的 语言 的集合。

对于合理的非确定性计算模型, 是不变的。

NP 问题举例 ​

哈密顿路径问题(NP) ​

"对于输入 :

  1. 设图中一共有 个节点
  2. 非确定性的写下一个长度为 的数列,,代表 个节点
    1. 如果 ,, 互不相等,且 ,就接受
    2. 任意一个检查条件不满足,这个分支就拒绝"

思考: 吗?答案是:不知道。有人认为,之前拒绝的操作换成接受,接受的操作换成拒绝,就可以了,其实不行。因为简单的把非确定性机器的响应翻转,并不能识别原问题的补。

合数问题(NP,也 P) ​

。下面证明 。

" 对于输入 ,

  1. 非确定性的选一个 当中的一个整数
    1. 若 则接受,否则这个分支拒绝"

事实上,有数学家证明过, 也是同时成立的。

NP 与 P 的关系 ​

  • NP:成员资格可以多项式时间内验证(verify)的语言类。比如对于哈密顿路径的存在性问题,我只要随便给出一条哈密顿路就可以;对于是不是合数的问题,我只要随便给出一个因子就可以。
  • P:成员资格可以多项式时间内判定(determine)的语言类。要求更高一点。

通常认为 。

  • ?不知道。有的同时属于 和 了,但所有问题都既 又 吗?
  • ?不知道。因为 太强大了,可能有一个问题暂时没有找到 的解法,只是因为人脑比较笨。相当于可能有一个爆搜算法,明明可以优化,可是人类太笨了,想不出来怎么优化。

回忆一下 NFA 转 DFA,状态数变成了 个,也就是变成了指数级别。所以现在已知的是,。

验证机 verifier ​

定义:语言 的 验证机(verifier) 是一个算法 ,这里 。这里的 是一个额外的信息,称为 证书(certificate)。验证机通过 来验证输入的字符串 是否是 的成员。对于上面哈密顿路和合数问题,证书分别是随便一条哈密顿路和随便一个因子。

多项式时间验证机(polynomial time verifier),在 的多项式时间内运行。若语言 拥有一个多项式时间验证机,那么这个语言就是 多项式可验证的(polynomially verifiable)。对于多项式验证机,证书具有 的多项式长度。

有定理表明: 是具有多项式时间验证机的语言类。

还有定理表明:一个语言是 NP 的,当且仅当他能被某个非确定性多项式时间图灵机判定。

既 NP 又 P 问题举例 ​

1. ​

之前已经证明过 是可判定的。转化为乔姆斯基范式之后,可以证明它是 的。大致思路是,对于输入 ,把 转换成乔姆斯基范式,非确定性的选择(随便猜)一个长度为 的派生过程,看看这个派生过程能否派生出串串 。(回忆一下,之前证明这个语言可判定是枚举了所有的派生过程)。因此,。

2. ​

想不到竟然还是 吧?证明在中文课本 183 页。

最初先设计了一个普通递归(爆搜),但是时间复杂度不对,于是再改成记忆化搜索(动态规划)。

"对于输入 ,

  1. 如果之前已经算出了对于 的值,就直接返回
  2. 对于每个 和每一个变元 ,检查是否存在替换规则 ,把结果存储到 里。相当于代码实现的 dp 数组初始化。
  3. 从 依次枚举子串的长度()
    1. 然后枚举左端点 ,设右端点 ,得到所有长度为 的子串。()
      1. 从 枚举断点 把当前字串 分割成 ()
        1. 对于每一个替换规则 ,若 和 都真,则把 设为真。这一步的时间复杂度仅与 CFG 的规则数有关,是常数。
  4. 最终,设 是起始变元,检查 是否为真。如果是,则接受。否则拒绝。"

这个算法的时间复杂度是 的。所以 。

由于 CFG 和 CFL 等价,所以如果 ,也能推出 。

多项式可归约性 ​

可满足性问题(SAT)satisfiability problem ​

布尔代数的三种符号:(与),(或),(非)。

定义:对于布尔表达式 ,如果可以分配给每个变量一个值使得 ,则称这个 是 可满足(satisfiable) 的。

定义语言 。显然,。因为可以找到一个证书(一组赋值),然后在多项式时间内验证(直接求值)。之后将证明 还是 NP 完全的。

曾有科学家指出,若 ,则可推出 。因为所有的 NP 问题都可以多项式时间归约到 ,就像所有的图灵可识别语言都可以映射规约到 一样。所以一旦证明了 ,就可以利用归约的性质,推出 。然而到目前为止,既不知道 还是 。更确切的说, 当且仅当 。

多项式可归约性 ​

定义:若 ,且这个可计算归约函数可以在多项式时间内完成计算,那么 就是 多项式可归约(polynomial time reducible) 到 的,记作 。

定理:若 且 则可推出 。如图, 是多项式时间内可计算的函数:

image-20221121111405777