计算理论导论(3):时间复杂性
时间复杂性
复杂性类
复杂性类:可以由一定量的计算资源计算的语言构成的集合。
定义时间函数 \(T : \mathbb{N} \to \mathbb{N}\) 任意函数,定义 \(DTIME(T(n))\) 为可以被某些图灵机在 \(O(T(n))\) 时间内解决的问题(判定的语言集合)。
多项式时间复杂性类 \(P = \bigcup_{c \geq 0} DTIME(n^c)\)。
- 考虑两个时间可构造函数 \(f, g\),若 \(f(n) = o(g(n))\),则 \(DTIME(f(n)) \subsetneq DTIME(g(n))\)。
考虑构造图灵机 \(M\):对于任意输入 \(x\),取 \(x\) 对应的图灵机 \(M_x\),在 \(O(g(n))\) 时间内模拟 \(M_x(x)\),如果结果是 1 输出 0,否则输出 1。那么显然 \(L(M) \in DTIME(g(n))\)。如果
\(L(M) \in DTIME(f(n))\),那么存在图灵机 \(M_{\alpha}\) 在时间 \(O(f(n))\) 内判定 \(L(M)\)。因为 \(f(n)=o(g(n))\),所以 \(M_{\alpha}(\alpha)=M(\alpha)\),因为 \(M_{\alpha}\) 运行时间不超过 \(f(n)\) 所以显然也不超过 \(g(n)\) 可以运行出来,所以可以算出来 \(M({\alpha})=1-M_{\alpha}(\alpha)\),矛盾。
多项式时间可验证复杂性类 \(NP\),一个语言 \(L\) 属于 \(NP\) 当存在多项式函数 \(P : \mathbb{N} \to \mathbb{N}\) 和一个多项式时间图灵机 \(M\) 满足对于任意 \(x \in \{0, 1\}^*\),\(x \in L\) 当且仅当 \(\exists u \in \{0, 1\}^{P(|x|)}\) 满足 \(M(x, u) = 1\)。
此时也称 \(M\) 是 \(L\) 的验证机(verifier),\(u\) 被称作 \(x\) 的验证或证书(certificate)。
NP 问题说白了,就是很给出一个例子容易验证的,比如独立集、旅行商之类的。
定义 \(EXP = \bigcup_{c \geq 0} DTIME(2^{n^c})\),则有 \(P \subseteq NP \subseteq EXP\)。已经有证明 \(P \subsetneq EXP\)。
非确定性图灵机
NP 的最初定义是由非确定性图灵机(non-deterministic Turing machine/NDTM)引入的,NDTM 和 TM 的区别在于对于每个格局有多种可能的转移,只要存在一个分支接受一个输入即认为接受,只有所有分支都不接受即认为不接受。
同样类似地,我们可以定义在所有可能输入的所有分支都会停机的 NDTM 为判定机(decider),对于一个函数 \(T : \mathbb{N} \to \mathbb{N}\),称一个 NDTM 运行时间为 \(T(n)\) 如果对于任意长度为 \(n\) 的输入,其所有分支都在 \(T(n)\) 步骤内停机。
同样地,对于 \(T : \mathbb{N} \to \mathbb{N}\),\(NTIME(T(n))\) 为可以被某些非确定性图灵机在 \(O(T(n))\) 时间内解决的问题(判定的语言集合)。则有 \(NP = \bigcup_{c \geq 0} NTIME(n^c)\)。
- 两种 NP 的定义等价性:
验证机到 NDTM 只需要考虑 NDTM 可以 \(2^{P(|x|)}\) 猜测一个证书即可,后者到前者只需要把证书取做在 NDTM 上的选择即可。
P 和 NP
两者关系只需要考虑 NP 中最难的那一类问题,使用归约的思想来定义难度。不过这里考虑的是时间复杂性,所以我们需要对归约过程做一点修改,就是在研究两种复杂性类的时候,归约过程不应该比其中更容易的复杂性类更复杂。在比较 P 和 NP 过程中,归约过程应该只考虑多项式时间归约(Polynomial Time Reduction)。
多项式时间归约
称 A 可以多项式时间归约到 B,写作 \(A \leq_p B\) 当存在一个多项式时间可计算函数 \(f : \Sigma^* \to \Sigma^*\) 满足 \(\forall w, w \in A \iff f(w) \in B\)。
容易验证:
- 如果 \(A{\leq }_PB,B\in P\),则 \(A\in P\)。
- 如果 \(A{\leq }_PB,B\leq_P C\),则 \(A{\leq}_PC\)。
NP-hard 和 NP-complete
语言 \(L\) 被称作是 \(NP-hard\) 当且仅当 \(\forall A \in NP, A \leq_p L\)。
语言 \(L\) 被称作是 \(NP-complete\) 当且仅当 \(L\) 是 \(NP-hard\) 且 \(L \in NP\)。
由此我们可以得出,对于 \(NP-complete\) 中的任意语言 \(L\),\(L \in P\) 等价于 \(P = NP\)。由此我们只需要研究 \(NP-complete\) 的那些语言。
布尔表达式 和 SAT
变量 \(u_1, u_2, \dots, u_n\) 的布尔表达式 \(\varphi\) 由这些变量和三个逻辑运算符 \(\land, \lor, \neg\) 组成,\(\neg u\) 也可用 \(\overline{u}\) 表示。\(\varphi\) 也可以被视作一个布尔函数 \(\{0, 1\}^n \to \{0, 1\}\)。
析取(Disjunctive)类似或,析取子句(Disjunctive clause)是仅由或运算符/析取操作连接起来的文字组成的布尔表达式。
合取(Conjunctive)类似与,合取子句(Conjunctive clause)是仅由与运算符/合取操作连接起来的文字组成的布尔表达式。
\(\varphi\) 是合取范式(CNF/Conjunctive Normal Form)当它是由若干析取语句的合取操作组成,形如 \(\land_i (\lor_j v_{i,j})\)。同样有析取范式(DNF/Disjunctive Normal Form)由若干合取语句的析取操作组成。这两个都是命题公式(propositional formula)的标准形式。
\(k\) CNF 指每个语句只有最多 \(k\) 个文字。
- Cook-Levin Theorem:定义语言 \(\text{SAT}\) 由所有可满足的 CNF 语句组成;语言 \(\text{3SAT}\) 由所有可满足的 3CNF 语句组成。则二者都是 \(\text{NP-complete}\) 的。
\(\text{SAT}\in \text{NP-compete}\):\(\text{SAT} \in \text{NP}\) 显然,给定赋值即可在多项式时间内验证。为证 \(\text{NP-hard}\),任取 \(L \in \text{NP}\),存在 NDTM 可以判定 L,那么可以把这个 NDTM 的转移用 CNF 描述出来,且显然规模是多项式级别的,因此是 NP-complete。
\(\text{SAT} \leq_p \text{3SAT}\):\((l_1 \lor l_2 \lor \dots \lor l_k)\) 变成 \((l_1 \lor l_2 \lor x_1) \land (\neg x_1 \lor l_3 \lor x_2) \land (\neg x_2 \lor l_4 \lor x_3) \land \dots \land (\neg x_{k-3} \lor l_{k-1} \lor l_k)\) 即可,其中 \(x_1, \dots, x_{k-3}\) 是新变量。
因此 \(3SAT\) 是 \(NP-complete\)。
独立集 (Independent Set)
\(\text{INDSET}\) :判断图 \(G\) 是否有大小为 \(k\) 的独立集,则 \(\text{INDSET} \in \text{NP-complete}\)。
\(\text{INDSET} \in \text{NP}\):验证为点集。
\(\text{3SAT} \leq_p \text{INDSET}\):考虑 3SAT 中的每一个子句,共有 \(2^3 - 1\) 种合法的状态,而且只有其中一个状态能够存在,于是连一个大小为 7 的团,而对于团外的任意两个状态,如果矛盾则连一条边,然后看是否有子句数量那么多的独立集即可。
点覆盖 (Vertex Cover)
\(\text{Vertex-Cover}\) 判断图 \(G\) 是否有大小为 \(k\) 的点覆盖,则 \(\text{Vertex-Cover} \in \text{NP-complete}\)。
\(\text{Vertex-Cover} \in \text{NP}\):验证为点集。
\(\text{INDSET} \leq_p \text{Vertex-Cover}\):有大小为 \(k\) 的点覆盖,取反得到大小为 \(n - k\) 的独立集。
0/1整数规划 (0/1 Integer Programming)
\(\text{IPROG}\) 给定 \(m\) 个有理系数的线性约束,判断是否有合法的给每个变量赋 \(\{0, 1\}\) 满足每个约束的方法,则 \(\text{IPROG} \in \text{NP-complete}\)。
\(\text{IPROG} \in \text{NP}\):验证为一种合法赋值。
\(\text{SAT} \leq_p \text{IPROG}\):析取子句每个文字和大于等于 1 即可。
哈密顿路径 (Hamiltonian Path)
\(\text{dHAMPATH}\) 判断有向图是否有哈密顿路径,则 \(\text{dHAMPATH} \in \text{NP-complete}\)。
\(\text{dHAMPATH} \in \text{NP}\):验证是路径顺序。
\(\text{SAT} \leq_p \text{dHAMPATH}\):对于任意的 \(n\) 个变量 \(m\) 个子句的 SAT,每个变量构造 \(2m + 2\) 个点按顺序排列,相邻点连双向边,经过这些点时使用从左到右表示该变量取 1,从右到左表示该变量取 0。然后额外有开始点和结束点,接着我们按任意顺序确定每个变量的取值,也即将前一个变量的两个端点都连到下一个变量的两个端点,开始点和结束点同样如此操作,接着对于每个限制构造一个点,如果限制 \(j\) 包含了 \(u_i\),那么将第 \(i\) 个变量的第 \(2j\) 个点连到限制 \(j\) 的点再连到第 \(i\) 个变量的第 \(2j + 1\) 个点,而如果包含 \(\neg u_i\) 则反着来。不妨认为这里的第 \(2j\) 个点和第 \(2j + 1\) 个点互为匹配点。
首先如果存在合法赋值那么如此按照顺序即可。
如果构造的图存在哈密顿回路,那么我们可以证明其必然是按照顺序的,如果有通过限制构造的点跳跃的情况那么其匹配点只和一个额外点连接,就必须是结束点,矛盾,所以按照的顺序依次给每个变量赋值即可。
同样有 \(\text{dHAMCYCLE}\) 哈密顿环 (Hamiltonian Cycle),哈密顿路径很容易归约到哈密顿环(添加一个超级点连向所有点且被所有点连),所以也是 \(\text{NP-complete}\)。
而无向图的情况容易变为有向图。
旅行商问题 (TSP/Traveling Salesman) 是否有长度小于等于 \(k\) 的经过所有点的方案,显然可以由哈密顿路径归约。
coNP
语言 \(L \in \text{coNP}\) 当 \(\overline{L} \in \text{NP}\),有 \(P \subseteq \text{NP} \cap \text{coNP}\)。
另一种定义方式:语言 \(L \in \text{coNP}\) 当存在多项式函数 \(P : \mathbb{N} \to \mathbb{N}\) 和多项式时间图灵机 \(M\) 满足对于任意 \(x \in \{0,1\}^*\),有 \(x \in L\) 当且仅当 \(\forall u \in \{0,1\}^{P(|x|)}\) 有 \(M(x,u) = 0\)。
类似的,我们有 \(\text{coNP-complete}\),且 \(\overline{\text{SAT}} \in \text{coNP-complete}\)。
NEXP
有 \(P \subseteq \text{NP} \subseteq \text{EXP} \subseteq \text{NEXP}\)。
如果 \(P = \text{NP}\),我们可以推出 \(\text{EXP} = \text{NEXP}\)。
练习题
- 假设 \(L_1, L_2 \in NP\)。那么是否有 \(L_1 \cup L_2 \in NP\)?\(L_1 \cap L_2\) 呢?
Answer.
设 \(L_1,L_2\) 对应的 verifier 分别是 \(M_1,M_2\)。
- 如果 \(x\in L_1\),则存在 proof \(u_1\), \(M_1\) 接受 \((x,u_1)\)。
- 如果 \(x\in L_2\),则存在 proof \(u_2\), \(M_2\) 接受 \((x,u_2)\)。
(1)
构造一个图灵机 \(M\),对于输入 \(x\) 以及 proof,我们可以把 proof 写成 \((w,u)\) 的形式,其中 \(w=0\) 或 \(1\):
- 如果 \(w=0\) 则在 \(M_1\) 上验证 \((x,u)\)。
- 如果 \(w=1\) 则在 \(M_2\) 上验证 \((x,u)\)。
这样的话如果 \(x\in L_1\),则 \(M\) 接受 \((0,u_1)\);如果 \(x\in L_2\),则\(M\) 接受 \((1,u_2)\)。
而如果 \(x\notin L_1\cup L_2\) 的话对任意的 \(u\) 都不会合法,因此 \(L_1\cup L_2\in NP\)。
(2)
构造一个图灵机 \(M\),对于输入 \(x\) 以及 proof,我们可以把 proof 写成 \((u_1,\)#\(,u_2)\) 的形式,其中 \(-1\) 是一个分隔符。
\(M\) 先在 \(M_1\) 上模拟 \((x,u_1)\) 再在 \(M_2\) 上模拟 \((x,u_2)\) 即可。
正确性是显然的,因此 \(L_1\cap L_2\in NP\)。
-
设 \(\phi\) 是一个 3CNF。\(\phi\) 的变量上的一个 \(\neq\)-赋值是指每个子句中都有两个文字具有不相等的真值。换言之,一个 \(\neq\)-赋值满足 \(\phi\),但不在任何子句中赋三个真文字。
-
证明:\(\phi\) 的任意 \(\neq\)-赋值的否定仍然是 \(\neq\)-赋值。
-
设 \(\neq\)-SAT 为所有存在 \(\neq\)-赋值的 3CNF 的集合。
证明:通过将每个子句
\(c_i = (y_1 \lor y_2 \lor y_3)\)
替换为两个子句 \((y_1 \lor y_2 \lor z_i) \quad \text{和} \quad (\bar{z}_i \lor y_3 \lor b),\)其中 \(z_i\) 是每个子句 \(c_i\) 对应的新变量,\(b\) 是一个额外的新变量,我们可以得到从 3SAT 到 \(\neq\)-SAT 的多项式时间归约。
-
得出结论:\(\neq\)-SAT 是 NP-complete 的。
Answer.
(1)对于 \(\phi\) 的一个赋值是 \(\neq\)-assignment 当且仅当每个 clause 里至少有一个 \(true\) 和一个 \(false\),则取反之后显然还是至少有一个 \(true\) 和一个 \(false\),还是 \(\neq\)-assignment。
(2)
对于多项式规约 \(f\):把每个 clause \((y_1\vee y_2\vee y_3)\) 拆成两个 clause \((y_1\vee y_2\vee z_i)\wedge (y_3\vee \overline{z_i}\vee b)\)。
这样,假如 \(\phi\in 3SAT\),则存在一种合法赋值。
- \(b=0\)。
- 如果 \(y_1=y_2=0,y_3=1\),则取 \(z_i=1\) 即可。
- 否则 \(y_1,y_2\) 中至少有一个 \(1\),取 \(z_i=0\) 即可。
因此 $\phi\in \(#\)SAT$。
反之,如果 $\phi\in \(#\)SAT$,则存在一组合法赋值方案:
- 如果 \(b=1\),由 (1) 知可以把所有变量取反得到 \(b=0\) 的合法赋值。
- 所以 \(b=0\)
- 如果 \(z=0\),则 \(y_1,y_2\) 至少有一个 \(1\),合法。
- 如果 \(z=1\),则 \(y_3=1\),合法。
因此规约成立。
(3)
对于给定的一组赋值只需要判定即可,因此 #SAT 是 \(NP\) 的。
因为 3SAT 是 NP-complete 的,3SAT \(\leq_p\) #SAT,所以 \(\forall A\in NP\),\(A\leq_p\) 3SAT \(\leq _p\) #SAT,所以 #SAT 是 NP-complete 的。
- 设 \(A \subseteq \{1\}^*\) 是一个一元语言。证明:若 \(A\) 是 NP-complete 的,则 \(P = NP\)。
Answer.
如果 \(A\) 是 NP-complete 的,则 SAT \(\leq_p\) A。
则存在多项式复杂度规约函数 \(f\):
$\phi\in $ SAT \(\Leftrightarrow f(\phi)\in A\),因为 \(f(\phi)\) 的输出形如 \(1^k\),而 \(f\) 是多项式复杂度内停机的,因此 \(k=O(p(|\varphi|))\)。
我们可以用如下搜索算法求解一组 \(\phi\):
- 逐个考虑每个变量取值,每个变量有 \(0,1\) 两种值,因此理论上前 \(i\) 个变量可以生成 \(2^i\) 个新的 CNF,但是因为如果两个 CNF \(\phi_1,\phi_2\) 满足 \(f(\phi_1)=f(\phi_2)\) 则这两个 CNF 是等价的,因此只需要保留不同的 \(f\) 种类数个 CNF,而不同的 \(f\) 的种类数是 \(O(p(|\phi|))\) 的,因此每一步都只需要保留多项式个 CNF,故可以在多项式复杂度内判定 SAT。
因此 P=NP。
-
(a) 对于固定整数 \(k \geq 3\),证明以下语言是 NP-complete 的:
\[\text{EXACT-}k\text{SAT} = \{ \langle \phi \rangle \mid \phi \text{ 是可满足的 CNF,且每个子句恰好有 } k \text{ 个文字} \} \](b)对于固定整数 \(k \geq 1\),证明以下语言是 NP-complete 的:
\(k\text{MANY-SAT} = \{ \langle \phi \rangle \mid \phi \text{ 的满足赋值数量 } \geq k \}\)
Answer.
(a)
显然 EXACT-kSAT \(\in\) NP,下面证明 3SAT \(\leq_p\) EXACT-kSAT:
对于给定的 CNF \(\phi\),对于每个 clause,如果其变量个数 \(c\) \(<k\),我们可以引入 \(k-c\) 个辅助变量 \(y_1,\cdots y_{k-c}\) 以及 \(2^{k-c}\) 个 clause,其中每个 clause 为原本的 clause 拼上 \(\{y_i,\lnot y_i\}^{k-c}\),这样显然每个 clause 都包含恰好 k 个 变量:
- 如果原本有合法赋值,则新的 CNF 里显然也都满足。
- 如果新的 CNF 有合法赋值,则因为对 \(2^{k-c}\) 种情况都成立,所以一定说明原本的这个 clause 也有合法赋值,否则一定存在一个矛盾。
因为 \(k\) 是常数,所以规约成立,EXACT-kSAT 是 NP-complete 的。
(b)
首先 kMANY-SAT \(\in\) NP,这是因为给定 \(k\) 个解可以在 poly(n) 时间内进行判定。
考虑令最小的 \(m\) 使得 \(2^m\geq k\),则我们可以把每个 clause 用 (a) 中方法新增 \(m\) 个自由变量,拆成 \(2^m\) 个clause,则如果 \(\phi\) 存在合法赋值,那么每个自由变量可以任意取值,则至少有 \(2^m\) 个合法赋值 \(\in\) kMANY-SAT ,反之显然没有合法赋值 \(\notin\) kMANY-SAT 。
因此可以 SAT \(\leq_p\) kMANY-SAT ,kMANY-SAT 是 NP-complete 的。
-
类 DP 被定义为语言 \(L\) 的集合,使得存在两个语言 \(L_1 \in \text{NP}\),\(L_2 \in \text{coNP}\) 满足 \(L = L_1 \cap L_2\)。证明:
(a) (10 分) EXACT-INDSET \(\in \text{DP}\),其中:
\[\text{EXACT-INDSET} = \{ \langle G, k \rangle \mid G \text{ 中最大独立集的大小恰好为 } k \} \](b) (10 分) DP 中的每个语言都可以多项式时间归约到 EXACT-INDSET。
Answer.
(a)
定义 \(L_1=\{<G,k>|G的最大独立集大小 \geq k\},L_2=\{<G,k>|G不存在大小 > k的独立集\}\),则:
- 对于 \(L_1\),只需要提供一组 \(\geq k\) 的独立集方案就可判定,因此 \(L_1\in\) NP。
- 对于 \(L_2\),它的补问题是,存在大小大于 \(k\) 的独立集,显然和 \(L_1\) 同理是 NP 的,因此 $L_2\in $ coNP。
令 \(L=L_1\cap L_2\),则 \(<G,k>\in L\) 当且仅当 \(G\) 的最大独立集 \(\geq k\) 且不存在 \(>k\) 的独立集,显然这就是 EXACT-INDSET。
EXACT-INDSET \(\in\) DP。
(b)
显然,
因为它是一个 NP 条件与一个 coNP 条件的交。
现在设 \(L\in \mathbf{DP}\)。则存在 \(L_1\in \mathbf{NP}\)、\(L_2\in \mathbf{coNP}\),使得
由于 \(L_1\in \mathbf{NP}\),存在多项式时间归约 \(f\),使得
由于 \(L_2\in \mathbf{coNP}\),所以 \(\overline{L_2}\in \mathbf{NP}\),存在多项式时间归约 \(g\),使得
等价地,
因此
故 \(\mathrm{SAT\text{-}UNSAT}\) 是 \(\mathbf{DP}\)-hard 的,从而是 \(\mathbf{DP}\)-complete 的。
对任意 3CNF
构造图 \(G_\theta\):
- 每个子句中的每个文字对应一个顶点,因此每个子句产生 3 个顶点;
- 同一子句中的 3 个顶点两两连边,形成三角形;
- 若两个顶点对应互补文字(如 \(x\) 与 \(\neg x\)),则连边。
并且总有
因为每个三角形中最多选一个顶点。
设 \(I_{m-1}\) 表示 \(m-1\) 个孤立点构成的图,令
\(H_\theta\) 为 \(G_{\theta}\) 和 \(I_{m-1}\) 每个点连边形成的图。
由于任一独立集只能完全落在 \(G_\theta\) 或完全落在 \(I_{m-1}\) 中,因此
于是:
-
若 \(\theta\) 可满足,则 \(\alpha(G_\theta)=m\),故
\[\alpha(H_\theta)=m; \] -
若 \(\theta\) 不可满足,则 \(\alpha(G_\theta)\le m-1\),故
\[\alpha(H_\theta)=m-1. \]
构造
则
令
分情况讨论:
-
若 \(\phi\) 可满足、\(\psi\) 不可满足,则
\[\alpha(G)=2m+(m-1)=3m-1=k. \] -
若 \(\phi\) 可满足、\(\psi\) 可满足,则
\[\alpha(G)=2m+m=3m. \] -
若 \(\phi\) 不可满足、\(\psi\) 不可满足,则
\[\alpha(G)=2(m-1)+(m-1)=3m-3. \] -
若 \(\phi\) 不可满足、\(\psi\) 可满足,则
\[\alpha(G)=2(m-1)+m=3m-2. \]
因此
即
这就是一个多项式时间归约。
由于 \(\mathrm{SAT\text{-}UNSAT}\) 是 \(\mathbf{DP}\)-完全的,且
所以任意 \(L\in \mathbf{DP}\) 都满足

浙公网安备 33010602011771号