[计算理论基础] 时间复杂性

计算理论基础课程总结

Posted by Nicodechal on 2018-01-10

函数的阶

大 O 阶:设 ffgg 是函数、如果存在某个 ccn0n_0,对于任意 nn0n\geq n_0f(n)cg(n)f(n)\leq cg(n),则有 f(n)=O(g(n))f(n)=O(g(n))

小 o 阶limninff(n)g(n)=0\lim_{n\to \inf}\frac{f(n)}{g(n)}=0 时有 f(n)=o(g(n))f(n)=o(g(n))

时间复杂性:图灵机 M 在长度为 n 的输入上运行的步数。

计算复杂性类TIME(t(n))={LTIME(t(n))=\{L| 某个 O(t(n))O(t(n)) 时间的单带 DTM 判定语言L}L\}

定理8.8:设函数 t(n)nt(n)\geq n,则每个 t(n)t(n) 时间多带 TM 都与某个 O(t2(n))O(t^2(n)) 时间单带 TM 等价。

定理8.10:设函数 t(n)nt(n)\geq n,则每个 t(n)t(n) 时间单带 NTM 都与某个 2O(t(n))2^{O(t(n))} 时间单带 TM 等价。

P 类

定义P=kTIME(nk)={LP=\bigcup_k TIME(n^k)=\{L|某个多项式时间单带 DTM 判定语言 L}L\}


路径问题PATH={<G,s,t>PATH=\{<G,s,t>|有向图 G 有从 s 到 t 的有向路径}\}
定理8.12PATHPPATH \in P


互素问题RELPRIME={<x,y>RELPRIME=\{<x,y>|x y 互素}\}
定理8.13RELPRIMEPRELPRIME \in P


定理8.14:若 L 是 CFL,则 LPL\in P

NP 类

哈密尔路径问题HAMPATH={<G,s,t>HAMPATH=\{<G,s,t>|有向图 G 包含从 s 到 t 的哈密尔路径}\}
搜索规约判定:搜索问题可以规约为判定问题。


验证机:语言 A={wA = \{w | 某个字符串 c,算法 V 接受 <w,c>}<w, c>\},V 是 A 的验证机,c 是 w 是 A 成员的资格证书。
多项式时间验证机c|c|w|w| 的多项式,w|w| 在多项式时间内运行。
如果 A 有多项式时间验证机,则 A 是多项式时间可验证的。


定义NP={LNP=\{L 有多项式时间验证机 }\}


定理8.17NP={LNP=\{L 某个多项式时间 NTM 判定语言 }\}
思路:验证机和多项式时间 NTM 可以互相模拟。
证明

  1. \Rightarrow 在每个分支上使用验证机验证
  2. \Leftarrow<w,c><w, c> 中的 c 作为非确定图灵机的一个分支并进行模拟,根据结果进行接受或拒绝。

定义8.18NP=kNTIME(nk)={LNP=\bigcup_k NTIME(n^k)=\{L|某个多项式时间单带 NTM 判定语言L}L\}


团问题CLIQUE={<G,k>CLIQUE=\{<G,k>|无向图 G 有 k-团}\}
定理8.20CLIQUENPCLIQUE\in NP
思路

  • 验证机:c 为一个团,对其进行验证。
  • 判定机:非确定地选择 k 个顶点进行验证。

子集和问题SUBSETSUM={<S,t>SUBSET-SUM=\{<S,t>| S 中挑出子集和为 t}\}
定理8.21SUBSETSUMNPSUBSET-SUM\in NP
思路

  • 验证机:c 为取出的集合中的子集
  • 判定机:非确定的选择子集 c,检查和是否为 t

coNP

coNPcoNP: NP 中的语言的补语言,PNPcoNPP\subseteq NP\cap coNP

P 与 NP 问题

PNPEXP=kTIME(2nk)P \subseteq NP \subseteq EXP = \bigcup_k TIME(2^{n^k})
PEXPP \neq EXP