计算理论 笔记
约定:\(S^n\) 表示字符集为 \(S\),长度为 \(n\) 的字符串,\(S^*\) 表示字符集为 \(n\),长度任意的字符串。
作映射 \(0\to 00,\#\to 01,1\to 11\) 可以用字符串(01串)表示字符串有序对 \((x,y)=x\#y\),其同样适用于任意长度的元组。
位串可以表示任意输入,如图可以表示成 \((M,(n)_2)\),\(M\) 是一个 \(n\times n\) 的矩阵,为图的邻接矩阵。据此,可以认为所有待计算函数 \(f\) 都等同于某个定义域和值域都是位串的函数 \(g\),且根据上述元组表示,同样可以讨论输入或输出含多个元素的情况。大部分情况下仅考虑输入和输出长度均有限的函数。
在所有位串到位串的函数中,若 \(f\) 为布尔函数,可以用 \(L_f=\{x:f(x)=1\}\) 表示其,将该集合称为语言或判定问题,于是 \(f\) 的计算问题可以等同于 \(L_f\) 的判定问题。
逻辑学
任意命题都可以转化为前束范式。
有限自动机
给定一张有向图,边上带字符。指定一个起始点 \(q\) 和一个接受结点集合 \(F\)。其输入为一个字符串 \(s\),如果第 \(k\) 步位于 \(p_k\),则从 \(p_k\) 的出边中挑选边权与 \(s_k\) 匹配的边走,令 \(p_{k+1}\) 为其后继结点。如果最后 \(p_{|s|+1}\in F\) 称该自动机接受 \(s\),否则称其拒绝 \(s\)。
称该结构为确定性有限自动机 DFA。\(s\) 中能够出现的字符集由 \(\Sigma\) 给出,结点(自动机的状态)由集合 \(Q\) 给出且大小有限,边由转移函数 \(\delta(q_k,c),q_k\in Q,c\in\Sigma\) 给出,则 \((Q,\Sigma,\delta,q,F)\) 定义了一个 DFA。
如果一个语言 \(L\) 能被某个 DFA 接受,称其为正则语言。
正则语言满足性质:
- 对补封闭。对 \(F\) 取补即可。
- 对交/并封闭。可以用一个状态为 \(Q=Q_1\times Q_2\) 的图灵机模拟两个图灵机同时运行。
- 对拼接封闭。
- 对重复封闭。\(A\) 的重复定义为 \(A^*=\{x_1x_2\dots x_k|k\ge 0,x_i\in A\}\)。
后面二者直接用 DFA 证是困难的。拼接不能简单地两个 DFA 拼起来:我们不知道什么时候应当从第一个 DFA 切换到第二个 DFA。下面引入 非确定性有限自动机 NFA。
其与 DFA 类似,区别在于 1. 其边权可以为空串 \(\varepsilon\),即不需要输入的下一个字符就可以切换状态。2. 同一个点的出边边权可以重复。如果存在一种走法使得 NFA 在读完输入后停在 \(F\) 内的结点上则称 NFA 接受该字符串,否则称 NFA 拒绝该字符串。NFA 的转移函数 \(\delta\) 的值域是 \(2^Q\)。
注意到 DFA 也是 NFA,而一个以 \(2^Q\) 为状态(表示当前可达集合)的 DFA 能够模拟一个以 \(Q\) 为状态的 NFA,因此它们等价。
这个指数复杂度是有必要的。考虑语言 \(L_k\) 接受字符集为 \(a,b\),末尾倒数第 \(k\) 个字符是 \(b\) 的字符串。一个 \(k+1\) 状态的 NFA 能判定之,而任意状态数 \(<2^k\) 的 DFA 都不能判定之。假设能,能够找到两个字符集 \(\{a,b\}\),长度为 \(k\) 的字符串 \(w,w'\) 使得 DFA 读入它们后位于相同的状态。令 \(p\) 为它们第一个不同的位置,再输入 \(p-1\) 个 \(a\) 后 \(wa^{p-1}\) 和 \(w'a^{p-1}\) 仍位于相同的位置但它们倒数第 \(k\) 个字符不同,矛盾。
正则表达式
正则表达式是一个字符串。其字符集为 \(\Sigma\cup\{\empty,\varepsilon,\cup,\circ,*,(,)\}\)。以下串是正则表达式:
- \(a\),\(a\) 是 \(\Sigma\) 内字符串
- \(\varepsilon\)
- \(\empty\)
- \((R_1\cup R_2)\)
- \((R_1\circ R_2)\)
- \((R_1^*)\)
一般不写 \(\circ\),规定优先级是 \(*,\circ,\cup\) 以减少括号。
正则表达式恰能识别正则语言:从正则表达式能够构造出 NFA。从 NFA 构建正则表达式不显然。
定义广义 NFA 为边权是正则表达式的 NFA,其只有一个接受结点,起点没有入边,接受结点没有出边。从一个 NFA 能非常容易构造出一个 广义 NFA。每次可以塌缩一个结点:假设 \(q\) 的入边是 \(q_i\),边权 \(R_1\);出边是 \(q_j\),边权 \(R_3\)。\(q\) 有到自己的边,边权为 \(R_2\),\(q_i\to q_j\) 边权 \(R_4\)。则塌缩后 \(q_i\) 到 \(q_j\) 有应当包含两种方式:一种直接走,一种经过 \(q\)。令新边权为 \(R_1(R_2)^*R_3\cup R_4\)。
对每一对 \((q_i,q_j)\) 都进行上述操作后就能移除 \(q\),最后能得到一个两个点的广义 NFA,其边权就是待求正则表达式。
Pumping Lemma
如果 \(A\) 是正则语言,存在一个 \(p\)(称为 pumping length)使得如果 \(s\) 在 \(A\) 中且 \(|s|\ge p\),能将其分成三部分 \(xyz\) 使得 \(\forall i\ge 0,xy^iz\in A,|y|>0,|xy|\le p\)。
证明考虑取 \(p\) 为 DFA 状态数,则读了 \(0\) 个字符到读了 \(p\) 个字符这 \(p+1\) 种情况内,存在 \(i\neq j\) 使得读了 \(i\) 个字符和读了 \(j\) 个字符后 DFA 位于相同位置,令 \(x=s_{1\dots i},y=s_{i+1\dots j},z=s_{j+1\dots}\) 即得。
DFA 最小化
先删除不可达状态,然后如果两个点的出边完全一致它们可以合并。重复该操作得到的 DFA \(M\) 的结点数是最小的。假设存在最小 DFA \(N\) 的结点数比 \(M\) 少但与 \(M\) 等价,设字符串 \(w_i\) 表示运行 \(M(w_i)\) 会落在状态 \(p_i\) 上,则存在 \(w_i\) 和 \(w_j\) 使得 \(N(w_i)=N(w_j)\),则 \(\forall x\in\Sigma,N(w_ix)=N(w_jx)\),即 \(M(w_ix)=M(w_jx)\),故 \(i,j\) 等价,\(i\) 不是最小的。
一个正则语言所有最小 DFA 同构。
Myhill-Nerode 定理
给定语言 \(L\),字符串 \(x,y\),如果不能找到一个字符串 \(z\) 使得 \(xz\) 和 \(yz\) 中恰好一个属于 \(L\),则记 \(x\sim_L y\)。这是一个字符串上的等价关系,会把所有串划分成若干等价类。
Myhill-Nerode 定理:\(L\) 正则当且仅当等价类个数有限,且此时等价类个数为最小 DFA 状态数。
上下文无关文法
上文的正则表达式是用 CFG 定义的。形式化地定义,CFG 定义为 \((V,\Sigma,R,S)\),\(V\) 是变量集合,\(\Sigma\) 是终止字符集合,\(R\) 是一系列规则(一个变量和一个 \((V\cup\Sigma)^*\) 内的字符串),\(S\in V\) 是起始变量。
如果 \(A\to w\) 是 \(R\) 中一条规则,\(uAv\) 能够产生 \(uwv\)。\(u\to^* v\)(\(u\) 能生成 \(v\)),如果存在 \(u_{1\dots k}\) 使得 \(u\to u_1\to \dots\to u_k\to v\),中间的 \(\to\) 是产生。
定义 CFG 接受的语言为其所有可以从 \(S\) 生成的只含终止字符集合的字符串。
实际表达中有时会缩写,如用 \(A\to u|v|w\) 代替 \(A\to u,A\to v,A\to w\)。
CFG 能够接受非正则语言,如 \(0^n1^n\)。
定义:所有正则语言都能找到一个等价的 CFG。
对所有 DFA 里的状态 \(q_i\) 构造对应变量 \(R_i\),如果 \(\delta(q_i,a)=q_j\) 添加规则 \(R_i\to aR_j\)。如果 \(q_0\) 是起始状态,则 CFG 的起始状态是 \(R_0\)。如果 \(q_i\) 是接受状态,构造 \(R_i\to\varepsilon\)。
解析树
表示用于生成某字符串的树。中间结点是变量,叶子结点是终止符号,孩子关系表示应用的规则。
如果存在一个字符串由两棵不同的解析树则称该 CFG 多义。
管它叫“文法 Grammar”是因为这个工具最早被提出来分析自然语言,但自然语言显然不是上下文无关的。
不存在一种办法移除图灵机的多义性,甚至检查一个 CFG 是否是多义的都是不可计算的,证明考虑构造 CFG 使得其多义当且仅当 PCP 问题(见图灵机章节)有解。
如果符合某个 CFL 的所有 CFG 都是多义的,称该 CFL 为固有多义的。一个这种语言的例子为 \(L=\{a^ib^jc^k|i,j,k>1,i=j\lor i=k\}\)。证明见 A Direct Proof of the Inherent Ambiguity of a Simple Context Free Language, Hermann Maurer, Journal of ACM, 1969。
CFL 对并、拼接、重复封闭,对与 CFL 的交不封闭,对与正则语言的交封闭。
称其是“上下文无关”,因为我们可以随时替换变量而不用关心上下文。检查一个字符串是不是上下文敏感文法是 PSPACE 完全的,而检查上下文敏感文法是否为空是不可计算的。
下推自动机
下推自动机是一个带栈的 NFA,NFA 的状态可以读取栈顶信息,将某个元素入栈或弹栈。当到达接受状态时自动机接受,另一种定义是栈弹空时接受。
形式化定义,PDA 是六元组 \((Q,\Sigma,\Gamma,\delta,q_0,F)\),与 NFA 相比多出栈顶字符集 \(\Gamma\)。转移函数是 \(\delta:Q\times(\Sigma\cup\{\varepsilon\})\times(\Gamma\cup\{\varepsilon\})\to2^{Q\times(\Gamma\cup\{\varepsilon\})}\) 的。\(\delta\) 的参数多一维表示pop对应符号,结果多一维表示push对应符号。不提供特殊手段检测栈是否是空的,在开始时push一个特殊符号 \(\$\) 用作栈底符号。画图时的边权用 \(a,b/c\) 表示,\(a\) 对应输入,\(b\) 对应弹栈得到的字符,\(c\) 对应入栈的字符。
接受的定义仍旧是存在一条执行路径使得执行完毕时状态是接受状态,或者另一种定义是弹出了 \(\$\)。
定理:\(L\) 是 CFL 当且仅当存在一个 PDA 接受之。
从 CFG 到 PDA:一开始往栈上push CFG 起始变量。栈顶读到变量时,用非确定性枚举适当规则替换该变量,替换出的内容需要反向入栈,即从栈顶到栈底的顺序是字符串从左到右的顺序。读到终止字符时与输入匹配。最后如果栈只剩 \(\$\) 了就接受。
如果栈能弹空就存在合法生成方式,如果不存在合法生成方式要么字符不匹配要么栈弹不空。
从 PDA 到 CFG 时对 PDA 做如下假设:1. 接受状态 \(q_f\) 唯一 2. 接受前弹空栈 3. 转移要么是pop,要么是push,不能同时是两个,即 \(\delta\) 的第三个参数不是 \(\varepsilon\) 时结果的第二维必须是 \(\varepsilon\)。
构建的 CFG 变量包含所有的 \(A_{pq},\forall p,q\in Q\),该变量匹配 PDA 在 \(p\) 时读入 \(x\) 后能走到 \(q\) 且栈弹空的所有字符串 \(x\)。因此在 \(p\) 时读入 \(A_{pq}\) 意味着我们能在不动栈的情况下走到 \(q\)。
构建 CFG 规则的整体思路类似括号匹配的 dp。起始变量是 \(A_{0f}\),转移是 \(A_{pq}\to A_{pr}A_{rq},A_{pp}\to\varepsilon\),如果 \(p\to r\) 有边 \(a,\varepsilon/t\),\(s\to q\) 有边 \(b,t/\varepsilon\),则 \(A_{pq}\to aA_{rs}b\)。这样定义的 CFG 等价于 PDA。
Chomsky 标准型
如果所有规则都形如 \(A\to BC,A\to a\),其中大写字母是变量,小写字母是终止符,且 \(B,C\) 不是起始变量,则此时的 CFG 是 Chomsky 标准型。特殊地,允许规则 \(S\to\varepsilon\),其中 \(S\) 是起始符。
把 CFG 转成 Chomsky 标准型的步骤如下:
如果 \(S\) 位于规则右侧,构建新起始变量 \(S_0\to S\)。
如果有规则 \(A\to\varepsilon\),在所有右侧含 \(A\) 的规则里直接利用该规则展开,然后删除该规则。
如果有单位规则 \(A\to B\),删除之并对所有规则 \(B\to u\)(\(u\) 可以是任意字符串)添加规则 \(A\to u\),除非这是一条已经被删除的单位规则。
规则里出现 \(\ge 3\) 个字符或者终止符与变量混用的容易通过新建变量的方式拆开。
最后如果有 \(A\to bc\) 这样的规则,则构造 \(A\to BC,B\to b,C\to c\)。
Cocke–Younger–Kasami 算法
给定一个 Chomsky 标准型的 \(G\) 和字符串 \(s_{1\dots n}\),判断 \(s\) 能被 \(G\) 生成。
使用区间 dp。\(f_{l,r,k}\) 表示变量 \(R_k\) 能否生成 \(s_{l\dots r}\)。一开始对单位规则 \(R_k\to s_i\) 初始化 \(f_{i,i,k}=1\)。
区间 dp 时枚举中点 \(x\),对所有规则 \(R_a\to R_bR_c\),\(f_{l,r,a}\gets f_{l,r,a}\lor(f_{l,x,b}\land f_{x+1,r,c})\)。最后检查 \(f_{1,n,S}\)。
Pumping Lemma
如果 \(A\) 是 CFL,存在 pumping length \(p\) 使得如果 \(s\in A,|s|\ge p\),\(s=uvxyz\) 使得 \(\forall i\ge 0,uv^ixy^iz\in A\) 且 \(|vy|>0,|vxy|\le p\)。证明考虑解析树足够高时会有一对祖先-后代是同一个变量。祖先对应字符串 \(vxy\),后代对应字符串 \(x\),于是可以把 \(vxy\) 替换成 \(x\) 或者把 \(x\) 替换成 \(vxy\)。
令 \(v\) 是变量数,\(b\) 是规则右侧最大符号数(解析树是 \(b\) 叉树),树高需要是 \(v+1\),因此 \(p=b^{v+1}\)。
例:证明 \(\{a^nb^nc^n|n\ge 0\}\) 不是 CFL。
考虑 \(s=uvxyz\),如果 \(v,y\) 只包含一种字符则重复后 \(a,b,c\) 个数不相等,如果包含两种字符则重复后 \(a,b,c\) 顺序不对。注意 \(a^nb^nc^*\) 和 \(a^*b^nc^n\) 都是 CFL,故 CFL 对交不封闭。
例:证明 \(\{ww|w\in\{0,1\}^*\}\) 不是 CFL。
考虑 \(s=0^p1^p0^p1^p=uvxyz\),\(vxy\) 必须横跨 \(0\) 和 \(1\),违反条件。
例:证明 \(\{a^ib^jc^k|0\le i\le j\le k\}\) 不是 CFL。
考虑 \(s=a^pb^pc^p=uvxyz\),注意到除了添加 \(v\) 和 \(y\) 外还可以删掉 \(v\) 和 \(y\) 就能证明。
图灵机
一个 \(k-\)带图灵机的内存由一条只读的输入带(一条纸带可以视为一个单向无限延伸的数组),\(k-1\) 条可读写的工作带组成。每条带上有一个带头,机器只能读取带头处的值或者向带头处写值。最后一条带是输出带,机器终止前把最终计算结果写在输出带上。事实上即使允许随机访问,图灵机的计算能力仍然不会得到提升。
图灵机的操作由一个自动机指定,自动机的状态有限,记为 \(Q\)。任意时刻机器需要根据当前状态和 \(k\) 个带头处的值决定1. \(k-1\) 个带头处的新值 2. 各个带头如何移动 3. 下一步要转移到的状态。
形式化地,一个 \(k-\)带图灵机 \(M\) 是一个三元组 \((\Gamma,Q,\delta)\),\(\Gamma\) 是字母表,假定其至少包含开始符号 \(>\) 和空白符号 \(\empty\),以及 \(0\) 和 \(1\)。\(Q\) 如上所述是状态集合,其包含开始状态 \(q_{start}\) 和终止状态 \(q_{halt}\)。状态转移函数是 \(Q\times\Gamma^k\to Q\times\Gamma^{k-1}\times\{L,S,R\}^k\),\(L,S,R\) 分别代表带头左移一格,带头不动,带头右移一格。
内存初始化:所有带的第一个位置都是 \(>\),其余位置为 \(\empty\)。输入带则在 \(>\) 后存储长度有限的字符串作为输入。
\(\delta\) 函数在状态为 \(q_{halt}\) 时不允许以任何操作修改机器状态,此时称图灵机停机。一般仅关注经过有限步操作停机的图灵机。
效率
令 \(f\) 为位串函数,\(T:\N\to\N\),\(M\) 为一个图灵机。如果将 \(M\) 初始化为任意 \(x\),\(M\) 停机时都将 \(f(x)\) 写在输出带上则称 \(M\) 计算 \(f\)。如果 \(M\) 在任意输入上计算 \(f(x)\) 最多需要 \(T(|x|)\) 步则称 \(M\) 在 \(T(n)\) 时间内计算 \(f\)。
定理:如果 \(f\) 能被 \(M(n)\) 在 \(T\) 时间内计算,则 \(f\) 能被字母表 \(\{>,\empty,0,1\}\) 的 \(\tilde M\) 在约 \(3\log_2|\Gamma|T(n)\) 时间内计算。注意 \(T\) 需要是时间可构造函数,即 \(T(n)\ge n\) 且有图灵机能在 \(T(n)\) 步内给定 \((n)_2\),计算 \((T(n))_2\)。
证明:把 \(\Gamma\) 内的字符用二进制编码,然后令新图灵机上 \(\log_2|\Gamma|\) 个位置等于原图灵机上一个位置。带头要顺序扫一遍读入(为了实现“记忆”功能,可以增大状态数,如用 \(A\times B\times C\) 内的状态模拟 \(A,B,C\) 内的三个状态),逆序扫一遍写值,移动带头到新位置。这样用了 \(3\log_2|\Gamma|\) 步,符合要求。
如果只允许使用一条带(同时是输入带和输出带,允许读写),称该图灵机为单带图灵机。
定理:单带图灵机 \(\tilde M\) 可以用约 \(4kT^2(n)\) 的时间模拟 \(k-\)带图灵机 \(M\)。
证明:令原先第一条带上的元素放在 \(1,k+1,2k+1,\dots\) 位置上,第二条带上的元素放在 \(2,k+2,2k+2,\dots\) 上,以此类推。每条带对应的位置上恰有一个形如 \(\hat a\) 的元素,代表带头所处位置。由于对 \(M\) 字母表中所有字符都要有对应标记,字母表大小会翻倍。
每次需要带头顺序扫描一遍,逆序写一遍,然后往状态中写各个带头的移动情况,再顺序扫一遍处理右移带头,逆序扫一遍处理左移带头。这样实现能够得到一个带头位置不依赖纸带具体内容(仅依赖当前步数)的图灵机,称为散漫图灵机。任意图灵机都可以被散漫图灵机模拟。
图灵机的纸带也可以是双向无限的。双向无限的可以被标准图灵机在 \(3\) 倍时间内模拟。具体地,把纸带“对折”,每个位置上存储一个二元组,在跨越边界时将双向图灵机上的左右移指令反向处理即能实现。
对图灵机做别的修改不会造成重要影响,如二维/三维纸带、随机访问、输出只写等。特别地,这些修改不会改变类 \(P\) (多项式时间内可判定)的定义。
通用图灵机
图灵机是对象,编码转移函数能够得到其对应位串表示 \(\lang M\rang\)。
做如下假定:
- 所有01串都对应一个图灵机。令无效编码对应直接输出0的图灵机即可。
- 一个图灵机有无穷个位串表示。令图灵机编码末尾可以跟任意长度的 \(1\)。
定理(高效通用图灵机):存在图灵机 \(U\) 使得 \(U(x,\alpha)=M_\alpha(x)\) 对任意 \(x\) 成立,\(\alpha\) 是01串,\(M_\alpha\) 是 \(\alpha\) 对应图灵机。且如果 \(M_\alpha\) 在 \(x\) 上运行 \(T\) 步后停机,\(U(x,\alpha)\) 在 \(CT\log T\) 步内停机,\(C\) 仅与 \(M_\alpha\) 有关。换言之,\(U(x,\alpha)\) 在 \(O(T\log T)\) 步内停机。
证明 (\(O(T^2)\)步):注意到 \(U\) 理论上需要应对任意字母表和表带数的图灵机,用之前的方法强制转换为单带01图灵机,在 \(U\) 中指定一条工作带对应 \(M_{\alpha}\) 中的所有带。转移表编码长度是常数,而解析转移表找到对应转移的时间复杂度仅与该长度有关,故不体现在 \(O\) 内。
证明:上述方法的问题在于多带转单带的过程会加一个平方,可以将其优化成线性对数。
假定使用双向图灵机,以下论述只考虑单条纸带。鉴于通用图灵机对应原图灵机的部分只有一个带头,可以考虑“带头不动纸带动”的模式,即左移带头时将所有元素右移一格,反之亦然。直接这样做还是平方的。
考虑预留缓冲区。令带头保持在位置 \(0\),记 \(R_1=1\sim 2,R_2=3\sim 6,R_3=7\sim 14,\dots\),令 \(L_k\) 为 \(R_k\) 关于 \(0\) 的对称。记 @ 为自定义的空位置,原来的 \(\empty\) 当作正常字符处理。
区域划分完毕后需要初始化各区域,保持纸带上内容去除 @ 后内容与原纸带一致,且 \(L_k,R_k\) 中恰有 \(2^{k-1}\) 个位置非空。
在图灵机运行过程中需要保持以下不变式:
- 每个区域中 @ 的个数只能有 \(0,2^{k-1},2^k\) 个,分别称对应状态空,正常,满。
- \(L_k\) 和 \(R_k\) 两个区域中@的个数和是 \(2^k\)。
- 位置 \(0\) 处保证不是 @。
假设左移符号,则需要找到 \(p\) 使得 \(R_p\) 非空(\(L_p\) 非满),将 \(R_p\) 左侧符号放到位置 \(0\),再利用一条额外纸带将其左侧 \(2^{p-1}-1\) 个非 @ 符号放到 \(R_{1\dots p-1}\) 处使得这些区域都处于正常状态。由于这些区域本来是空的,因此空位恰好足够。再在左侧区域执行对称操作,把 \(L_{p-1}\) 中的元素全放到 \(L_p\) 内,\(L_{p-2}\) 内元素全放到 \(L_{p-1}\) 内,以此类推。最后把原先在位置 \(0\) 上的值按照转移表处理后放到 \(L_1\) 内。
注意到上述过程仍然保持不变量,且单次操作代价 \(O(2^p)\)。由于一次对 \(p\) 的操作会重置 \(1\dots p-1\) 的状态为正常,需要至少执行 \(2^{p-1}-1\) 次操作后才能对 \(p\) 进行操作,易得其复杂度为 \(O(T\log T)\)。
此外,存在散漫的 \(O(T\log T)\) 的通用图灵机,见 https://dl.acm.org/doi/pdf/10.1145/322123.322138。思路如下:回到用标记表示带头的方式并利用图灵机的“平移不变性”。令 solve(p) 表示已知起始时带头在 \(0\pm 2^p-1\) 范围内,需要模拟 \(2^p\) 步(即可能需要用 \(0\pm 2^{p+1}-1\) 内的位置),主程序依次调用 solve(0),solve(1),solve(2),...,solve 函数实现如下:
function solve (p) {
if (p == 0) {SimulateTMTransition();return;}
shift(j);solve(j - 1);
shift(j);solve(j - 1);
rollback(j);rollback(j);
}
其中 shift 函数实现如下操作:由于带头位置可能距离原点很远,需要通过循环移位将带头移到离原点近一点的位置。具体地,如果带头位于原点左侧则对区间 \(0\pm 2^{p+1}-1\) 循环右移 \(2^{p-1}\),位于原点右侧则循环左移 \(2^{p-1}\),否则不动。此时属于当前 solve 函数执行的前 \(2^{p-1}\) 步可能用到的所有位置都位于 \(0\pm 2^p-1\) 内,于是递归调用处理前 \(2^{p-1}\) 步。随后重复上述操作处理后 \(2^{p-1}\) 步。shift 函数使用一个栈记录左移/右移/不动,rollback 函数根据栈的内容还原。适当实现(如 shift 无论朝哪个方向需要循环移动都需要扫两遍)后上述步骤可以由一个散漫图灵机完成。
复杂度分析:对 solve 函数,有 \(T(p)=2T(p-1)+O(2^p)\),即 \(T(p)=O(p2^p)\)。因此前 \(p\) 次调用 solve 函数的总复杂度也是 \(O(p2^p)\),即最终复杂度为 \(O(n\log n)\)。
不可计算性
存在不能被图灵机计算的函数,如函数:\(UC(\alpha)\) 当且仅当 \(M_\alpha(\alpha)\) 在有限步内停机并输出 \(1\) 时为 \(0\)。证明其不可计算的方式是“这句话是假话”的逻辑悖论:如果 \(M(\alpha)=UC(\alpha)\),则 \(M(\lang M\rang)=UC(\lang M\rang)\),而这两者不可能相等,因此这样的机器不存在。
由此可得函数 \(\text{Halt}(\alpha,x)\) (表示 \(M_{\alpha}\) 在输入 \(x\) 上是否会停机)是不可计算的,否则 \(UC\) 可以先用 \(\text{Halt}\) 再用通用图灵机计算。
类 P
类 DTIME:设 \(T:\N\to\N\),称语言 \(L\in \dtime(T(n))\) 当且仅当存在运行时间为 \(cT(n)\) 的图灵机判定语言 \(L\),\(c>0\) 是常数。DTIME 中的 D 指确定性。
类 P:\(\p=\bigcup\limits_{c\ge 1}\dtime(n^c)\) 为多项式时间可计算问题。
计算模型的选择一般无关紧要,基本上各种计算模型都能被图灵机以多项式代价模拟。绝大多数科学家详细丘奇-图灵命题:任何可被物理实现的计算装置均可被图灵机模拟。
强丘奇-图灵命题:任何可被物理实现的计算装置均可被图灵机以多项式时间模拟。如果造出了量子计算机这个命题就是错的。
NP 与 NP 完全性
类 NP(多项式时间可验证):语言 \(L\in \np\),如果存在多项式 \(p:\N\to\N\) 和一个多项式时间图灵机 \(M\)(称为 \(L\) 的验证器),使得对于任意 \(x\) 有 \(x\in L\iff\exists u\in\{0,1\}^{p(|x|)}\) 满足 \(M(x,u)=1\)。满足该条件的 \(u\) 称为 \(x\) (关于语言 \(L\) 和图灵机 \(M\))的证明。
如独立集问题属于 \(\np\),给一个构造方案即可。注意最大独立集不是语言(判定问题),需要将其转化为“是否存在大小 \(\ge k\) 的独立集”这一问题。
令 \(\EXP\) 为 \(\bigcup\limits_{c\ge1 }\dtime(2^{n^c})\) 则 \(\p\subseteq \np\subseteq \EXP\)。前者证明为求解器替代验证器并令 \(u\) 为空串,后者证明为枚举 \(u\)。
非确定性图灵机:相较确定性图灵机而言存在两个转移函数 \(\delta_1,\delta_2\),每步可选其一转移。如果存在一种选择转移函数的方式使得图灵机进入接受状态则其输出为 \(1\),否则为 \(0\)。对任意输入 \(x\) ,如果 \(M\) 在任意转移函数选择序列上都能在 \(T(|x|)\) 个步骤内停机,则称其运行时间为 \(T(n)\)。
对任意函数 \(T:\N\to \N\) 和语言 \(L\),如果存在常数 \(c>0\) 和运行时间 \(cT(n)\) 的非确定性图灵机 \(M\) 使得 \(\forall x,x\in L\iff M(x)=1\),则称 \(L\in\ntime(T(n))\)。\(n\) 依照惯例表示输入长度 \(|x|\)。
NP 的原始定义是 \(\np=\bigcup\limits_{c\ge 1}\ntime(n^c)\)。论证两种定义等价:对 \(L\in\ntime(n^c)\),把转移函数选择序列作为证明即可。反之对 \(L\in\np\),构造一个非确定性图灵机 \(N\) 使得其能够在一条纸带上写出一个长为 \(p(|x|)\) 的01串,然后用 \(N\) 运行之前的验证器 \(M\) 并把刚刚写下的 01 串作为证明。显然 \(N\) 是多项式运行时间的,故对某个 \(c\) 有 \(L\in\ntime(n^c)\)。
规约与NP完全
语言 \(L_1\) 多项式时间归约到 \(L_2\),记作 \(L_1\le_p L_2\),如果存在多项式时间可计算函数 \(f\) 使得 \(\forall x,x\in L_1\iff f(x)\in L_2\)。如果 \(\forall L_1\in \np,L_1\le_p L_2\),则称 \(L_2\) 是 NP 难的。如果 \(L\in\np\) 是 NP 难的,称其为 NP 完全的。
给出一个人为构造的 NP 完全问题 TMSAT:\((\alpha,x,1^n,1^t)\) 为真当且仅当存在长度为 \(n\) 的01串 \(u\) 使得使得 \(M_{\alpha}\) 以 \((x,u)\) 为输入时在 \(t\) 步内输出 \(1\)。证明是把验证器塞到 \(\alpha\) 里,令 \(n=|p(x)|\),\(t\) 为验证器运行时间。
Cook-Levin 定理
定理:SAT 是 NP 完全的;3SAT 是 NP 完全的。
SAT 问题:是否存在一种给 \(u_{1\dots n}\) 赋值的方式使得 \(\bigwedge\limits_{i}\bigvee\limits_jv_{ij}=1\)。其中每个 \(v_{ij}\) 必须为 \(u_k\) 或者 \(\bar u_k\) 之一。去掉前面的“是否存在......”,后面的逻辑运算称为合取范式 CNF。如果限定 \(j\) 的枚举范围是 \(1\sim 3\) 则问题称为 3SAT。
引理:任一布尔函数 \(f:\{0,1\}^l\to \{0,1\}\) 可以用 \(l\) 个变量的 \(l2^l\) 大小的 CNF 表达。证明考虑存在子句(CNF 中去掉第一个大 and 后面的部分) \(C_v(z_{1\dots l})\) 使得 \(C_v(v)=0\) 且 \(\forall u\neq v,C_v(u)=1\)。挑选适当的 \(C\) and 起来即可。
但直接对任意 NP 问题 \(L\),构造函数 \(f_x(u)=M(x,u)\) 并用 CNF 表示之是不行的,因为 CNF 是指数量级的。
我们对验证器做如下假设:其只有两条带(输入带和输出带)且是散漫图灵机。在单带图灵机处提到过散漫图灵机能够以多项式代价模拟普通图灵机。因此如果 \(L\in\np\),存在二带多项式时间散漫图灵机 \(M\) 和多项式 \(p\) 使得 \(x\in L\iff\exists u\in\{0,1\}^{p(|x|)}\) 满足 \(M(x+u)=1\)。
记验证器字母表为 \(\Gamma\),集合为 \(Q\),称 \(M\) 在输入 \(y\) 上运行到第 \(i\) 步的快照是 \((a,b,q)\in\Gamma\times\Gamma\times Q\),\(a\) 是输入带带头处的字符,\(b\) 是输出带带头的字符,\(q\) 是当前状态。第 \(i\) 步的快照依赖于机器在第 \(i-1\) 步的状态和两条带上当前位置的字符。
考虑如下问题:给定一串快照 \(z_{1\dots n}\),\(z_k\) 是图灵机在输入 \(y\) 上第 \(k\) 步的快照,问这串快照是否合法。为了检查 \(z_k\) 是否合法,我们只需要先前的两个快照:\(z_{k-1}\) 和 \(z_{pre_k}\),其中 \(pre_k\) 是第 \(k\) 步输出带头所在位置 \(p_{2,k}\) 上一次被修改的时间,即最大的 \(j<k\) 使得 \(p_{2,j}=p_{2,k}\)。其还需要第 \(k\) 步输入带头处 \(y\) 中的字符 \(y_{p_{1,k}}\)。注意 \(z_k\) 可以由这三者唯一确定,即 \(z_k=F(z_{k-1},z_{pre_k},y_{p_{1,k}})\),且 \(p_1,p_2,pre_k\) 都可以通过对任意输入模拟图灵机在多项式时间内求得。
将其转化为SAT问题:变量为 \(y\in\{0,1\}^{n+p(n)}\) 表示输入,\(z_0,\dots,z_{T(n)}\in\{0,1\}^c\) 表示每步快照编号,\(T(n)\) 是在长度 \(n+p(n)\) 输入上的运行时间。SAT条件如下:
- \(y\) 的前 \(n\) 位等于 \(x\)。
- \(z_0\) 是初始快照 \((>,\empty,q_{start})\) 的编码。
- 对任意 \(i\in[1,T(n)]\),\(z_i=F(z_{i-1},z_{pre_k},y_{p_{1,k}})\)。
- 最后一个位串编码对应 \(q_{accept}\) 状态。
条件1 可以用大小 \(4n\) 的 CNF 公式表出,2 和 4 依赖于 \(c\) 个变量,可以表示成 \(c2^c\) 大小的 CNF 公式。条件 3 是 \(T(n)\) 个条件的与,每个条件至多对应 \(\{0,1\}^{2c+1}\to \{0,1\}^c\) 的函数,总共可以表示成 \(cT(n)(2c+1)2^{2c+1}\) 大小的 CNF 公式。鉴于 \(c\) 仅与 \(M\) 有关,上述所有步骤都是关于 \(n\) 的多项式。证毕。
一般的 SAT 到 3SAT:注意到 \(z_1\lor z_2\lor\dots \lor z_n=(z_1\lor z_2\lor y)\land(\bar y\lor z_3\lor z_4\dots \lor z_n)\),\(y\) 是新开的一个变量。这样可以把长子句拆成短子句。证毕。
这个定理的优越之处在于 3SAT 问题组合结构极其简单,而我们可以通过将 SAT 和 3SAT 归约到别的问题以证明 NP 完全性而不用从定义开始。
NP 完全示例
给出将以上问题归约到各种问题的做法,以证明其NP完全性。
独立集判定:其显然属于NP。参照2SAT做法,对每个子句开七个点,对应七种使得该子句合法的赋值方式。所有存在冲突赋值的点互相连边,如果有 $\ge $ 子句数量的点则3SAT问题有解。
01整数规划问题(给定含 \(x_i\) 的一系列有理系数的不等式,问是否存在一种给 \(x\) 赋 01 的方式满足所有不等式):显然每个子句都可以表示成一个有理系数不等式。
有向图哈密顿路径问题:对 SAT 问题中每个变量开一条长度为 \(4n\) 的双向连接的链 \(u_{1\dots n,1\dots 4n}\),认为其在路径中从左往右走为真,从右往左走为假。\(S\) 向 \(u_{1,1},u_{1,4n}\) 连边,相邻链的起点和终点连 \(4\) 条边 \(u_{k,1/4n}\to u_{k+1,1/4n}\),最后连 \(u_{n,1}\to T,u_{4n+1}\to T\)。
开子句数目个点,对单个子句 \(v\) 内每个变量 \(k\) 都可以通过挑选之前没用过的相邻两个点 \(u_{k,p},u_{k,p+1}\)。如果 \(v\) 要求 \(k\) 为真连边 \(u_{k,p}\to v\to u_{k,p+1}\),反之则连边 \(u_{k,p+1}\to v\to u_{k,p}\)。如果能找到哈密顿路径,\(v\) 会被访问恰好一次,而其前驱和后继对应的变量满足了该子句成立。反过来如果存在SAT方案,构造哈密顿路径是容易的。
判定与搜索
定理:如果 \(\p=\np\),对 \(L\in\np\) 和其任意验证器 \(M\) 与验证长度多项式 \(p\),多项式时间图灵机 \(B\) 对任意输入 \(x\) 计算 \(x\) 相对于 \(L\) 和 \(M\) 的长度为 \(p(n)\) 的证明。
先考虑 SAT 问题的做法。检查整个公式是不是可满足的。如果是的话挑一个变量带 \(0\) 看是不是可满足的,如果可以将其赋 \(0\),否则赋 \(1\),随后递归。对任意 NP 问题,注意到库克-勒维定理证明是对验证器的计算过程构造的,可以从 SAT 过程还原出证明。
SAT 问题是向下自规约的,即给定输入长度 \(<n\) 的 SAT 求解算法能做输入长度 \(=n\) 的 SAT 问题。利用库克勒维规约可以证明所有 NP 完全问题都有类似的性质。
CoNP, EXP, NEXP
\(\conp=\{L:\bar L\in \np\}\)。其不是类 \(\np\) 的补集,如 \(\p\) 中每个元素都属于 \(\np\cap \conp\)。
它的另一个定义是对任意 \(L\),若存在多项式 \(p\) 和多项式时间图灵机 \(M\) 使得 \(\forall x\) 有 \(x\in L\iff \forall u\in\{0,1\}^{p(|x|)},M(x,u)=1\)。注意此处是 \(\forall u\) 而非 \(\exists u\)。
判定布尔公式是否是重言式(对任意赋值均为 \(1\))是 \(\conp\) 完全的。依照上述定义其属于 \(\conp\)。考虑别的 \(L\in\conp\),利用库克-勒维规约能得到 \(\varphi\) 使得 \(\varphi\) 可满足当且仅当 \(x\in\bar L\),即 \(\lnot\varphi\) 是重言式当且仅当 \(x\in L\)。
如果 \(\p=\np\) 则 \(\np=\conp=\p\),换言之如果能证明 \(\np\neq\conp\) 则 \(\p\neq\np\)。
先前定义过 \(\EXP\),\(\nEXP\) 定义类似,为 \(\bigcup\limits_{c\ge 1}\ntime(2^{n^c})\)。显然 \(\p\in\np\in\EXP\in\nEXP\)。能够证明如果 \(\EXP\neq\nEXP\) 则 \(\p\neq\np\)。
证明逆否命题:如果 \(\p=\np\) 则 \(\EXP=\nEXP\)。设 \(L\in\ntime(2^{n^c})\) 且 NTM \(M\) 判定之。语言 \(L_{pad}=\{(x,1^{2^{|x|^c}}):x\in L\}\) 属于 \(\np\),其判定 NTM 先试图提取出 \(x\),然后运行 \(2^{|x|^c}\) 步模拟 \(M\) 在 \(z\) 上的计算结果。易见该 NTM 运行时间是输入长度多项式倍,故其属于 \(\np\),即其属于 \(\p\)。于是用指数级别的时间对原输入进行填充后能够用 \(L_{pad}\) 判定 \(L\),即 \(L\in\EXP\)。这种填充证明技术可用于证明复杂性增高(本例为从多项式增至指数多项式级别)后复杂性类之间的相等关系。
更多图灵机相关专题
注:本段内字典序排序中先比较长度,短的一定排在长的前面。
递归可枚举
枚举器是一个图灵机,其永远不停机且会输出若干可重复的字符串。一个语言可识别当且仅当有枚举器生成它。
用枚举器构造识别图灵机是简单的,用识别图灵机构造枚举器过程如下:枚举 \(i\ge 1,j\le i\),如果 \(M(j)\) 前 \(i\) 步接受 \(j\) 则输出 \(j\) 对应的字符串。
不可计算问题示例
\(\text{Some}_{TM}(x)\):\(M_x\) 接受某个输入。
考虑 X(z): return M[x](w);,则能利用 \(\text{Some}_{TM}(X)\) 计算 \(UC(x,w)\)。
Kleene's s-m-n 定理:如果有 TM \(M(x_1,\dots,x_m,y_1\dots y_n)\),存在 TM \(T(\lang M\rang,x_1\dots x_m)\) 输出一个图灵机 \(M'\) 满足 \(M'(y_1,\dots,y_n)=M(x_1,\dots,x_m,y_1,\dots,y_n)\)。
\(E_{TM}(x)\):\(M_x\) 不接受任何输入,否则 \(\text{Some}_{TM}(X)=1-E_{TM}(x)\)。
\(E_{DFA}(x)\):\(DFA_x\) 不接受任何输入。这个是可计算的,只需检查可达性。
\(E_{CFG}(x)\):\(CFG_x\) 不接受任何输入。这个也可计算,先给所有终结符打标记表示其是非空串,然后如果一条规则右侧能是非空串则给其打标记,重复该过程直到打不上标记,最后检查起始符。
\(f(x)\):\(M_x\) 接受正则语言,\(f\) 不可计算。因为不接受任何字符串也是正则语言,考虑 TM T:如果 M(w) 停机则接受所有 \(0^i1^i\),否则不接受任何串。则 \(f(T)\) 可以解决停机问题。
Post Correspondence 问题
Post Correspondence Problem:给定若干字符串二元组(卡片) \((a_1,b_1),(a_2,b_2),\dots,(a_n,b_n)\)。问能否选出一个有限长的串 \(x_{1\dots k}\),满足 \(a_{x_1}a_{x_2}\dots a_{x_k}=b_{x_1}b_{x_2}\dots b_{x_k}\)。换言之如果每种卡片有无限张,能不能取一些卡片排在一起使得正面和背面的字符串相同。
该问题不可计算,否则可以用其解决 \(UC(M,w)\)。具体方法如下:
不失一般性地假设 \(M\) 为单带图灵机且停机前会从右到左用空字符 \(\varepsilon\) 覆盖写过的所有内容,其余时刻不会主动写 \(\varepsilon\)。定义一个局面为图灵机中间某一步的状态,但与快照不同,其包括纸带上的内容。其可以用一个字符串表示,即纸带上的所有写过的内容与恰好一个位于某字符前的状态,表示图灵机的状态和带头位置。例如纸带 \(>01q_10101\) 表示纸带内容为 \(>010101\),状态为 \(q_1\),带头位于含起始字符在内的第四个字符。
如果 \(M\) 接受 \(w\),会有一串局面 \(s_1\dots s_n\) 满足 \(s_i\) 能转移到 \(s_{i+1}\),构造二元组使得 PCP 能够构造出字符串 \(\#s_1\#s_2\#\dots\#s_n\),且 \(s_1\) 内容固定,\(s_n\) 形如 \(q_{accept}\varepsilon\varepsilon\dots\)。
固定 \((\#,\#s_1\#)\) 为第一张取的卡片,对所有字符 \(a\) 放入 \((a,a)\) 表示转移过程不碰该字符,对 \(q\) 处的所有转移放入 \((qa,bq')\) 或 \((cqa,q'cb)\),具体内容视转移而定。如果带头在最后一个位置需要特判。放入 \((\#,\#)\) 表示新开一个局面。最后放入 \((\#q_a,\empty)\) 和 \((\varepsilon,\empty)\) 闭合全串。如果能匹配则形成的局面合法, \(M\) 接受 \(\omega\),而 \(M\) 接受 \(\omega\) 时依据其历史局面也能构造对应关系。因此该问题不可计算。
最后的问题是怎么钦定起始卡片。假设起始卡片是 \((\text{ab},\text{abcd})\),将其变为 \((\text{*a*b*},\text{*a*b*c*d})\),中间卡片 \((\text{de},\text{fgh})\) 变为 \((\text{d*e*},\text{*f*g*h})\),最后加一个终止卡片 \((\&,\text{*\&})\) 匹配多出来的分隔符。
这种局面还能被用来证明别的一些定理,如判断 \(G\) 是否为一个生成所有字符串的 CFG 是不可计算的。
考虑将 \(UC\) 规约到其。构造一个 CFG \(G\) 使得 \(M(w)=1\) 当且仅当 \(G\) 不生成其历史局面,否则 \(G\) 生成所有字符串。
设历史局面形如 \(\#C_1\#C_2\#\dots\#C_n\#\),则构造一个 PDA 使得其接受某个字符串当且仅当:开头不合法/结尾不合法/\(C_i\) 不能生成 \(C_{i+1}\)。
为了使得上述内容能被 PDA 识别,需要翻转偶数编号的串,即处理形如 \(\#C_1\#C_2^R\#\dots\) 的串。PDA 利用非确定性枚举出错的 \(C_i\) 和 \(C_{i+1}\) 的位置,如果 \(C_i\) 入栈后 \(C_{i+1}\) 在弹栈过程中匹配不上则检查周边符号是否构成图灵机合法转移,如果不构成则接受该串。
对 CFG 大部分问题都是不可计算的,如果判断 \(G\) 是否生成所有串/两个 CFG 是否等价/ \(G\) 是否多义。能计算的内容包括是否不生成任何串/是否有限/判断字符串是否属于之。
库克-勒维定理也可以用非确定性图灵机的计算历史证明。这种证明不要求图灵机是散漫图灵机。
图灵规约与映射规约
如果 \(A,B\) 是语言,存在神谕图灵机 \(M^B\) 计算 \(A\),则记作 \(A\le_TB\)。注意其与多项式规约 \(\le_p\) 不同,如所有 \(\conp\) 问题都 \(\le_T\) 其对应的 \(\np\) 问题,但其中很多如 \(\overline{\text{SAT}}\) 等能否多项式时间规约到 \(\text{SAT}\) 问题上还是未知的,取决于 \(\conp\) 与 \(\np\) 是否相等。
称一个函数 \(f\) 是递归函数,如果存在一个图灵机 \(M\) 对所有输入 \(w\) 停机且输出 \(f(w)\)。如果对 \(A,B\),存在递归函数 \(f\) 满足 \(w\in A\iff f(w)\in B\),则 \(A\) 映射规约到 \(B\),记作 \(A\le_mB\)。此时如果 \(B\) 可计算则 \(A\) 可计算,\(B\) 可识别则 \(A\) 可识别,后者性质比图灵规约强。
例:判断两个图灵机接受语言是否相等的语言 \(EQ_{TM}\) 不可计算,因为 \(E_{TM}\le_T EQ_{TM}\)。
证明 \(EQ_{TM}\) 和 \(\overline{EQ_{TM}}\) 不可识别需要映射规约。考虑 \(f(M,w)\) 返回 \((M_1,M_2)\),其中 \(M_1\) 返回 \(0\),\(M_2\) 模拟 \(M\) 在 \(w\) 上的运行并返回之,则得到 \(UC\le_m\overline{EQ_{TM}}\),于是 \(\overline{UC}\le_mEQ_{TM}\),前者不可识别,故后者不可识别。把 \(M_1\) 换成返回 \(1\) 能得到 \(UC\le_m EQ_{TM}\),两侧取补得到 \(\overline{EQ_{TM}}\) 不可识别。
二者区别在于映射规约对补敏感而图灵规约不敏感,例如 \(\text{SOME}_{TM}\le_TE_{TM}\) 但不能映射规约,因为后者补可识别,前者补不可识别。于是映射规约可以用于证明不可识别性。
对多项式规约,同样有库克规约(多项式图灵规约):查询多项式次神谕的规约。二者定义的 \(\np\) 完全是否相等仍未知。有论文猜想它们不相等。
递归定理
令 \(t:\N\to\N\) 为一个递归函数,存在图灵机 \(F\) 使得 \(t(\lang F\rang)\) 和 \(F\) 二者表示的图灵机等价。
证明使用对角线方法。以图灵机为行和以图灵机编号(作为输入)为列构成的表格上取对角线 \(D\),即 \(D(x)\) 返回一个与 \(M_x(x)\) 等价的图灵机,或写成 D(x): function(y) {return M[M[x](x)](y);},注意 \(D\) 本身不执行 \(M_x(x)\),因此 \(D\) 是一个递归函数。\(V=t\circ D\) 也是一个递归函数,且由于 \(D\) 的取法是取对角线,\(D(\lang V\rang)\) 等价于 \(V(\lang V\rang)\),即 \(D(\lang V\rang)\) 是我们要求的图灵机编号。
Kleene 递归定理
令 \(t:\N\times\N\to\N\) 是一个递归函数,存在图灵机 \(R\) 使得 \(R(x)=t(\lang R\rang,x)\)。
令 \(s\) 为 (x) => function(y){return t(x,y);},则有图灵机 \(R\) 使得 \(R=s(\lang R\rang)\),即 \(R(y)=s(\lang R\rang)(y)=t(\lang R\rang,y)\)。
该定理意味着写图灵机时可以假定它知道自己的编号。实现方法如下:假设 \(R(x)\) 需要知道自己的编号,构造图灵机 \(t(k,x)\),其在需要用 \(\lang R\rang\) 时用 \(k\) 代替之,别的时候与 \(R\) 进行完全相同的操作。对 \(t\) 找到 \(R'\) 使得 \(R'(x)=t(\lang R'\rang,x)\),则 \(R'\) 是符合条件的 \(R\)。
利用其可以得到 \(UC_{TM}\) 不可计算的另一个证明:如果 \(H(M,w)\) 计算之,构造 \(B\) 计算 \(H(B,w)\) 再取反。
莱斯定理
任何关于图灵机的非平凡语义性质都不可判定。“语义”指与程序行为相关的性质,如程序是否在给定输入上停机。
形式化描述:唯二可判定的索引集是空集和全集。索引集要求对任意两个等价图灵机 \(M,N\),\(\lang M\rang\) 和 \(\lang N\rang\) 要么都在集合内,要么都不在集合内。
使用 Kleene 递归定理证明之:找一个在索引集内的数 \(a\) 和一个不在索引集内的数 \(b\)。构造图灵机 \(M\):\(\lang M\rang\) 在 \(p\) 内时执行 \(M_b\),否则执行 \(M_a\),则 $\lang M\rang $ 在集合内时其等价于 \(M_b\),否则等价于 \(M_a\),两种情况都与索引集性质矛盾。
另一种证明:假设只死循环的图灵机不在索引集内。选任意一个在索引集内的 \(M_0\)。假设 \(M_1\) 判定索引集,构造
function M2(M,w) {
let M3 = function (v) {M(w);return M0(v);};
return M1(M3);
}
如果 \(M(w)\) 停机,\(M_3\) 等价于 \(M_0\),其在索引集内。否则 \(M_3\) 只死循环,不在索引集内。因此 \(M_2\) 判定停机问题。
Kolmogorov 复杂度
我们可以用一种方式压缩字符串:如果 \(x=M(w)\),用 \((M,w)\) 可以还原出 \(x\)。
记 \(d(x)\) 为上述 \((M,w)\) 中长度最短者,记 \(x\) 的柯氏复杂度 \(K(x)=|d(x)|\)。
有一些结论:
- \(\forall x,K(x)\le |x|+c\),对某常数 \(c\)。因为只需要立刻停机即可。
- \(\forall x,K(x)\le |x|+c\)。需要一个固定的赋值字符串的图灵机。
- \(\forall x,K(x^n)\le |x|+c\log n\),需要一个输出 \(M(x,n)=x^n\) 的图灵机,\(|n|\) 的长度是 \(\log n\) 级别的。
称一个字符串 \(x\) 是 \(c-\)可压缩的,如果 \(K(x)\le |x|-c\) 成立。若 \(x\) 不是 \(1-\) 可压缩的,称其不可压缩。
定理:每个长度的字符串都有不可压缩的。证明:长 \(n\) 的字符串 \(2^n\) 个,长 \(<n\) 的字符串 \(2^{n}-1\) 个。
同理能得到 \(P[K(x)\ge |x|-c]\ge 1-2^{-c}\)。因此大部分字符串都不是很能压缩。
定理:判定 \(K(x)\le c\) 是不可计算的。证明:假设 \(C(x,c)\) 计算之,考虑 \(M(n)\) 输出 \(C(y,n)=0\) 中字典序最小的 \(y\),则 \(K(y)\le |M,n|=c+\log n\),\(n\) 足够大时矛盾。
Chaitin 不完备定理:如果在某公理系统中,所有能够用自然语言表示的陈述都能在公理系统中表示,且所有证明的检验都是可判定的,则对足够大的 \(L\),\(\forall x\),不能证明 \(K(x)\ge L\)。
反证。如果能对某个 \(x\) 证明 \(K(x)>L\),找到这些证明中字典序最小的证明 \(P\),假设其证明 \(K(y)>L\)。考虑如下的图灵机 \(R\):用字典序枚举证明 \(P'\),如果 \(P'\) 合法且最后一句是 \(K(y)>L\),则输出 \(y\) 并停机。则其能在 \((R,L)\) 内表出 \(y\)。
虽然随机选一个长度 \(\ge L+100\) 的字符串 \(x\),有 \(1-1/2^{99}\) 的概率 \(K(x)>L\),但不能证明之。
应用:质数增长速度
定理:存在一个 \(c\) 使得 \(p_i\le ci\log^2i\) 对无穷个 \(i\) 成立,其中 \(p_i\) 是从小到大第 \(i\) 个质数。
取质因数分解作为压缩。令 \(M(a_1,\dots,a_n,b_1,\dots,b_n)=\prod p_{a_k}^{b_k}\),则 \(|a_1|,\dots,|a_n|,|b_1|,\dots,|b_n|\) 可以用 \(O(1)+\sum 2(\log (\log a_k+1)+\log (\log b_k+1)+2)\) 位表示,而后面的 \(a\) 和 \(b\) 本体去掉二进制表示最开始的 \(1\) 后可以用 \(\sum (\log a_k+\log b_k)\) 位表示。故整体位数可以用 \(\log(c4^n\prod a_kb_k\log^2(a_k+1)\log^2(b_k+1))\) 位表示。
由于无限个字符串不可压缩,有无限种 \(a,b\) 的取法使得 \(\prod p_{a_k}^{b_k}\le c4^n\prod a_kb_k\log^2(a_k+1)\log^2(b_k+1)\),即 \(\prod \frac{p_{a_k}^{b_k}}{4a_k\log^2(a_k+1)b_k\log^2(b_k+1)}\le c\),其中 \(c\) 是某个 \(>1\) 的常数。不等式成立表示不可压缩。
注意到如果 \(p\) 是 \(a\) 的质因子且 \(a\) 可被压缩,则 \(ap\) 一定可被压缩。假设 \(\forall k>m,p_k>8 k\log^2k\),则选取位置在 \(m\) 后面的质数会让左侧比值增大,且存在位置 \(n\) 使得 \(\forall k>n,\frac{p_k}{k\log^2k}\prod\limits_{l\le m}\frac{p_l}{4l\log^2(l+1)}>c\),即选取 \(k>n\) 的质数 \(p_k\) 之后,数一定是压缩。考虑 \(t\) 使得 \(\forall 0\le b_1,b_2,\dots,b_n\le t,\max(b_1,b_2,\dots,b_n)=t\),\(\prod\limits_{1\le k\le n} p_k^{b_k}\) 能被压缩(对非最大值位置只用考虑 \(b_k\le1\) 的情况,而 \(b_k\ge 5\) 时增大幂次一定会足够快地增大比值),则对任意 \(x>\prod\limits_{1\le k\le n} p_k^t\),\(x\) 的质因数分解里要么含有在 \(p_n\) 后面的质数,要么某个在 \(p_n\) 及其前面的质数的幂次高于 \(t\),即 \(x\) 一定可被压缩。
图灵度与算术分层
一般情况下都用 \(UC\) 或者停机问题证明别的问题不可计算,而它们一般也可以图灵归约到 \(UC\) 问题。所以它们图灵等价。
称这种等价类为图灵度。常见的两个图灵度是 \(0\) 和 \(0'\),分别代表可计算问题以及等价于停机问题的问题。
更高图灵度的一个例子是超级停机问题:对所有以 \(Halt\) 为神谕的神谕图灵机 \(M^{halt}\),判断 \(M^{halt}\) 是否会停机。其图灵度为 \(0''\)。
算数分层:对 \(i\ge 1\),\(L\in\sum_i\) 当且仅当存在一个一定停机的图灵机满足 \(x\in L\iff \exists y_1\forall y_2\exists y_3\dots (\exists/\forall)y_n,M(x,y_{1\dots n})=1\),其中 \(\exists\) 和 \(\forall\) 交错。类似可以定义 \(\prod_i\) 是 $\exists $和 交错的类。注意到 \(\sum_0=\prod_0\) 是可计算问题。额外定义 \(\Delta_i=\sum_i\cap\prod_i\)。
\(\sum_1\) 是递归可枚举语言(即可识别语言),设 \(M\) 识别之,定义 \(M'(x,s)\) 为运行 \(M\) 的前 \(x\) 步并返回是否已接受的图灵机,则 \(M'\) 必定停机,其符合 \(\sum_1\) 定义。反之对 \(\sum_1\) 内的语言,枚举 \(y_1\) 即可识别之。
定理:判定 \(M\) 是否接受所有输入的语言 \(\text{ALL}_{TM}\) 在 \(\prod_2\) 内。证明:\(\forall x,M(x)=1\iff \forall x\exists s,M'(x,s)=1\),\(M'\) 定义如上。
定理:其是 \(\prod_2\) 完全的。对任意其中的问题 \(L:\forall y\exists z,R(x,y,z)=1\),构造如下图灵机:
bool M[x](y) {int z = 0;while(!R(x,y,z)) ++z;return 1;}
如果 \(x\in L\) 则其确实接受所有输入。如果 \(x\notin L\) 则 \(\exists y\forall z,R(x,y,z)=0\),故上述图灵机不在 \(\text{ALL}_{TM}\) 内。
与其相反的图灵机 \(E_{TM}\) 是 \(\prod_1\)(即补可识别语言,co-recognizable)的,因为 \(M\in E_{TM}\iff \forall (x,s),M'(x,s)=0\)。
再考虑语言 \(\text{REC}_{TM}\):判定 \(M\) 接受的语言 \(L\) 是不是递归语言(可计算语言),注意 \(M\) 不需要必定停机,只需要存在一个必定停机的 \(M'\) 和它接受相同的输入。
定理:\(\text{REC}_{TM}\in\sum_3\)。因为 \(L(M)\) 递归当且仅当 \(L(M),\overline{L(M)}\) 可识别。因此 \(M\in\text{REC}_{TM}\iff \exists N,L(M)=\overline{L(N)}\) 且 \(N\) 可递归。后者等价于 \(L(M),L(N)\) 交集为空,并集为全集,可以利用 \(\text{ALL}_{TM}\) 和 \(E_{TM}\) 判定,而 “\(N\) 在任意输入上一定停机” 这个条件也可以用 \(\text{ALL}_{TM}\) 判定,故其是 \(\sum_3\) 的。
再看超级停机问题 \(\text{SUPERHALT}\):\(M^{halt}(w)\) 停机。
上述图灵机合法当且仅当存在一个 \(s\) 使得 \(M^{halt}(w)\) 在 \(s\) 步内停机,此时其最多查询 \(s\) 次停机问题。停机问题的 \(\sum_1\) 的,答案是 \(1\) 时表示 \(\exists y_i,M_i(x,y_i)=1\),答案是 \(0\) 时表示 \(\forall z_i,\overline{M_i}(x,z_i)=1\)。
故超级停机等价于 \(\exists s\exists y_1\exists y_2\dots\exists y_s\forall z_1\forall z_2\dots\forall z_s[\dots]\),当 \(M^{halt}\) 调用神谕时枚举神谕结果,如果答案是 \(1\) 使用一次 \(y\),否则使用一次 \(z\)。由于可以将序列映成自然数,相邻相同量词可以合并,因此超级停机问题是 \(\sum_2\) 的。
容易证明 \(\text{ALL}_{TM}\le_T\text{SUPERHALT}\),构造图灵机 \(N\),其忽略输入,从小到大枚举 \(x\),如果 \(M(x)\) 不接受(本步使用 \(UC\) 神谕,即停机神谕),则 \(N\) 返回 \(1\)。如果 \(N\in\text{SUPERHALT}\),则 \(M\) 接受所有输入。
反过来可以证明 \(\text{SUPERHALT}\le_T\text{ALL}_{TM}\)。因为其是 \(\prod_2\) 完全的,故利用其神谕可计算 \(\text{SUPERHALT}\) 这种 \(\sum_2\) 问题的补。
回到图灵度:\(0\) 对应可计算问题,\(0'\) 对应停机问题等价类,\(0''\) 对应超级停机问题等价类,\(0'''\) 对应超级超级停机问题等价类,以此类推。\(A'\) 代表 \(\text{HALT}^A\) 问题的度数,即 \(M^A(w)\) 是否停机问题的度数。
Post's problem:是否存在问题 1. 不可计算 2. 可规约到停机问题 3. 不等价于停机问题,即 \(0\) 和 \(0'\) 之间是否存在别的图灵度数?答案是存在,并且有无穷个这样的度数。
Cell-Probe Model
“你是最后一个人吗”
\(m\) 个人玩游戏。主持人会按特定顺序把 \(m\) 个人轮流带到某个房间里,这个房间里有 \(n\) 个盒子,每个盒子里有至多一颗珠子,初始时所有盒子都是空的。每个人进入房间后可以打开至多 \(t\) 个盒子,观察里面有没有珠子,然后决定要不要放一颗/拿出来。在打开下一个盒子前必须关闭当前盒子。打开完所有盒子后主持人会询问当前玩家是否是最后一个进入房间的。
\(m\) 个人可以提前商量策略,而主持人知道该策略并会试图破坏之,问玩家是否有必胜策略。
如果 \(t=\Theta(\log m)\) 则维护剩余人数计数器的二进制表示即可。
\(t\) 可以做到 \(\Theta(\log\log m)\):维护计数器的连续段,需要记录最后一块的类型,连续段个数,各个块大小。每次至多需要末尾 \(3\) 个块和连续段个数。一般情况下读和写都要 \(\log\log m\)(因为打开下一个盒子前必须关上下一个盒子) 但不是所有块都需要读,因此 \(7\log\log m+O(1)\) 是容易的。
最后一个问题是初始化。假设我们以盒子状态 \(s_{1\dots k}\) 开局时我们的做法是对的,则以全 \(0\) 盒子开局时,如果我们在读取/写盒子 \(b_x\) 的时候将其异或 \(s_x\),我们的做法仍旧是对的。
另一种做法用前 \(\log m\) 个人初始化计数器为 \(m-\log m\)。
下面我们证明这个下界是渐近最紧的。具体地,证明 \(t\le 0.4\log\log m\) 时玩家没有必胜策略。
记 \(S_i\) 为玩家 \(i\) 可能读写的位个数集合,则 \(|S_i|\le l=2^t-1\),因为 \(i\) 的决策树是深度至多为 \(t\) 的二叉树。如果所有人策略相同则诸 \(S_i\) 相同,记为 \(S\)。如果 \(2^{|S|}<m\) 则一定有两个人 \(i\) 和 \(j\) 走进来时状态相同,无法区分,因此 \(1,\dots,i,\dots,j,\dots m\) 和 \(1,\dots,i,j+1,\dots m,\dots\) 这两个序列中 \(m\) 的回答一定相同。
对非对称策略需要引入一个引理。
向日葵引理
定义一棵向日葵为一系列集合 \(S_{1\dots p}\),使得 \(\forall i\neq j,S_i\cap S_j\) 都相同。称该交集为向日葵花心,各个集合与别的集合不交的地方为花瓣。
如果 \(S_{1\dots m}\) 是任意大小 \(\le l\) 的 \(m\) 个集合。如果 \(m>(p-1)^{l+1}l!\),则 \(S\) 中存在一个 \(p\) 个集合的向日葵。
对 \(l\) 归纳。如果 \(l=1\),则 \(m>(p-1)^2\) 就行,这样能找到 \(p\) 个相同的或者 \(p\) 个不同的。
如果 \(l\ge 2\),取一个 \(S\) 中极大集合 \(A_{1\dots t}\) 使得其元素两两不交。如果 \(t\ge p\) 则其形成一棵空心的花。然后记 \(B=\bigcup A_k\),则 \(|B|\le (p-1)l\) 且依极大性,\(B\) 与 \(S\) 内每个元素都有交。
\(m>(p-1)^{l+1}l!\) 时,\(B\) 中一定有一个元素 \(x\) 在大于 \(\frac{(p-1)^{l+1}l!}{(p-1)l}=(p-1)^l(l-1)!\) 个集合内。对这些集合删去 \(x\) 并用归纳得到向日葵。
回到原问题。对 \(m>(p-1)^{l+1}l!\),找到一棵向日葵 \(p\),不妨令其为 \(S_{1\dots p}\)。
主持人先让非向日葵内玩家进场,然后让向日葵内玩家进场,则对向日葵之内玩家只能通过花心传递信息,花心状态 \(\le 2^l\),故 \(p>2^l\) 时如同对称策略一样会有人区分不开情况。而 \(t=0.4\log\log m\) 时 \((2^l)^{l+1}l^l=2^{l^2+l+l\log l}<m\),故能使得 \(p>2^l\)。虽然非对称策略不一定更优但其下界确实更松。
比较排序复杂度下界
对 \(a_{1\dots n}\) 排序,对这些元素唯一可用的信息是一个比较函数(因此不能桶排序等),求复杂度下界。
不妨设元素两两不同,构建决策树。比较函数返回值只有两种,决策树是二叉树。叶子结点需要有 \(n!\) 中所有可能排列,故深度 \(\ge\log(n!)\),依斯特林近似 \(n!\sim \sqrt{2\pi n}(\frac n e)^n\),\(\log(n!)\approx n\log n\)。
集合成员判定问题
Cell-Probe Model 允许随机访问,以内存访问次数而非计算时间作为复杂度参考。其可以用于分析 DS 题复杂度。一般 DS 题可以分为预处理、查询两步,对动态 DS 还要多个更新。
考虑如下问题:给定一个整数集合 \(S\),每次查询一个整数 \(x\),是否有 \(x\in S\)。设值域是 \([0,M]\),\(n=|S|\)。
如果 \(M=O(n)\) 则桶排序是 \(O(n)-O(1)\) 的。值域大时常用结论是排序+二分查找或哈希表,后者最坏情况是 \(O(n)\) 的,问题是前者的最坏 \(\lceil \log_2(n+1)\rceil\) 是否最优。
形式化问题:给定集合 \(S\),预处理函数 \(T(S)\) 以某个顺序输出 \(S\) 内的 \(n\) 个数,决定如何排列 \(S\) 内的元素。另外有一个搜索策略决定如何查询元素是否在集合里。
对 \(n=2\) 时,如果 \(M=3\) 一次内存访问够了,否则需要两次访问。前者预处理后结果为 \((1,2)\to(1,2),(1,3)\to (3,1),(2,3)\to (2,3)\),这样读第一个元素就知道下一个是什么。
后者证明如下:如果 \((i,j)\) 预处理后以 \((i,j)\) 放置则连边 \(i\to j\),否则以 \((j,i)\) 放置,连边 \(j\to i\)。由于该图内一定有点入度或出度 \(\ge 2\),一定能找到三个不构成环的点。
对一般情况,\(n\ge 2\) 和 \(M\ge 2n-1\),如果 \(T\) 是排序函数,则上述下界是最优的。证明如下:\(n=2,M\ge 3\) 时需要 \(2\) 次操作。如果其对 \(n<n_0\) 成立,考虑 \(M\ge 2n_0-1\),不失一般性地假设我们希望找到 \(n_0\) 的位置,且第一次查询的位置在 \(p\le\lceil\frac {n_0}2\rceil\),最坏情况下(考虑“交互库自适应”)查询到这个位置是 \(p\),则 \(\lceil\frac{n_0}2\rceil+1\dots n_0\) 可以包括任何的 \(\lceil\frac{n_0}2\rceil+1\dots M\) 的有序集合而我们一定需要在这之中查找,依归纳假设定理成立。
注意到上述结论对某个 \(\sigma\in S_n\)(对称群)同样成立,即如果 \(S=\{a_1<a_2<\dots<a_n\}\) 时 \(T\) 以 \(a_{\sigma(1)},a_{\sigma(2)},\dots,a_{\sigma(n)}\) 存储则该结论仍然成立。
对一般的 \(T\),\(M\) 足够大时存在一个 \(\Gamma\subseteq [1,\dots,M]\),\(|\Gamma|=2n-1\),使得所有 \(S\subseteq \Gamma,|S|=n\) 的 \(S\) 在 \(T\) 中都以某固定排列存储。证明考虑 \(n-\)hypergraph(一条边连接 \(n\) 个点的图),边有 \(n!\) 种颜色情况下的 Ramsey 定理,\(M\) 足够大时存在一个 \(2n-1\) 阶完全子 \(n-\)超图使得所有边颜色相同。
单点加区间和
两个操作:\(A_k\gets A_k+\Delta\),查询 \(A_1+\dots+A_k\)。初始 \(A_1=\dots=A_n=0\)。
假设 1. 元素在某个群 \(\mathbb G\) 中,其大小为 \(2^{\delta}\),即元素需要 \(\delta\) 位表出。2. 计算机字长 \(w\ge\log n\)。3. \(\Delta\) 在 \(\delta\) 位以内。
依 [Mihai Pătraşcu, Erik Demaine],任意数据结构解决该问题都需要每次查询或更新平均 \(\Omega(\frac{\delta}{w}\log n)\) 的时间复杂度。
我们随机生成排列 \(\pi\),随机生成序列 \((\Delta_1,\dots,\Delta_n)\in\mathbb G^n\)。每次更新 \((\pi_t,\Delta_t)\) 然后查询 \(\pi_t\) 位置前缀和。
这是二维偏序,考虑类似分治的做法:如果给定两个时间间隔 \([t_0,t_1]\) 和 \([t_1,t_2]\),需要给后面的时间间隔传递多少信息才能完全反应前面的修改。定义 Interleave Information \(IL(t_0,t_1,t_2)\) 为上述信息。我们将 \(\pi(t_0)\dots\pi(t_2)\) 排序,设结果为,\(\pi(a_1),\pi(a_2),\dots\),则 \(IL(t_0,t_1,t_2)=\sum [a_i\in[t_0,t_1]\cap a_{i+1}\in[t_1,t_2]]\)。排序末尾对 \([t_0,t_1]\) 内的修改可以忽略,其余情况下修改连续段的 \(\Delta\) 都可以合并,因此 \(IL(t_0,t_1,t_2)\) 是反映 \([t_0,t_1]\) 对 \([t_1,t_2]\) 的修改需要的随机变量数。
我们希望计算 \(E[IL(t_0,t_1,t_2)]\),且只考虑 \(t_2-t_1=t_1-t_0\) 的情况,则 \(P[j\in[t_0,t_1]]=1/2,P[j+1\in[t_1,t_2]|j\in[t_0,t_1]]=k/(2k-1)\),由期望线性性得到原期望为 \(k/2\)。
记 \(\Delta^*\) 为不在 \([t_0,t_1]\) 内的修改,则 \(H(\text{Ans}_{t_1\dots t_2}|\Delta^*)=\delta IL(t_0,t_1,t_2)\),其中 \(H\) 是熵,因为 \(k\) 次均匀投掷硬币的熵是 \(k\),而一个随机变量是 \(\delta\) 位,故得到上述式子。
再定义 Information transfer \(IT\) 函数为满足如下条件的位置:在 \(t_r\in[t_1,t_2]\) 内被读取,在 \(t_r\in[t_0,t_1]\) 内被写入,且 \([t_r+1,t_w]\) 内该位置未被覆写。注意到其取决于 \(\Delta\) 而 \(IL\) 只取决于排列。
能够证明 \(E_{\Delta}[|IT(t_0,t_1,t_2)|]>\frac{\delta}{2w}IL(t_0,t_1,t_2)-1\)。该式等价于 \(H(\text{Ans}_{t_1\dots t_2}|\Delta^*)\le w+2wE_{\Delta}[|IT(t_0,t_1,t_2)|]\),注意到熵是平均情况下任意编码的长度下限,而此处编码是集合大小 \(|IT(t_0,t_1,t_2)|\)+这些位置的地址+这些位置的内容。
对任意一棵分治树,总时间复杂度都是 \(\sum\limits_vIT(v)\),其中 \(v\) 取遍分治树的结点,\(IT(v)\) 是分别取 \([t_0,t_1],[t_1,t_2]\) 为左孩子和右孩子区间时的 \(IT\),后文 \(IL\) 同理。令分治树为线段树,则
于是得到平均下界 \(\Omega(\frac{\delta}w\log n)\)。
应用:动态图连通性下界
令 \(\mathbb G=S_{\sqrt n}\),即 \(\sqrt n\) 阶对称群(排列),定义加法操作为排列复合。令序列长度为 \(\sqrt n\),则给定 \(\sigma\in\mathbb G\),检查 \(\sigma=\pi_1\circ\pi_2\circ\dots\circ\pi_{\sqrt n}\) 是否成立可以用 \(\sqrt n\) 次(每个元素各一次)动态图连通性查询。而 \(\delta=\log|S_{\sqrt n}|\sim\sqrt n\log n\),取 \(w=\Theta(\log n)\) 得到复杂度 \(\Omega(\sqrt n\log n)\)。此处要把求和换成下界相同的验证和,因为连通性不能做求和。由规约得如果我们能检查 \(\sqrt n\) 次连通性,每次 \(o(\log n)\) 时间,则我们可以 \(o(\sqrt n\log n)\) 时间验证和,矛盾。因此动态图连通性下界是 \(\Omega(\log n)\)。
对角线方法
这种证明方法的唯一公用工具是图灵机的字符串表示。假定 1. 任意01串均对应一个图灵机。 2. 01串表示是搞效的,即通用图灵机能在01串长度线性对数时间复杂度内模拟之。 3. 每个图灵机可以表示成无穷多个01串。
记位串 \(x\) 对应的图灵机为 \(M_x\)。 记自然数 \(i\) 对应的图灵机为 \(M_i\),自然数去掉最高位的 \(1\) 后可以和01串形成一一映射。
时间分层定理
如果 \(f,g\) 是满足 \(f\log f=o(g)\) 的时间可构造函数,则 \(\dtime(f(n))\subset\dtime(g(n))\)。
以 \(f=n\),\(g=n^{1.5}\) 为例。考虑如下图灵机 \(D\):在输入 \(x\) 上用通用图灵机模拟 \(M_x(x)\) 执行 \(|x|^{1.4}\) 步。如果其停机输出相反答案,否则输出 \(0\)。以下证明 \(D\notin\dtime(n)\)。
如果有更高效的图灵机 \(M\) 模拟 \(D\) 且在 \(\dtime(n)\) 内,通用图灵机模拟 \(M\) 在任意输入 \(x\) 上运行时的时间复杂度最多为 \(C|x|\log|x|\),存在数 \(n_0\) 使得 \(n\ge n_0\) 时 \(n^{1.4}>Cn\log n\)。令 \(x\) 是 \(M\) 表示长度至少为 \(n_0\) 的一个01串,则 \(D(x)\) 允许 \(M_x(x)\) 时一定停机,\(D(x)=M(x)=1-M_x(x)=1-M(x)\)。
非确定型时间分层定理
如果 \(f,g\) 是满足 \(f(n+1)=o(g(n))\) 的时间可构造函数,则 \(\ntime(f(n))\subset\ntime(g(n))\)。
虽然 NTM 也有通用图灵机,但注意到 NTM 不能简单像 TM 一样反转输出,因此证明不能简单照搬时间分层定理。然而输出可以在指数级别时间内被反转,它可以被用来证明分层定理。
依旧证明 \(f=n,g=n^{1.5}\) 的情况。定义 \(h:\N\to\N\) 为 \(h(1)=2,h(k+1)=2^{h(k)^{1.2}}\)。构造的 \(D\) 采用惰性对角线方法,会将非确定性图灵机 \(M_i\) 在 \(\{1^n:h(i)<n\le h(i+1)\}\) 中一个输入上的答案翻转。其定义如下:
令输入为 \(x\)。如果 \(x\) 不是全 \(1\) 则拒绝。否则记 \(n=|x|\),计算 \(i\) 使得 \(h(i)<n\le h(i+1)\) 且
- 如果 \(h(i)<n<h(i+1)\) 利用非确定性在 \(n^{1.1}\) 时间内运行并返回 \(M_i(1^{n+1})\)。如果模拟未停机返回 \(1\)。
- 如果 \(n=h(i+1)\) 则接受 \(1^n\) 当且仅当 \(M_i\) 在 \((h(i)+1)^{1.1}\) 时间内拒绝 \(1^{h(i)+1}\)。
第二种情况要枚举 \(2^{(h(i)+1)^{1.1}}\) 个分支,但输入规模是 \(2^{h(i)^{1.2}}\) 的因此不影响时间复杂度。
设 \(D\) 判定 \(L\),则 \(L\notin\ntime(n)\)。否则设 \(M\) 可以在 \(cn\)(\(c\) 为常数)步内判定 \(L\),找到充分大常数 \(x\) 使得 \(M=M_x\) 且 \(\forall n\ge h(x)\),\(M_x\) 可以在小于 \(n^{1.1}\) 步内被模拟。
\(D\) 中条件确保了 \(h(x)<n<h(x+1)\) 时 \(D(1^n)=M_x(1^{n+1})\) 但 \(D(1^{h(x+1)})\neq M_x(1^{h(x)+1})=M_x(1^{h(x+1)})\)。
此处延迟对角化体现为在复杂度不足以支持反转输出时用相等关系连接输出,支持翻转后再翻转构造矛盾。
Ladner 定理
Ladner 定理:\(\p\neq\np\) 时存在 \(L\in\np\backslash\p\) 且 \(L\) 不是 NP 完全的。证明使用延迟对角化。
对任意函数 \(H:\N\to\N\),定义 \(\text{SAT}_H\) 由长度为 \(n\) 的可满足公式加上一个 \(0\) 再加上 \(1^{n^{H(n)}}\) 个 \(1\) 构成。考虑两种极端情况:
\(H(n)=O(1)\),此时该问题完全等价于一般的 SAT,即 \(\p=\np\) 时其不是 P 的。
\(H(n)\to+\infty\),此时 \(\text{SAT}_H\) 不能是 NP 完全的。否则设 SAT 到其的规约 \(f\) 运行时间为 \(O(n^c)\),映射会映成 \(\text{SAT}_H\) 中长度 \(O(n^i)\) 的实例。新的实例形如 \(\psi01^{|\psi|^{H(|\psi|)}}\),\(|\psi|+|\psi|^{H(|\psi|)}=O(n^c)\),\(|\psi|=o(n)\)。反复调用规约可以将问题规模缩到一常数内,从而得到 SAT 问题的多项式算法。
使用一个函数在某种意义上合并上述两种情况,既能趋于无穷保证问题不是 NP 完全的,又增长的足够慢确保 SAT-H 问题不是 P 的。
定义 \(H(n)\) 为满足下列两个条件的最小 \(i\) 值:(1) \(i<\log\log n\)。(2) 对任意长度 \(\le\log n\) 的 01串 \(x\),\(M_i\) 在 \(i|x|^i\) 个步骤内输出 \(\text{SAT}_H(x)\)。如果 \(i\) 不存在则赋 \(H(n)=\log\log n\)。注意这是个隐式递归的函数,它能在至多 \(O(n^3)\) 内被计算:先算 \(H(1\dots\log n)\),再模拟 \(\log\log n\) 个机器在所有长度 \(\le\log n\) 的输入上的 \(\log\log n(\log n)^{\log\log n}=o(n)\) 步,并且计算所有长度 \(\le \log n\) 的输入的 SAT。
首先此时 SAT-H 不在 P 内。否则假设 \(M\) 用 \(cn^c\) 步解决该问题,找一个 \(i>c\) 使得 \(M=M_i\)。依 \(H\) 的定义此时 \(\forall n>2^{2^i},H(n)\le i\)。但这意味着 SAT-H 就是 SAT 加上一个多项式长度的 \(1\),因此 \(\p\neq\np\) 时其不能在 \(\p\) 内。
其次 SAT-H 不是 NP 完全的,证明 \(H(n)\to+\infty\),即对任意 \(i\) 只有有限个 \(n\) 满足 \(H(n)=i\):鉴于 SAT-H 不在 P 内,对任意 \(i\) 都有输入 \(x\) 使得 \(i|x|^i\) 时间内 \(M_i\) 不能正确算出 \(\text{SAT}_H(x)\),故 \(\forall n>2^{|x|},H(n)\neq i\)。
目前为止所有 NP 非完全问题都不自然;自然一点的疑似 NP 非完全问题如整数分解或图同构问题尚未被完全证明不是 NP 完全的。
Ladner 定理的另一种证明
两种证明思想本质相同。
枚举 \(\p\):限定 \(M_i\) 只能走 \(n^i\) 步,鉴于一个图灵机有无穷种编号,这样枚举得到的多项式图灵机判定的语言能覆盖 \(\p\) 中的所有语言。
类似地,可以枚举 \(\np\) 难语言。枚举所有多项式图灵机 \(f_i\),令 \(N_i\) 表示当 \(f_i\) 是规约时求解 \(\text{SAT}\) 用 \(f_i\) 规约后问题的图灵机。注意虽然 \(f_i\) 是规约时 \(N_i\) 一定存在,但不用显式求出它。
由于 \(x\in\text{SAT}\iff f_i(x)\in L(N_i)\),\(p\neq\np\) 时 \(L(N_i)\) 不在 \(\p\) 内。\(M\) 包含了所有 \(\p\),\(N\) 包含了所有 NP 完全问题。
构造语言 \(A\in\np\) 使得其既不是 \(\p\) 也不是 \(\np\) 完全。依假设,给定 \(M_i\),对任意 \(x\) 存在 \(z\ge x\) 使得 \(M_i(z)\) 和 \(\text{SAT}\) 问题在其上输出不同,否则 \(\p=\np\)。给定合法的 \(N_i\),对任意 \(x\) 存在 \(z\ge x\) 使得 \(N_i(z)\neq 0\)。
我们的目标是所有 \(M_i,N_i\) 都不判定 \(A\) 且 \(A\in\np\)。构造一个函数 \(g(n)\),令 \(A=\{x|x\in\text{SAT},g(|x|)\bmod2\equiv0\}\)。
先尝试如下定义 \(g\):\(g(0)=0\)。对 \(g(n)\),如果 \(g(n-1)=2i\),试图利用 \(n-1\) 干掉 \(M_i\),\(g(n)=g(n-1)+[\exists |z|=n-1,M_i(z)\neq\text{SAT}(z)]\)。如果 \(g(n-1)=2i+1\),试图干掉 \(N_i\),\(g(n)=g(n-1)+[\exists|z|=n-1,N_i(z)\neq 0]\)。如果 \(f_i\) 不是 \(\le n\) 规模的 \(\text{SAT}\) 的规约直接跳过。
问题是 \(g\) 难以算出,从而不能保证 \(A\in\np\)。解决办法是让 \(g\) 只看长度 \(<\log n\) 的字符串。
令 \(g(0)=g(1)=2\),如果 \((\log\log n)^{g(i)}\ge \log n\) 令 \(g(n+1)=g(n)\)。否则:
如果 \(g(n)=2i\),\(g(n+1)=g(n)+[\exists|z|<\log n,g(|z|)\bmod 2=0\land\text{SAT}(z)\neq M_i(z)]\)。
如果 \(g(n)=2i+1\),先检查 \(f_i\) 是不是对 \(\le\log\log n\) 规模的 SAT 问题的规约(依限制在单个输入上 \(f\) 的运行时间不超过 \(O(\log n)\),长度也为 \(\log n\) 级别),如果不是直接令 \(g(n+1)=g(n)+1\)。找到 \(|x|<\log\log n\) 使得 \(g(|f_i(x)|)\) 是奇数且 \(x\in\text{SAT}\),或 \(g(|f_i(x)|)\) 是偶数且 \(\text{SAT}(x)\neq\text{SAT}(f_i(x))\)。找到就令 \(g(n+1)=g(n)+1\),否则令 \(g(n+1)=g(n)\)。
\(g\) 可以在多项式时间内计算,下面说明 \(g\) 趋于无穷大以完成证明。如果 \(g\) 在某个 \(2i\) 停住,则 \(z\) 足够长时有 \(\text{SAT}(z)=M_i(z)\) 恒成立,与假设矛盾。如果 \(g\) 在某个 \(2i+1\) 停住,则 \(f_i\) 是规约,故对任意 \(x\in\text{SAT}\),\(g(|f_i(x)|)\) 一定是偶数,而 \(g\) 在奇数停住,因此 \(|f_i(x)|\) 有界,\(\text{SAT}\in\p\),矛盾。
神谕图灵机
我们把仅使用图灵机如下性质的任何技术称为对角线方法:1. 图灵机可以高效表示成位串 2. 任意一个图灵机可以用较低的时空开销模拟另一个任意的图灵机。
仅用到上述两个事实的任何论述均把图灵机视为黑盒。光靠这两个性质不足以证明 \(\p\) 与 \(\np\) 的关系:可以构建两个黑盒,一个使得 \(\p=\np\),另一个使得 \(\p\neq\np\)。
考虑神谕图灵机 \(M^O\),其中 \(O\) 是一个语言,称为神谕。\(M\) 有一条神谕带和三个状态 \(q_{query},q_{yes},q_{no}\)。进入 \(q_{query}\) 时,如果神谕带上的内容属于 \(O\) 则下一步必定进入 \(q_{yes}\),否则必定进入 \(q_{no}\)。不论 \(O\) 是什么语言,判定语言是否属于神谕只花一步。类似地可以定义非确定性神谕图灵机。
分别定义 \(\p^O\) 和 \(\np^O\) 为用对于确定/非确定神谕图灵机可以在多项式时间内求解的问题集合。例如 \(\overline{\text{SAT}}\in\p^{\text{SAT}}\),如果 \(O\in\p\) 则 \(\p^O=\p\)。
令 \(\text{EXPCOM}\) 为语言 \((M,x,1^n)\):\(M(x)\) 在 \(2^n\) 步内输出 \(1\),则 \(\p^{\text{EXPCOM}}=\np^{\text{EXPCOM}}=\EXP\)。如果用其为神谕可以一步实现指数时间计算,故 \(\EXP\subseteq\p^{\text{EXPCOM}}\)。而如果 \(M\) 是某非确定性神谕图灵机,则可以用指数时间枚举选择并模拟神谕,故 \(\np^{\text{EXPCOM}}\subseteq\EXP\)。
将图灵机视为黑盒证明出的结论称为相对结论,相对结论可以照搬到以 \(O\) 为神谕的所有神谕图灵机上。
存在神谕 \(A,B\) 满足 \(\p^A=\np^A,\p^B\neq\np^B\)。令 \(A=\text{EXPCOM}\) 即证明前半部分,对任何语言 \(B\),令 \(U_B\) 表示语言 \(1^n\):\(B\) 中有长度为 \(n\) 的串,则 \(U_B\in\np^B\) 对任意 \(B\) 成立,因为可以用 NTM 枚举所有长度为 \(n\) 的01串。构造一个 \(B\) 使得 \(U_B\notin\p^B\)。
对任意 \(i\),用 \(M_i\) 表示 \(i\) 去掉最高位的 \(1\) 时二进制形式表示的神谕图灵机。通过一系列阶段构造 \(B\),第 \(i\) 个阶段确保 \(M_i\) 在 \(2^n/10\) 的时间内无法判定 \(U_B\)。初始时 \(B\) 为空集,每个阶段向 \(B\) 中添加有限个串。
第 \(i\) 个阶段已经确定了有限个串是否属于 \(B\),选择充分大的 \(n\) 使得其 \(\ge\) 任何考虑过的串的长度,然后让 \(M_i\) 在 \(1^n\) 上运行 \(2^n/10\) 步,如果 \(M_i\) 需要查询当前没有考虑过的串就进入 \(q_{no}\),否则依据考虑过的结果进入 \(q_{yes}/q_{no}\)。无论 \(M_i\) 是否接受 \(1^n\) 都让它在 \(1^n\) 上的输出是错的,因为 \(\{0,1\}^n\) 中长度为 \(n\) 的串均不在 \(B\) 中,而 \(M_i\) 至多查询 \(2^n/10\) 个串。因此如果 \(M_i\) 接受 \(1^n\) 就赋值 \(B(\{0,1\}^n)=0\),否则挑一个没考虑过的串 \(x\) 令 \(B(x)=1\)。由于 \(n\) 足够大时任意多项式 \(p(n)\) 均小于 \(2^n/10\) 且每个图灵机都能表示成无穷多个位串,没有一个图灵机能够判定 \(U_B\)。事实上上述过程表明了 \(U_B\notin\dtime(o(2^n))\)。
由上能够得到对角线方法或任意模拟技术如果能证明 \(\p\) 是否等于 \(\np\),则其必须利用某些非相对事实。
注:一般而言神谕图灵机是允许调用不关心实现的黑盒函数的算法的抽象。
空间复杂性
空间受限计算
设有 \(S:\N\to\N\) 和语言 \(L\)。如果存在常数 \(c\) 和判定 \(L\) 的 TM (NTM) \(M\) 使得对任意长度为 \(n\) 的输入,\(M\) 完成计算(对 NTM 是在任意非确定选择上)的过程中至多有 \(cS(n)\) 个格子(只读的输入带上的格子不算)中的内容在某一时刻非空,称 \(L\in\SPACE(S(n))\)(对应地,\(L\in\NSPACE(S(n))\)),注意对 NTM 要求其在任意非确定选择上都停机。
类似时间复杂性,空间界限只使用空间可构造函数 \(S\),即存在图灵机在输入 \(|x|\) 上仅用 \(O(S(|x|))\) 空间完成 \(S(|x|)\) 的计算。我们接下来要遇到的所有函数,如 \(\log n,n,2^n\) 等都是空间可构造函数,这个条件比时间可构造函数松。且由于使用空间不包含输入,不同于时间受限计算,讨论 \(S(n)<n\) 的 \(S\) 是有意义的。我们要求 \(S(n)>\log n\) 因为图灵机的工作带至少需要记住图灵机在读输入带的哪个位置。
定理: \(\dtime(S(n))\subseteq\SPACE(S(n))\subseteq\NSPACE(S(n))\subseteq\dtime(2^{O(S(n))})\),该定理只有最后一个 \(\subseteq\) 需要证明。注意到该定理意味着 \(\NSPACE\) 定义中的 NTM 不需要在所有分支上都停机,因为可以加一个计数器让它执行 \(2^{cS(n)}\) 步后自动停机。
格局图
考虑 PCP 问题规约中的计算历史,即快照+所有带上的其余非空位置内容,以及所有带上的带头标记符。计算历史的转移图称作格局图。不妨令图灵机在接受前清除所有纸带内容,则格局图中代表接受状态的点 \(C_{accept}\) 唯一。对 TM 每个点出度 \(\le 1\),对 NTM 每个点出度 \(\le 2\)。注意到对空间受限计算,图上至多有 \(2^{cS(n)}\) 个点,\(c\) 仅与图灵机有关,输入规模无关。同时类似库克-勒维定理中的证明方式,存在一个大小 \(O(S(n))\) 的 CNF 判定图上两点间能否连边。于是给定起始状态后可以建出图,bfs 判定能不能到终点,就证明了上述定理。
常见空间复杂性类
3SAT 有一个枚举解的做法,因此其属于 \(\PSPACE\),运用类似思想能得到 \(\np\subseteq\PSPACE\)。
利用小学算数知识和对数空间图灵机能从 \(1\) 数到 \(n\),以下两个判定问题属于 \(\l\):判定 \(x\) 的二进制表示是否有偶数个 \(1\),给定三个自然 \((a,b,c)\) 判断是否有 \(ab=c\)。虽然除了基本算术操作外很难相信复杂计算只用 \(O(\log n)\) 空间,但目前仍然没有证明 \(\text{3SAT}\notin\l\)。
在 \(S(n)\ll n\) 的条件下空间受限计算与网页爬取等问题似乎有些关联,互联网上的网页可以视为点,超链接视为有向边,而网页爬虫探索该有向图以收集信息,于是引出问题 \(\text{PATH}\):给定 \(\lang G,s,t\rang\),判断 \(s\) 能否走到 \(t\)。其属于 \(\nl\),因为利用非确定性可以只维护当前所处结点的编号。事实上其是 NL 完全的。
\(\text{PATH}\) 是否属于 \(\l\) 仍未被证明,但在无向图上其属于 \(\l\) 已经被证明,即目前人们不知道 \(\l=\nl\) 是否成立。
能通过类似于证明时间分层定理的方式证明空间分层定理:如果 \(f,g\) 是满足 \(f(n)=o(g(n))\) 的空间可构造函数则 \(\SPACE(f(n))\subset\SPACE(g(n))\)。注意通用图灵机空间效率下降是常数倍因此不需要 \(\log\) 因子。
PSPACE 完全性
\(\p=\PSPACE\) 是否成立仍不清楚。
如果 \(\forall L\in\PSPACE,L\le_p A\),则 \(A\) 是 PSPACE 难的。如果其属于 \(\PSPACE\) 则其是 PSPACE 完全的。问题 \(\lang M,w,1^n\rang\):TM \(M\) 在空间 \(n\) 内接受 \(w\) 是 PSPACE 完全问题。注意定义完全性需要使用比复杂类本身更强的规约,因此此处是多项式时间规约而非多项式空间规约。
定义 \(\text{TQBF}\) 为所有真的 QBF(量化布尔公式,即带 \(\forall,\exists\) 且无自由变量的布尔公式,不失一般性地只考虑前缀范式 prenex form) 构成的语言。则该语言是 PSPACE 完全的。
令 \(\psi=Q_1x_1\dots Q_nx_n\varphi(x_1,\dots,x_n)\) 是有 \(n\) 个变量的 QBF,\(Q_{1\dots n}\) 是量词。将 \(\varphi\) 的规模记为 \(m\)。我们可以用 dfs 在 \(O(n+m)\) 的空间内判定之,因此 \(\text{TQBF}\in\PSPACE\)。
假设 \(L\in\PSPACE\),令 \(M\) 在 \(S(n)\) 空间内判定之,构造一个 \(O(S(n)^2)\) 的与 \(M\) 等价的 QBF。注意到格局图中的边可以用 \(O(S(n))\) 的布尔公式表出。令 \(m=O(S(n))\) 是编码 \(M\) 在长度为 \(n\) 的输入上的计算历史所需二进制位个数,即结点编号的长度。
考虑倍增,令 \(\psi_i(u,v)\) 为真当且仅当 \(u\) 能在 \(2^i\) 步内走到 \(v\),则 \(\psi_0\) 已经给出。\(\psi_i(u,v)=\exists w\psi_{i-1}(u,w)\land\psi_{i-1}(w,v)\),但这样的规模太大了。利用 \(\forall\) 将其重新定义为 \(\exists w\forall a,b((a=u\land b=w)\lor(a=w\land b=v))\to \psi_{i-1}(a,b)\)。\(=\) 和 \(\to\) 可以用普通逻辑操作替换。此时 \(|\psi_i|=|\psi_{i-1}|+O(m)\),最终得到我们所需的 \(|\psi_m|=O(m^2)\),再用多项式时间将其转为前缀范式。
Savitch 定理
上述定理证明与格局图的出度 \(\le1\) 无关,因此 \(\text{TQBF}\) 还是 NPSPACE 难的,从而 \(\PSPACE=\NPSPACE\)。利用该思想能够证明如下定理:
对任意 \(S(n)\ge\log n\) 的空间可构造函数 \(S:\N\to \N\),\(\NSPACE(S(n))\subseteq\PSPACE(S(n)^2)\)。证明过程基本如上:构造算法 \(f(u,v,i)\) 表示格局图中 \(u\) 能否在 \(2^i\) 步中走到 \(v\),则其利用 dfs 枚举中继节点并复用空间。令 \(S_{m,i}\) 是其在 \(m\) 个顶点的图上的空间复杂度,则 \(S_{m,i}=S_{m,i-1}+O(\log m)\),从而 \(S_{m,\log m}=O(\log^2m)=O(S(n)^2)\)。
有输出带的图灵机的空间消耗定义做如下修改:只计算工作带上使用过的格子,输出带带头只能右移且只写。
图灵机在空间复杂性类下封闭:假设 \(A,B\) 属于某空间复杂性类,虽然 \(B(x)\) 可能很长,但 \(A(B(x))\) 在计算过程中不需要存下 \(B(x)\) 的输出,可以每次需要用第 \(k\) 位时直接用 \(B(x)\) 计算之。
利用填充技术和 \(\nl\subseteq\SPACE(\log^2n)\) 也可以证明萨维奇定理的一般形式:令 \(L\in\NSPACE(S(n))\),用 \(\#0^{2^{S(|x|)}}\) 填充得到 \(L'\)。原先的 NTM 可以用 \(S(n)\) 空间数零,因此 \(L'\in\nl\),故 \(L'\in\SPACE(\log^2n)\)。利用 \(L'\) 的 DTM 可以构造 \(L\) 在 \(O(S^2(n))\) 空间内的 DTM。
NL完全性
论证NL完全性需要使用对数空间规约。一个 \(\nl\) 里的语言的 NTM 的格局图里的点数是 \(n\) 的多项式级别的,故图可以在 \(O(\log n)\) 空间内计算出。因此 PATH 是 NL 完全的。另外由此可以得到 \(\nl\subseteq\p\)。
Immerman 定理:NL=CoNL
考虑问题 NON-PATH:给定有向图,判定 \(s\) 是否走不到 \(t\)。
判断该问题的方式如下:先数 \(s\) 能走到的点,然后删去 \(t\) 再做一遍,如果两者数量相同则不可达。我们可以调用子程序 walk(s,t):从 \(s\) 开始利用非确定性游走一条路径,如果终点不是 \(t\) 就让 NTM 拒绝。
一个简单的想法如下:for (v != s) {walk(s,v);++cnt;} 但这样如果 \(s\) 到不了 \(v\) walk 的所有分支都会拒绝,图灵机会提前终止。
改进:for (v != s) {reachable = 0/1;if (reachable) {walk(s,v);++cnt;} else {}},其中 reachable 表示猜测是否能走到 \(v\),这样到不了时图灵机会走reachable=0的分支,但如果到得了时图灵机选择走了该分支就会低估cnt。因此 else 部分内应当确保reachable=0 时如果 \(s\) 能到 \(v\) 就拒绝。
对此实现方式如下:令 \(R(i)\) 表示 \(s\) 在 \(i\) 步之内能到的点数,\(R(0)=1\),使用 \(O(\log n)\) 空间从 \(R(i)\) 计算 \(R(i+1)\)。reachable 的意义变为能否在 \(i+1\) 步之内走到 \(v\)。令 walk(s,t,i) 表示最多走 \(i\) 步的子程序,则 NTM 实现如下:
cnt = 1;
for (v != s) {
reachable = 0/1;
if (reachable) {walk(s,v,i + 1);++cnt;}
else {
cnt2 = 1;
for (u != s) {
reachable_i_steps = 0/1;
if (reachable_i_steps) {
walk(s,u,i);if (u == v || (u,v) in Edges) REJECT;
++cnt2;
}
}
if (cnt2 != R[i]) REJECT;
}
}
R[i + 1] = cnt;
else 里的含义:如果 \(i+1\) 步之内走到 \(v\) 则会拒绝一个本来应当接受的分支,导致原来能走到的点被视为走不到,而鉴于 cnt2 只可能低估不可能高估真实值,最后一个 if 能确保猜测的正确性。
接龙游戏(有向图博弈)
接龙时上一个词的最后一个字和下一个词的第一个字必须相同,这样的关系可以表示为一张有向图。
给定一张有向图,某点处有一个棋子。双方轮流沿边移动棋子,棋子位置不能重复,不能移动者输,问先手是否必胜。
用dfs可以看出其属于 \(\PSPACE\),现在用布尔公式为 3 CNF 的 TQBF 规约到其,不妨假设对每个变量的限定全部交错(即 \(\exists\) 后下一个一定是 \(\forall\),\(\forall\) 后下一个一定是 \(\exists\))且起始和终止都是 \(\exists\)。
以 \(\varphi:\exists x_1\forall x_2\dots\exists x_k,(x_1\lor\lnot x_2\lor x_3)\land\dots\) 为例。构造的图分为两部分:左半部分 \(0\to (T_1,F_1)\to 0'\to 1\to (T_2,F_2)\to\dots \to (T_k,F_k)\to k'\),其中 \(0\to (T_1,F_1)\to 0'\) 是 \(0\to T_1,T_1\to 0',0\to F_1,F_1\to 0'\) 的简写,\(1\) 和 \(2\) 会轮流选择 \(T_1/F_1,T_2/F_2\),以此类推。
图的右半部分如下:走到 \(k'\) 时选择权位于 \(1\) 手上,连边 \(k'\to\Phi\to (c_1,\dots,c_m)\),其中 \(\Phi\) 是布尔公式本体,\(c_{1\dots m}\) 是子句。各子句连向变量 \(x_i\),再依据 \(x_i\) 的要求连向 \(T_i\) 或 \(F_i\),如本例中 \(c_1\to (x_1\to T_1,x_2\to F_2,x_3\to T_3)\)。
如果有合法赋值,\(\Phi\) 到子句的出边是 \(2\) 选的,其无论怎么选都会选到真的子句,此时 \(1\) 只需在子句里选择一个符合子句条件的 \(x_i\) 走,然后由于 \(x_i\) 的唯一出边被堵死,\(2\) 输了。否则 \(2\) 选一个假的子句,\(1\) 无论怎么选 \(2\) 都有办法走到图的左半部分,从而 \(2\) 获胜。
能运用其证明五子棋是 PSPACE 完全的。
NL 的另一种定义与 Immerman 定理
用验证器定义重写英莫曼定理的证明。
\(\nl\) 用验证器方式定义如下:输入和证明放在不同只读带上,证明带的带头不能左移,一个位置只能读一次,工作带上只用 \(O(\log n)\) 空间。如果证明带带头能左移则用原验证器的计算历史作为证明可以得到该定义等价于 \(\np\)。
令 \(C_i\) 为 \(s\) 在 \(i\) 步内能到的点构成的集合,其成员的资格容易验证,证明为长度符合要求的路径,且这些路径的长度是 \(n\) 的多项式。
为了达成目标需要两种复杂证明:给定 \(|C_i|\),构造 \(v\notin C_i\) 的证明和给定 \(|C_{i-1}|\),对某个 \(c\) 证明 \(|C_i|=c\)。
前者的证明为对 \(u\in C_i\),按 \(u\) 递增的顺序列出路径。验证器只需检查输入格式是否合法、路径是否真实、\(v\) 不在列出的 \(u\) 内。
给定 \(|C_{i-1}|\) 后验证 \(v\notin C_i\) 的证明基本同上,只需最后再加一个条件:对所有列出的 \(u\),没有边 \(u\to v\)。
给定 \(|C_{i-1}|\) 后验证 \(|C_i|=c\):对任意 \(v\),无论 \(v\in C_i\) 还是 \(v\notin C_i\) 都能给出对应证明,验证器只需验证对每个点再 \(C_i\) 内成员资格的证明是否属实以及 \(v\in C_i\) 点的个数是否为 \(c\)。
最后利用 \(C_0=\{s\}\) 已知,逐步推出 \(|C_1|,\dots,|C_n|\),再检查 \(t\notin C_n\) 的证明是否成立就行。
再用填充法或格局图之一即得 \(\NSPACE\) 也对补封闭。
多项式分层与交错
将算术层级中后面的 \(M\) 限定为多项式时间运行的图灵机且 \(\forall\) 和 \(\exists\) 后的变量限定为多项式级别,得到多项式层级,分别记作 \(\sum_k^p\) 和 \(\prod_k^p\)。有 \(\sum_1^p=\np,\prod_1^p=\conp\)。称 \(\ph=\bigcup\limits_{k\ge 1}\sum_k^p\)。注意到 \(\sum_k^p\subseteq \prod_{k+1}^{p}\subseteq \sum_{k+2}^p\) 因此 \(\ph\) 是所有多项式层级的并。利用神谕图灵机也可以定义 \(\sum_{i+1}^p=\np^{\sum_i^p},\prod_{i+1}^p=\conp^{\prod_i^p}\),右上角的复杂度类实际上代表其中任意一个完全语言,如 \(\sum_i\text{SAT}\) 和 \(\prod_i\text{SAT}\),前者为 \(\exists x_1\forall x_2\dots Q_ix_i\varphi(x_1,\dots,x_i)=1\),量词交换 \(i-1\) 次,\(\varphi\) 可以是任意一个布尔公式,\(\prod_i\text{SAT}\) 类似。
定理:如果 \(\np=\p\) 则 \(\ph=\p\),即多项式层级会坍塌。归纳证 \(\sum_i^p,\prod_i^p\subseteq\p\)。鉴于前者内元素求补得到后者,只需证明前者 \(\subseteq\p\)。对 \(x\in L\iff \exists u_1\forall u_2\dots M(x,u_1,\dots)=1\),令 \(L'\) 为如下语言:\((x,u_1)\in L'\iff \forall u_2\exists u_3\dots M(x,u_1,\dots)=1\),则 \(L'\in \prod_{i-1}^p\Rightarrow L'\in\p\),而 \(x\in L\iff \exists u_1 M'(x,u_1)=1\),其中 \(M'\) 是 \(L'\) 对应的多项式时间图灵机,依假设 \(\p=\np\) 得 \(L\in\p\)。
运用归纳同样可证得 \(\forall k\ge 1,\sum_k^p=\prod_k^p\) 时 \(\ph=\sum_k^p\)。
人们相信 \(\ph\) 中不存在完全问题,否则如果该问题 \(\in\sum_i^p\) 则 \(\ph=\sum_i^p\),而一般认为多项式分层不坍塌。
交错图灵机
交错图灵机与 NTM 类似,但每个除去接受和拒绝的状态都带有 \(\forall\) 和 \(\exists\) 之一。如果将其在某输入的计算历史树画出来,则 \(\forall\) 状态要求所有孩子都接受,该状态才接受,\(\exists\) 状态要求至少一个孩子接受,该状态才接受,最后看根的值决定整个图灵机是否接受,交错图灵机的运行时间为树的深度。NTM 是只有 \(\exists\) 的交错图灵机。如果限定树上符号交换次数 \(\le i-1\) 且限定运行时间为多项式能得到 \(\prod_i^p\) 和 \(\sum_i^p\)。
不限定交错次数,限制运行时间为多项式得到的复杂度类记作 AP,下面证明其等于 PSPACE。
首先 TQBF 属于 AP,因为可以利用交错直接猜 TQBF 中各个变量的取值,反过来直接dfs就行。
SAT 的时空平衡
定理:SAT 不能同时在 \(O(n^{1.1})\) 时间和 \(O(n^{0.1})\) 空间内解出,记该限制为 \(\mathbf{TISP}(n^{1.1},n^{0.1})\)。
先证明 \(\ntime(n)\not\subseteq\mathbf{TISP}(n^{1.2},n^{0.2})\),然后运用库克-勒维规约,其将判定某个 \(\ntime(T(n))\) 语言的成员资格规约到判定大小为 \(O(T(n)\log T(n))\) 的布尔公式是否可满足,于是上述条件成立时有 \(\ntime(n)\subseteq\mathbf{TISP}(n^{1.1}\operatorname{polylog}(n),n^{0.1}\operatorname{polylog}(n))\),从而导出矛盾。
先证 \(\mathbf{TISP}(n^{12},n^2)\subseteq\sum_2(n^8)\)。格局图一点长度 \(n^2\),路径长度 \(n^{12}\)。这样一条路径存在当且仅当存在\(C_{1\dots n^6}\) 共 \(n^6\) 个格局,任意相邻两个格局间都能在 \(n^6\) 步内到达且起点和终点符合条件。这个条件能在 \(n^8\) 步(\(n^6\) 步模拟,\(n^2\) 的长度)内验证。
再证 \(\ntime(n)\subseteq\dtime(n^{1.2})\),则 \(\sum_2(n^8)\subseteq\ntime(n^{9.6})\),运用填充法有 \(\ntime(n^8)\subseteq\dtime(n^{9.6})\),\(\sum_2(n^8)\) 是 \(\exists |u|=O(n^8),\forall |v|=O(n^8),M(x,u,v)=1\),\(M\) 是 \(O(n^8)\) 确定性图灵机。有 \(\dtime(n^{9.6})\) 的图灵机使得 \(D(x,u)=1\iff\forall |v|=O(n^8),M(x,u,v)=0\),因此 \(x\in L\iff \exists |u|=O(n^8),D(x,u)=0\),即 \(L\in\ntime(n^{9.6})\)。
如果 \(\ntime(n)\subseteq\mathbf{TISP}(n^{1.2},n^{0.2})\) 则用填充得到 \(\ntime(n^{10})\subseteq\mathbf{TISP}(n^{12},n^2)\),即 \(\ntime(n^{10})\subseteq\sum_2(n^8)\subseteq\ntime(n^{9.6})\),矛盾。
交错图灵机复杂性
定理:\(\mathbf{ATIME}(f(n))\subseteq\SPACE(f(n))\)。
证明:直接dfs,只在选择处花额外空间。
定理:\(\SPACE(f(n))\subseteq\mathbf{ATIME}(f(n)^2)\)。证明类似 TQBF 的 PSPACE 完全性,把 \(\forall\) 和 \(\exists\) 用交错图灵机中结点替换。
推论:AP 是 \(\PSPACE\)。
定理:对 \(\mathbf{ASPACE}(f(n))=\dtime(2^{O(f(n))})\)。后者包含前者枚举合法计算历史建图,前者包含后者的证明如下:
考虑图灵机的计算历史表。当前位置 \(i\) 仅可能与前一步 \(i-1,i,i+1\) 三个位置上的值 $(a,b,c) $有关,记 Guess(i,j,d) 表示第 \(i\) 步第 \(j\) 个位置的值能否为 \(d\),注意在计算历史上带头处位置上的值同时包含纸带上该位置的信息和图灵机的当前状态。该函数实现如下:
function Guess(i,j,d) {
for (a,b,c) that can yield d {
if (Guess(i-1,j-1,a) && Guess(i-1,j,d) && Guess(i-1,j+1,c)) return true;
}
return false;
}
外层的 for 可以用 \(\exists(\lor)\) 操作符,内层可以用 \(\forall(\land)\) 操作符。注意由于计算历史表是唯一确定的,该函数是正确的,最后计算 \(\exists j,\text{Guess}(n,j,q_{accept})\) 得到答案,这里的 \(n\) 是总步数而非输入规模。
交错图灵机全程只需存储参数,参数中最大的是位置,故占用空间 \(\log 2^{O(f(n))}=O(f(n))\)。
推论:AL 是 \(\p\),APSPACE 是 \(\EXP\)。
棋盘博弈
\(n\times n\) 的棋子更多的国际象棋是 EXP 完全的。见 [Fraenkel & Lichtenstein 1981]。
考虑如下更接近棋盘游戏的布尔公式博弈。给定 \(\psi(x_{1\dots m},y_{1\dots m},t)\),玩家 \(1\) 设置 \(t=0\) 并任意修改 \(x_{1\dots m}\),玩家 \(2\) 设置 \(t=0\) 并任意修改 \(y_{1\dots m}\),不能空过,如果行动后 \(\psi=0\) 则判负。给定初值判断谁赢。证明它是 EXP 完全的。
它属于 \(\EXP\),枚举所有状态即得。下面证它是 APSPACE 完全的。
考虑一交错图灵机,规定初始状态是 \(\exists\),\(\exists\) 下一步一定是 \(\forall\),\(\forall\) 下一步一定是 \(\exists\)。规定拒绝是 \(\exists\) 状态,接受是 \(\forall\) 状态。
考虑 \(M\) 的格局,记 \(\varphi(C,D)\) 表示格局图有边 \(C\to D\),\(\varphi\) 大小是多项式级别,如果 \(C\) 是接受或拒绝状态则 \(\varphi(C,D)=0\)。令 \(\psi=(\lnot t\lor \varphi(Y,X))\land(t\lor\varphi(X,Y))\)。先手在 or 状态而后手在 and 状态,双方都想选择停机态,故先手获胜时状态位于接受态,后手获胜时状态位于拒绝态,于是完成规约。
上述游戏可以归约到国际象棋或中国象棋。
国际跳棋也是 EXP 完全的。
现在考虑一个类似中国跳棋的游戏(并非起源于中国):在棋盘上有一些格子有双方共用的棋子,有若干规则 \((x,y,z)\) 表示如果 \(x,y\) 处有棋子而 \(z\) 处没有则可以把 \(x\) 处的棋子移到 \(z\) 处。双方轮流按照该规则下,先把棋子放到某指定点 \(t\) 或先让对方不能动者输。这个游戏是 EXP 完全的。其显然属于 \(\EXP\),下面用 APSPACE 规约:
在交错图灵机中,如果转移 \(\delta(q,a)\) 有 \((q',a',d)\),其中 \(q,q'\) 是状态,\(a,a'\) 是字符,\(-1\le d\le 1\) 是带头移动距离,则构建如下规则:\(([q,l],[l,a],[q,l,a,a']),([l,a],[q,l,a,a'],[l,a']),([q,l,a,a'],[l,a'],[q',l+d])\),其中 \([q,l]\) 表示状态位于 \(q\) 而带头位于 \(l\),\([k,a]\) 表示带头上第 \(k\) 个字符是 \(a\),上述转移用一个中间状态和三步迫使状态转移完整进行并让下一个转移的选择权交换。
压缩电路满足性问题:给定一个能输出电路的电路。具体地说,此电路在输入 \(i\) 和 \(k\) 时输出原电路第 \(i\) 个逻辑门的第 \(k\) 个相邻逻辑门的类型和编号。其可以编码 \(2^{O(n)}\) 的 SAT 问题。其是 \(\nEXP\) 完全的,因为对指数级别的计算历史上的库克-勒维规约,可以用多项式长度的电路生成所需内容。
翻转棋 Reversi 和五子棋都是 PSPACE 完全的,扫雷是 NP 完全的,可以用扫雷构造电路。还有很多游戏如俄罗斯方块、2048、Wordle 等都是 NP 完全的。
随机计算
概率形图灵机定义如下:它如非确定性图灵机一样有两个转移函数 \(\delta_1\) 和 \(\delta_2\),每步以 \(1/2-1/2\) 概率决定选用前者还是后者转移。其运行时间如非确定性图灵机一样定义为所有选择中最大值。如果概率形图灵机 \(M\) 对任意 \(x\in L\) 满足 \(P(M(x)=1)\ge 2/3\),对任意 \(x\notin L\) 满足 \(P(M(x)=1)\le 1/3\),则称 \(M\) 判定 \(L\)。\(\bpp\) 为概率形图灵机能在多项式时间内判定的问题。
\(L\in\bpp\) 的另一种定义是存在多项式时间图灵机 \(N\) 和多项式 \(p\) 使得 \(\Pr\limits_{|r|=p(|x|)}[N(x,r)=L(x)]\ge 2/3\)。由该定义得 \(\p\subseteq\bpp\subseteq\EXP\),目前仍未证明 \(\bpp\neq\nEXP\)。
多项式恒等测试
给定两个用代数电路(将布尔电路的操作符和布尔值换成算数操作符和数)表示的多元多项式,问它们是否相等。注意代数电路表示的多项式的项的次数可能是指数级的
Schwartz-Zippel Lemma:令 \(p(x_1,\dots,x_m)\) 是总次数(\(x_1^{e_1}\dots x_m^{e_m}\) 的次数定义为 \(\sum e_k\),多项式总次数是其内各单项式次数最大值),令 \(S\) 为一些整数构成的有穷集合。如果 \(a_{1\dots m}\) 是可放回式从 \(S\) 中随机选择的整数,则 \(P(p(a_{1\dots m})\neq 0)\ge 1-\frac{d}{|S|}\)。
规模为 \(m\) 的代数电路至多包含 \(m\) 次乘法,其多项式次数至多为 \(2^m\)。从 \(1\sim 10\cdot 2^m\) 中随机选 \(n\) 个数 \(x_{1\dots n}\) 并带入计算是否为 \(0\),依 SZ 引理,错误概率(把非零多项式判成零的概率)至多为 \(\frac 1 {10}\)。注意到中间值值域不可接受,于是随机取一个 \(\le 2^{2m}\) 的数 \(k\) 并计算 \(\bmod k\) 的结果。如果最终值不为 \(0\),\(k\) 不能整除 \(y\) 的概率至少为 \(\frac 1 {4m}\),重复运行 \(O(m)\) 次即可。由素数定理得 \(m\) 充分大时 \(\le 2^{2m}\) 的质数至少有 \(\frac{2^{2m}}{2m}\) 个,而带入多项式后得到的值 \(y\le (10\cdot 2^m)^{2^m}\) 至多有 \(\ln y\le 5m2^m\) 个不同质数,因此 \(m\) 足够大时至少有 \(\frac{2^{2m}}{4m}\) 个质数与 \(y\) 互质。
据此可以得到 Tutte 矩阵的正确性。此外,考虑一个简单一点的应用:对 \(n+n\) 个点的二分图,令 \(A_{ij}=[(i,j)\in E]x_{ij}\),依行列式定义,求 \(|A|\) 是否为零可以直接得到是否存在完美匹配。
单面错误和零面错误
如果在 \(\bpp\) 中限制 \(x\notin L\) 时 \(P(M(x)=1)=0\),得到类 \(\rp\),即图灵机永远不会把错的判成对的。注意按定义有 \(\rp\subseteq\np\),直接取选择过程为证明就行。类似地,类 \(\corp\) 中的图灵机永远不会把对的判成错的。定义期望运行时间为多项式,输出一定正确的图灵机所判定的语言集为 \(\zpp\)。
定理:\(\zpp=\rp\cap\corp\)。这与 \(\p=\np\cap\conp\) 是否成立类似,但后者的答案目前仍是未知的。
证明:如果既有 \(\rp\) 图灵机,又有 \(\corp\) 图灵机,一起跑两台图灵机直到有一台返回一个保真的结果就得到 \(\zpp\) 图灵机。反过来运行 \(\zpp\) 图灵机三倍期望时长,依 Markov 不等式图灵机跑不出解的概率 \(\le 1/3\),此时直接拒绝就能得到 \(\rp\) 图灵机,接受就能得到 \(\corp\) 图灵机。
随机复杂性类定义中的常数
\(\bpp\) 中结果正确率 \(2/3\) 可以替换为 \(1/2+n^{-c}\),其中 \(c\) 是常数。
证明:重复运行 \(O(n^{2c+O(1)})\) 次,定义随机变量 \(X_i\) 表示第 \(i\) 次运行 \(M(x)=L(x)\) 是否成立,令 \(X\) 为各随机变量之和,取 \(\delta=n^{-c}\),则 \((1/2+n^{-c})(1-n^{-c})=1/2+n^{-c}/2-n^{-2c}\) 在 \(n\) 足够大时 \(>1/2\),而 \(P(X\le (1-\delta)\mu)\le e^{-\delta^2\mu/2}\),因此选取过半结果作为最终结果的正确率很高。将常数 \(1/2\) 改为 \(0\) 可以类似修改 \(\rp\) 和 \(\corp\) 的定义。
\(\rp\) 和 \(\corp\) 中的图灵机也可以使用期望运行时间定义,使用 Markov 不等式,在运行时间太长时停机能得到接受/拒绝概率改变量不大。此外,投掷的硬币可以是非均匀的。
BPP 与别的复杂性类的关系
定理:\(\bpp\subseteq\p_{/\text{poly}}\)。证明:设输入长度为 \(n\),提供的随机串长度为 \(m\),且不妨多跑几次使得错误概率 \(\le 2^{-n-1}\),则对任意输入 \(x\),至多有 \(2^{m-n-1}\) 个随机串使得结果错误。对所有 \(x\) 求和,至多有 \(2^{m-1}\) 个随机串使得其在某个输入上的结果错误。找一个在所有输入上运行结果都正确的随机串放到电路里就行。
Sipser-Gács-Lautemann 定理:\(\bpp\subseteq\sum_2^p\cap \prod_2^p\)。只证 \(\bpp\subseteq\sum_2^p\),因为 \(\bpp\) 对取补封闭。
使用错误概率 \(\le 2^{-n}\) 的接受长度为 \(m=\operatorname{poly}(n)\) 的随机串 \(r\) 的图灵机 \(M(x,r)\)。令 \(S_x\) 包含 \(M(x,r)=1\) 的所有 \(r\) 构成的集合,则要么 \(|S_x|\ge (1-2^{-n})2^m\),要么 \(|S_x|\le 2^{m-n}\)。下面用两个量词判定具体是哪种情况。
记 \(S\oplus u\) 表示 \(\{x\oplus u:x\in S\}\),令 \(k=\lceil\frac m n\rceil+1\)。
对任意满足 \(|S|\le 2^{m-n}\) 的集合和任意 \(k\) 个向量 \(u_{1\dots k}\),有 \(\bigcup S\oplus u_i\neq\{0,1\}^m\)。证明:\(n\) 足够大时 \(k|S|<2^m\)。
反过来,如果 \(|S|\ge (1-2^{-n})2^m\),则存在 \(k\) 个向量 \(u_{1\dots k}\),有 \(\bigcup S\oplus u_i=\{0,1\}^m\)。证明:如果随机选取 \(u_{1\dots k}\),证明事件发生概率 \(>0\) 即可。对给定串 \(r\),\(\Pr\limits_{u_{1\dots k}}[r\notin\bigcup S\oplus u_i]=\prod\limits_{i=1}^kP(r\notin S\oplus u_i)\le 2^{-nk}\),该值 \(<2^{-m}\),用 union bound 得到原命题。
于是用 \(\exists u_{1\dots k},\forall |r|=m\),\(M(x,r+u_i)\) 某个 \(i\) 接受可以实现原 \(\bpp\) 的效果,而该表达式是 \(\sum_p^2\) 的。
目前 BPP 还没有找到完全问题,其定义是依据语义的,测试图灵机是否具有这种性质是不可判定问题。此外,其内也目前没有找到分层定理。
能证明如果无向图中两点联通则从 \(u\) 随机游走到 \(v\) 的期望步数不超过 \(10n^4\),利用 Markov 不等式能说明该问题存在对数空间概率形图灵机做法。
Additive Spanner
一张无向联通图的一个生成子图如果满足如下性质:1. 稀疏 2. 任意两点间距离最多增加常数 \(k\),称为 \(k\)-additive spanner,给出一个 \(O(n^{3/2})\) 条边的 \(k=2\) 的构造。记最终结果为 \(S\)。
随机选 \(n^{1/2}\) 结点,记作 \(W\),将 \(W\) 中所有点的最短路径树放入 \(S\)。然后对所有结点 \(u\),如果 \(u\) 与 \(W\) 相邻,则将 \((u,W)\) 加入 \(S\),否则将包含 \(u\) 的所有边加入 \(S\)。度数为 \(\Omega(n^{1/2})\) 时其大概率与 \(W\) 相邻,故三个部分加的边都大致不超过 \(O(n^{3/2})\)。多走的路径只可能在进入 \(W\) 时出现,最坏情况下只会多走两条边。
利用随机性能够证明 spanner 图的存在性,不利用随机性可能需要复杂说明。
\(k=4\) 的 \(\tilde O(n^{7/5})\) 条边的构造(\(\tilde O\) 表示忽略 \(\log n\) 的常数次方):称“重点”为度数 \(>n^{2/5}\) 的点。随机选 \(n^{2/5}\log n\) 个点,称作 \(X\);随机选 \(n^{3/5}\log n\) 个点,称作 \(Y\)。将 \(X\) 中所有点最短路树加入 \(S\)。对所有点 \(u\),如果 \(u\) 是重点存在 \((u,w)\) 使得 \(w\in Y\) 加边 \((u,w)\),否则加所有边 \((u,v)\)。此处重点 \(u\) 会大概率与 \(Y\) 中的点相邻,而将轻点所有边都加入 \(S\) 可以接受,因此加边个数大致为 \(\tilde O(n^{7/5})\)。
最后对所有 \((v_1,v_2)\in Y\),从所有满足性质的二元组 \((u_1,u_2)\) 中找到距离最小的一对:需要满足的性质为 \(u_1\) 到 \(u_2\) 的最短路上有 \(<n^{1/5}\) 个重点,且边 \((u_1,v_1)\) 和 \((u_2,v_2)\) 存在。找到后把 \((u_1,u_2)\) 最短路,\((u_1,v_1)\),\((u_2,v_2)\) 加入 \(S\)。由于轻点所有边在 \(S\) 内,只需要统计重点之间边的数量,量级为 \(|Y^2|n^{1/5}\)。
误差分析:由于轻点所有边在 \(S\) 内,只考虑重点 \(s\) 到重点 \(t\) 的最短路。如果路上有 \(\ge n^{1/5}\) 个重点,则最短路上点的邻居数量至少为 \(\Omega(n^{3/5})\)(注意到一个点至多与最短路中两个点相邻),故高概率存在一个 \(x\in X\) 与最短路相邻,\(s\to x\to t\) 的两条路都被记录,因此误差为 \(2\)。否则,\(s,t\) 以高概率分别与 \(v_1,v_2\in Y\) 相邻,\(v_1\to v_2\) 有走法为 \(v_1\to u_1\to u_2\to v_2\) 而按定义 \(u_1\to u_2\) 长度不能超过 \(s\to t\),因此误差为 \(4\)。
\(k=6\) 的情况有 \(O(n^{4/3})\) 的解,已经证明了不存在 \(O(n^{4/3-\varepsilon})\) 条边的 \(k\) 为常数的 spanner 图。
Miller-Rabin
输入奇数 \(N\),随机选一个 \(a\in\Z_N^+\),计算 \(a^{N-1}\bmod N\),不是 \(1\) 拒绝。否则执行如下代码:
int k = N - 1;
while (k % 2 == 0)
{
k /= 2;
if (power(a, k) % N == -1) return true;
if (power(a, k) % N != 1) return false;
}
return true;
令 \(P\) 为奇质数,对偶数 \(k\) 和整数 \(a\in\Z_P^+\),如果 \(a^k\equiv1\pmod P\),则 \(a^{k/2}\equiv\pm 1\pmod P\),因此算法在 \(N\) 是奇质数时一定接受。
如果 \(N\) 是奇合数,则有一个 \(a\in\Z_P^+\) 使得 \(a\) 与 \(N\) 互质且测试不通过。
若 \(N=p^i\),其中 \(p\) 是质数,则 \((1+p^{i-1})\equiv 1\pmod N\),因此 \(t^{N-1}\not\equiv 1\pmod N\)。
若 \(N\) 是两个互质数 \(q,r\) 的乘积,找一个 \(h^k\equiv -1\pmod N\) 使得 \(k=(N-1)/2^i\) 尽可能大。依 CRT,有 \(t\) 使得其对 \(q\) 取模是 \(h\),对 \(r\) 取模是 \(1\)。因此 \(t^k\equiv-1\pmod q,t^k\equiv 1\pmod r\),从而 \(t^{2k}\equiv1\pmod N,t^{k}\not\equiv\pm1\pmod N\)。
再注意到如果 \(a\neq b\) 让算法接受,\(t\) 让算法拒绝,则 \(at\bmod P\neq bt\bmod P\) 且它们让算法拒绝,因此让算法接受的 \(a\) 不超过让算法拒绝的 \(a\)。
Schwartz-Zippel 引理的证明
令非零多项式为 \(p(x_1,\dots,x_n)\),度数为 \(d\),整数集合为 \(S\),则令 \(x_{1\dots n}\) 为独立均匀随机的 \(S\) 中的值 \(a_{1\dots n}\) 时 \(p\) 取值为 \(0\) 的概率不超过 \(\frac d {|S|}\)。
对变量数 \(n\) 规约。如果 \(n=1\),则多项式至多有 \(d\) 个根,概率不超过 \(\frac{d}{|S|}\)。
否则拆开 \(p\),写成 \(p(x_1,\dots,x_n)=\sum x_1^ip_i(x_2,\dots,x_n)\)。令 \(k\) 为最大的 \(i\) 使得 \(p_i(x_2,\dots,x_n)\neq 0\)。由归纳假设 \(P(p_k(r_2,\dots,r_n)=0)\le (d-k)/|S|\),而当其不是 \(0\) 时 \(p(x_1,r_2,\dots,r_n)\) 是关于 \(x_1\) 的一元 \(k\) 次多项式,即 \(P(p_k(r_1,\dots,r_n)=0|p_k(r_2,\dots,r_n)\neq 0)\le k/|S|\),两式相加即得 \(d/|S|\)。相加运用了不等式 \(P(E_1)=P(E_1|E_2)P(E_2)+P(E_1|E_2^c)P(E_2^c)\le P(E_2)+P(E_1|E_2^c)\)。
目前 \(\bpp=\p\) 是否成立是未知的,但是两个重要的有随机化算法的问题(对数空间无向图连通性和质数判定)目前都有确定性算法。
矩阵乘法
矩阵乘法的正常做法:\(O(n^3)\)。Strassen: \(O(n^{2.81})\)。Coppersmith and Winograd: \(O(n^{2.376})\)。[Alman, Duan, V. Williams, Xu, Xu, Zhou] 的 More Asymmetry Yields Faster Matrix Multiplication 中给出的复杂度上界是 \(O(n^{2.371339})\)。
给定两个布尔矩阵 \(A,B\),令 \(C=AB\),计算一个矩阵 \(W\) 使得如果 \(C_{ij}>0\),则 \(W_{ij}\) 是满足 \(A_{ik}B_{kj}=1\) 中的 \(k\) 之一。问如何用快速矩乘计算之。
如果已知 \(C_{ij}\le 1\),直接令 \(A'_{ij}=jA_{ij}\) 并计算 \(A'B\) 得到 \(W\)。
当 \(C_{ij}>1\) 时需要引入随机性。假设有 \(n\) 个盒子,其中 \(k\) 个里面有一个球,如果重复 \(d\) 次,每次均匀独立随机打开盒子,则最后恰有一个球的概率是 \(d\frac{k}n(1-\frac k n)^{d-1}\),令 \(d=\frac n k\) 时其 \(>1/e\)。如果 \(\frac n {2k}\le d\le\frac n k\) 则概率 \(\ge\frac 1 {2e}\)。由于失败概率是常数,重复 \(O(\log n)\) 次可以将其缩减到 \(\frac 1 {n^c}\)。
利用此得到针对原问题的随机采样做法:固定 \(d=1,2,4,8,\dots\),每次随机选 \(A\) 中 \(d\) 列和 \(B\) 中 \(d\) 行矩乘(对应打开盒子),重复 \(O(\log n)\) 次。得到的结果是否正确容易验证。如果每个位置的失败概率都是 \(O(1/n^3)\),则总共的失败概率上界为 \(O(1/n)\)。
利用矩乘的无向图三元环判断:考虑邻接矩阵 \(A\)。如果 \((A^2)_{i,j}>0\) 则存在 \(k\),满足有边 \((i,j),(j,k)\)。因此如果存在 \((i,j)\) 使得 \(A_{i,j}=1,(A^2)_{i,j}>0\) 则存在三元环。
四元环判断:存在 \((i,j)\) 使得 \((A^2)_{i,j}>1\)。
四元环子图判断:无向图中是否存在四个点使得它们的导出子图恰好是四元环。
[Vassilevska, Wang, Williams, Yu 2014] 中给出除了团和独立集的四点导出子图都能在 \(\tilde O(n^{\omega})\) 时间内以高概率判断存在性,其中 \(\omega\) 是矩阵乘法复杂度指数。其算上述问题的大致思路如下:
考虑 \(X=\sum\limits_{(u,v)\in E}\binom{(A^2)_{u,v}}2\),这样能算菱形(团砍掉一条边)和团的数量,其中菱形算了一次(只在菱形的对角边算),团算了六次(每条边都能当成对角边),但它们难以区分。
注意到 \(X\bmod 6\neq 0\) 时图必然含有一个菱形。如果模 \(6\) 余 \(0\) 则随机删点再重新算该值,如果删掉一些点后菱形数量不是 \(6\) 的倍数算法就会接受。可以重复该算法很多遍,如果图中没有菱形其一定会拒绝。
在考虑 \(Y=\sum\limits_{(u,v)\notin}\binom{(A^2)_{u,v}}{2}\),这里四元环算了两次而菱形算了一次。于是 \(X-Y\) 是六倍团数减去两倍四元环数,可以利用类似办法判断是否存在四元环。
交互式证明
设 \(f,g\) 是两个函数,\(k\) 是一个可以依赖输入规模的整数,\(f,g\) 在输入 \(x\) 上轮流进行 \(k\) 轮交互(形式化定义如下:令 \(a_1=f(x),a_2=g(x,a_1),a_3=f(x,a_1,a_2)\),以此类推),交互结束时 \(f\) 的输出定义为 \(f(x,a_1,\dots, a_k)\)。
称 \(f\) 为验证者,\(g\) 为证明者,交互过程可以理解为 \(g\) 需要向 \(f\) 证明某件事,而 \(f\) 需要确保 \(g\) 真的在证明而非在欺骗自己。
称语言 \(L\) 存在确定型交互证明系统,如果 \(f\) 是确定性图灵机,对所有 \(x\in L\) 存在 \(g\) 使得交互后 \(f\) 返回 \(1\),对所有 \(x\notin L\),不存在 \(g\) 使得交互后 \(f\) 返回 \(1\)。注意 \(g\) 的计算能力不限。
上述定义的复杂性类是 \(\np\)。首先 \(\np\) 可以一回合证明。然后注意到如果 \(x\in L\),交互过程可以直接当证明,查验 \(f(x)=a_1,f(x,a_1,a_2)=a_3\) 等是否成立就行。反过来,如果这样的交互过程存在,定义 \(g(x,a_1)=a_2,g(x,a_1,a_2,a_3)=a_4\),以此类推,故 \(x\in L\)。
IP
在 \(f\) 中引入随机性可以极大提升计算能力。
例:假设一个人手上有一个红苹果和一个黄苹果,两个苹果形状大小都相似,现在需要向一个色盲患者证明这两个苹果颜色不同。色盲患者可以一手拿一个苹果,抛硬币决定是否交换苹果,然后让对方猜自己是否交换过苹果。如果对方连续一百次都猜对了,有理由相信这两个苹果确实颜色不同。
将 \(f\) 改为概率形图灵机,\(k\) 轮交互后如果 \(x\in L\) 则存在 \(g\) 使得 \(f\) 返回 \(1\) 的概率 \(\ge 2/3\),如果 \(x\notin L\) 则对任意 \(g\),\(f\) 返回 \(1\) 的概率 \(\le 1/3\)。称这样定义的复杂性类为 \(\ip[k]\),记 \(\ip=\bigcup\ip[n^c]\)。如同 \(\bpp\) 中一样,利用切尔诺夫界,正确概率可以收紧到 \(1-2^{-n^s}\),其中 \(s\) 是固定常数。这样的模型称为私有随机源模型,因为证明者看不到交互者用的随机数。
虽然证明者可以使用任意的函数,但由于证明者可以在多项式空间内搜出自己对 \(f\) 的每个问题回答 \(0\) 还是 \(1\) 后如何选择才能让 \(f\) 最终返回 \(1\) 的概率最大,即找到最优的证明者并根据其来回答问题,因此 \(\ip\subseteq\PSPACE\)。此外,由此可见如果证明者也有一个私有随机源,定义的复杂性类不会改变。
此外,如果把 \(2/3\) 改成 \(1\),\(\ip\) 不变,但如果把 \(1/3\) 改成 \(0\),\(\ip\) 会变成 \(\np\)。
图不同构问题
这是一个 \(\conp\) 问题,目前不知道其是否属于 \(\np\)。
给定两张图 \(G_1,G_2\),问它们是否不同构。\(f\) 策略如下:每次随机挑选一个图 \(G_i\),将其点打乱,要求 \(g\) 指出 \(i\) 是 \(1\) 还是 \(2\)。如果 \(g\) 说对了就接受,不然就拒绝。因为如果图同构 \(g\) 只能靠猜,多让 \(g\) 猜几次就能看出来。
二次非剩余问题
给质数 \(P\) 和整数 \(a\),问是否 \(\forall x,x^2\not\equiv a\pmod P\)。\(f\) 策略如下:随机一个布尔值 \(b\) 和一个数 \(r\),如果 \(b=0\) 发送 \(r^2\bmod P\),如果 \(b=1\) 发送 \(ar^2\bmod P\),让 \(g\) 猜 \(b\)。如果 \(a\) 是二次剩余,则 \(ar^2=(xr)^2\) 和 \(r^2\) 服从的概率分布相同,故 \(g\) 只能靠猜。反过来则一个是二次剩余一个是二次非剩余,\(g\) 可以让 \(f\) 以概率 \(1\) 接受输入。
公有随机源
如果要求 \(\ip[k]\) 的定义中 \(f\) 必须在每轮交互中把本步所有自己用到的随机数全部发给 \(g\),则得到 \(\ip[k]\) 的一个子集 \(\am[k]\),意为亚瑟-梅林,含义是梅林虽然不知道接下来亚瑟扔硬币的结果,但能用魔法得知亚瑟投掷硬币已经得出的结果。将 \(\am[2]\) 记作 \(\am\),即亚瑟先发送信息给梅林,梅林回复亚瑟,随后亚瑟在交互过程上用确定性函数(不能调用新随机源)得出结果。如果梅林先发消息给亚瑟,亚瑟利用随机源、梅林的消息和输入做决定,此时得到的复杂性类记作 \(\ma\)。
能够证明 \(\forall k\ge2,\am[k]=\am[2]\),其中 \(k\) 是常数。
对任意函数 \(k:\N\to\N\),如果 \(k(n)\) 能在多项式时间内被计算,则 \(\ip[k]\subseteq\am[k+2]\)。
定理:图不同构问题是 \(\am[2]\) 的。
证明使用不同的角度观察图不同构:令 \(S=\{(H,\pi):H\cong G_1\lor H\cong G_2,\pi(H)=H\}\),则如果两图同构 \(|S|=2n!\),否则 \(|S|=n!\)。
两两独立的哈希函数:如果某 \(\{0,1\}^n\to\{0,1\}^k\) 的函数族 \(H\) 内满足对给定 \(x,y\),\(\Pr\limits_{h\in H}[h(x)=y]=2^{-k}\),且对任意 \(x\neq x'\) 和任意 \(y,y'\),有 \(\Pr\limits_{h\in H}[h(x)=y\land h(x')=y']=2^{-2k}\),称 \(H\) 是两两独立的哈希函数族。
给出一个 \(n=k\) 的构造:长度为 \(n\) 的 \(01\) 串对应一个 \(\text{GF}(2^n)\) (系数对 \(2\) 取模的度数 \(<2^n\) 的多项式)中的元素,如果对任意 \(a,b\in\operatorname{GF}(2^n)\),\(h_{a,b}(x)=ax+b\),则 \(h_{*,*}\) 是两两独立哈希函数族。如果 \(k>n\) 则在输入末尾补 \(k-n\) 个 \(0\),如果 \(k<n\) 则截去输出末位 \(n-k\) 位,如此可以得到对任意 \(n,k\) 的两两独立哈希函数族。
证明:\(h_{a,b}(x)=y\) 当且仅当 \(ax=y-b\),易见对任意 \(a\) 只有恰好一个 \(b\) 满足条件。而 \(h_{a,b}(x)=y\) 且 \(h_{a,b}(x')=y'\) 意味着 \(ax=y-b,ax'=y'-b\),即 \(a=(y-y')(x-x')^{-1}\),由于 \(x\neq x'\),\(a\) 良定义,因此 \(b\) 也能被唯一确定。
集合下界协议
给定集合 \(S\subseteq\{0,1\}^n\),其成员资格可被验证。\(f\) 和 \(g\) 都知道整数 \(K\),\(g\) 的目标是让 \(f\) 相信 \(|S|\ge K\),且 \(f\) 在 \(|S|\le K/2\) 时高概率拒绝。令 \(k\) 为满足 \(2^{k-2}<K\le 2^{k-1}\) 的一个整数。
\(f\):从 \(\{0,1\}^n\to\{0,1\}^k\) 的两两独立哈希函数族中随机选一个 \(h\),从长度为 \(k\) 的 \(01\) 串中随机选一个 \(y\),将 \(h\) 和 \(y\) 发给 \(g\)。
\(g\):找到 \(x\in S\) 使得 \(h(x)=y\),将 \(x\) 和 \(x\in S\) 的证明发给 \(f\)。
如果 \(f\) 发现 \(h(x)=y\) 且收到的证明表明 \(x\in S\) 则接受,否则拒绝。
证明:令 \(p=K/2^k\)。如果 \(|S|\le K/2\),则 \(|h(S)|\le p2^k/2\),因此证明者以至多 \(p/2\) 概率接受。现在需要说明 \(|S|\ge k\) 的概率比较高,然后并行地重复跑几次就能放大概率差。
运用容斥原理,\(\Pr\limits_{h\in H}[\exists x\in S,h(x)=y]\ge \sum\limits_{x\in S}P(h(x)=y)-\frac 1 2\sum\limits_{x\neq x'\in S}P(h(x)=h(x')=y)\),由 \(H\) 的性质,前和式内概率均为 \(2^{-k}\),后和式内概率均为 \(2^{-2k}\),接受概率至少为 \(|S|/2^k-\frac 1 2|S|^2/2^{-2k}=|S|/2^k(1-|S|/2^{k+1})\ge\frac 3 4\frac{|S|}{2^k}\)。
证明 \(\ip[k]\subseteq\am[k+2]\) 的过程与上述过程有联系。考虑将图不同构从私有随机源转到公有随机源的过程:\(S\) 对应协议中验证者可能发送的所有消息,如果两个图同构则发送的消息完全隐藏了随机选了哪个图,否则其会暴露选了哪个图。因此,如果考虑从验证者的随机源到发送消息之间的映射,前者是二对一,后者是一对一,因此后者情况下集合 \(S\) 的大小是前者情况下集合 \(S\) 的大小的两倍。可以认为公用随机源中的证明者试图向验证者说明,在私有随机源的交互协议下,验证者发送某些信息的概率较高,即证明者能够让验证者相信自己能说服私有随机源下的验证者。
IP=PSPACE
证 TQBF 属于 IP 就行。
先考虑为 \(\overline{\text{SAT}}\) 设计交互协议,更具体地为 \(\#\text{SAT}_D\) 设计交互协议,即对 \(\lang\phi,K\rang\) 判断 \(\phi\) 是不是恰好存在 \(K\) 个满足性赋值的 CNF 公式,\(K=0\) 时的特例是所求协议。
布尔公式算术化
用 \(ab\) 表示与,\(a+b-ab\) 表示或,\(1-a\) 表示非,可以将布尔公式表示成多项式。保留括号可以得到多项式有 \(O(|\phi|)\) 表示形式,令多项式为 \(P_{\phi}\),则满足性赋值公式为 \(\sum\limits_{x_{1\dots n}}P_{\phi}(x_1,\dots,x_n)\)。证明者挑一个 \(2^{|\phi|}\) 级别的质数 \(P\),验证者验证其满足条件,此后运算全部在模 \(P\) 意义下进行。
和校验协议
证明者对有多项式规模表示(从而对任意赋值能在多项式时间内计算)的 \(d\) 次多项式 \(g\) 和整数 \(K\),质数 \(P\),说明 \(K\equiv\sum\limits_{x_{1\dots n}\in\{0,1\}^n}g(x_1,\dots,x_n)\pmod P\)。可以定义一个一元 \(d\) 次多项式 \(h(X_1)=\sum\limits_{x_{2\dots n}\in\{0,1\}^{n-1}}g(X_1,x_2,\dots,x_n)\),如果原式成立则 \(h(0)+h(1)=K\)。
如果 \(n=1\),直接验证 \(g(0)+g(1)=K\) 是否成立,否则要求证明者发送一个多项式,其应当是 \(h(X_1)\)。在拿到证明者给的多项式 \(s\) 后,验证是否有 \(s(0)+s(1)=K\),不成立则拒绝,否则随机选一个数 \(a\),递归验证 \(s(a)=h(a)\) 是否成立,这样 \(n\) 的规模减一。
论断:如果原式不成立,拒绝概率至少为 \((1-\frac d P)^n\),质数够大时约为 \(1-dn/P\)。
证明:使用归纳法。\(n=1\) 时拒绝概率为 \(1\)。\(n>2\) 时如果证明者如实回答则验证者直接拒绝,否则非零多项式 \(s(X_1)-h(X_1)\) 至多有 \(d\) 个根,故 \(P(s(a)\neq h(a))\ge 1-d/P\),接下来需要证明的也是一个错误的等式,因此由归纳即得。
注意把 \(a\) 发给验证者不会有影响,因此该协议是公有随机源协议。
TQBF 协议
TQBF 可以表示成 \(\prod\limits_{x_1}\sum\limits_{x_2}\prod\limits_{x_3}\dots P_\phi\neq 0\)。上述协议不能直接搬过来,因为 \(\prod\) 会导致多项式次数变成指数级别。
注意到由于带入的值一定在 \(0/1\) 内,因此 \(x^k\) 可以直接当作 \(x\)。定义 \(Rx_i(p)\) 为线性化运算符,为 \(x_ip(x_{1\dots i-1},1,x_{i+1\dots n})+(1-x_i)p(x_{1\dots i-1,0,x_{i+1\dots n}})\),利用其构造一个表达式让结果和所有中间多项式次数都较低,具体地让 \(\phi'=\forall x_1R_{x_1}\exists x_2Rx_1Rx_2\forall x_3Rx_1Rx_2Rx_3\dots \phi\) 就能直接照搬前面的协议了,边界情况:\(\exists\) 用 \(s(0)+s(1)=K\) 判断,\(\forall\) 用 \(s(0)s(1)=K\) 判断,\(R\) 用 \((1-x_1)s(0)+x_1s(1)=K\) 判断,注意判断到该步时 \(x_1\) 已经被赋值过了。新多项式长度是平方级别,拒绝概率分析同上,每次都需要在下一个回合中拒绝一个错误的结论。
由此能得到推论:如果 \(\PSPACE\subseteq\p_{/\text{poly}}\),则 \(\PSPACE=\ma\),因为梅林所需的计算能力是 \(\PSPACE\) 级别,只要在第一回合中把自己实际执行的多项式规模电路发给亚瑟,亚瑟在之后的所有想要问梅林的地方直接问电路就行。
积和式协议
积和式的性质:如果有一个神谕能在 \(\mathbf F^{n\times n}\) 中比例为 \(1-\frac 1 {3n}\) 的输入上正确计算积和式(假设该域的大小足够大),则有一个积和式的高效随机算法。
令 \(A\) 是输入矩阵,随机一个矩阵 \(R\),令 \(B(x)=\operatorname{perm}(A+xR)\),则 \(B\) 是一元 \(n\) 次多项式,且对任意固定的 \(a\neq 0\),\(A+aR\) 是随机矩阵,神谕能正确计算 \(B(x)\) 的概率至少为 \(1-\frac 1 {3n}\)。于是随机 \(n+1\) 个 \(a\) 对多项式插值,由联合界限正确概率至少为 \(1-\frac{n+1}{3n}\approx\frac 2 3\)。
积和式协议比 TQBF 和 \(\#\text{SAT}_D\) 的协议早发明。形式化定义:给定三元组 \(\lang A,P,k\rang\),其中 \(A\) 是一个值对 \(P\) 取模的 \(n\times n\) 矩阵,\(P>n^4\) 是质数,判断 \(A\) 的积和式是不是 \(k\)。
用归纳构造,假设维数 \(\le n-1\) 的协议已经构造,且正确接受概率为 \(1\),错误接受概率 \(\le\varepsilon\)。构造一个对 \(n\times n\) 矩阵的正确接受概率为 \(1\),错误接受概率 \(\le\varepsilon+n^2/p\) 的协议。
记 \(D_A(i)\) 为删除 \(A\) 第一行和第 \(i\) 列后的矩阵,有 \(\operatorname{perm}(A)=\sum A_{1,i}D_A(i)\)。定义 \(D_A(x)\) 为依据 \(D_A(1),D_A(2),\dots,D_A(n-1)\) 插值得到的次数不超过 \(n\) 的多项式矩阵,则 \(\operatorname{perm}(D_A(x))\) 是一个次数不超过 \((n-1)n<n^2\) 的一元多项式。
协议:证明者发一个次数 \(<n^2\) 的多项式 \(g(x)\),声称其是 \(\operatorname{perm}(D_A(x))\)。
验证者检查 \(k=\sum A_{1,i}g(i)\) 是否成立,不成立拒绝输入。否则随机选择一个元素 \(b\),要求对方证明 \(g(b)=\operatorname{perm}(D_A(b))\),从而将 \(n\) 缩减了一。
如果证明者诚实,接受概率一定为 \(1\)。否则由于 \(g(x)\) 和 \(\operatorname{perm}(D_A(x))\) 至多在 \(n^2\) 个 \(x\) 上取相同的值,如果 \(b\) 不满足该条件则证明者需要证明错误结论,其能说服验证者的概率至多为 \(\varepsilon\)。
展开得到错误接受概率不超过 \(\frac{n^2}{p}+\frac{(n-1)^2}{p}+\frac 1 p\le\frac{n^3}{p}\),依条件其 \(\le\frac 1 n\)。
定义中的细节
如果在 \(\ip\) 定义中要求对正确输入必须以 \(1\) 的概率接受(完备性为 \(1\))则定义的类为 \(\ip\) 不变(TQBF的协议就是完备性为 \(1\) 的),如果要求对错误输入必须以 \(1\) 的概率拒绝(可靠性为 \(1\))则定义的类为 \(\np\),因为此时 \(x\in L\) 当且仅当存在一个随机串和一个合法交互过程使得某确定性多项式图灵机接受它们。
对 \(\ma\) 的定义可以改为:\(L\in\ma\) 当且仅当存在多项式时间内可判定语言 \(R\) 使得对随机串 \(r\),如果 \(x\in L\) 则 \(\exists m,P((x,m,r)\in R)\ge 2/3\),否则 \(\forall m,P((x,m,r)\in R)\le 1/3\)。类似地,\(\am\) 内语言的定义可改为如果 \(x\in L\),则 \(P(\exists m,(x,m,r)\in R)\ge 2/3\),否则 \(P(\exists m,(x,m,r)\in R)\le 1/3\)。这两种定义中,\(m\) 是梅林发送的消息,认为其长度仅与输入有关,\(r\) 是亚瑟的随机串。
由此可得,如果 \(L\in\ma\),则 \(\exists m,P((x,m,r)\in R)\ge 2/3\Rightarrow P(\exists m,(x,m,r)\in R)\ge 2/3\)。而当 \(\forall m,P((x,m,r)\in R)\le\varepsilon\) 时,\(P(\exists m,(x,m,r)\in R)\le 2^{|m|}\varepsilon\)。由于亚瑟可以通过重复选取独立随机的 \(r\) 让 \(\varepsilon\) 指数级变小,亚瑟可以让 \(2^{|m|}\varepsilon\le 1/3\)。上述论证说明直接交换亚瑟和梅林的发信顺序,同时并行重复就能构造出 \(\ma\subseteq\am\)。
该结论的推论是对任意常数 \(k\ge 2\),\(\am[k]=\am[2]\),因为我们可以用类似的方式交换 \(\am[k]\) 中亚瑟和梅林发送信息的顺序。一次交换错误概率迭代次数要乘以 \(O(m)\),可以重复常数次交换。
依据 [Babai & Moran, 1988] 有更强的结论:当 \(t(n)\ge 2\) 时 \(\am[2t(n)]=\am[t(n)]\),其大致思路是把 \(\mathbf{MAM}\) 换成 \(\mathbf{AMA}\),每次亚瑟发送一堆随机数 \(r_{1\dots k}\),梅林回复 \(y_{1\dots k}\) 和 \(z_{1\dots k}\),然后亚瑟随机选择一个 \(i\) 发送给梅林,表示选用 \(y_i\) 和 \(z_i\),然后把前面的交互过程视为 \(y_i,r_i,z_i\) 并继续协议,换言之让交互稍微并行一会,然后随机选择一个继续,这样能避免指数增长,且选择适当的 \(k\) 可以控制增加的误差在可控范围内。
观察 \(\bpp\subseteq\sum_2^p\cap\prod_2^p\) 的证明,由于 \(\am\) 相比 \(\bpp\) 而言只是把概率内部的 P 问题换成了 NP 问题,用 \(\bpp\subseteq\prod_2^p\) 的结论,再合并末尾两个 \(\exists\) 得 \(\am\subseteq\prod_2^p\)。\(\ma\) 类似,不过多出的 \(\exists\) 在最左边而非最右边,因此 \(\ma\subseteq\sum_2^p\)。再由 \(\ma\subseteq \am\) 得 \(\ma\subseteq\sum_2^p\cap\prod_2^p\)。
如同 \(\ip\),\(\ma\) 的定义不能改成满可靠性的,否则会变成 \(\np\),但是可以改成满完备性的,修改过程也类似于 \(\bpp\subseteq\sum_2^p\) 的证明,亚瑟让梅林发送 \(m\) 和所有 \(u\),通过随机元素检查是否在集合内判断集合是否为全集。对 \(\am\) 的证明也类似,先让梅林发送所有 \(u\),然后亚瑟发送 \(r\),梅林再发送 \(i\) 和 \(m\),亚瑟检查 \((x,m,r\oplus u_i)\in R\) 是否成立,这样得到 \(\mathbf{MAM}\) 的完美完备性协议。前文所述的 \(\ma\subseteq\am\) 在完美完备性下仍然成立,因此调换顺序就得到 \(\am\) 的完美完备性协议。
定理:如果 \(\conp\subseteq\am\),则 \(\am=\sum_2^p=\prod_2^p\),从而多项式分层坍塌。这是图同构不大能是 NP 完全问题的一个证据。
只要证明 \(\sum_p^2\subseteq\am\) 就行。\(L\in\sum_2^p\) 当且仅当存在多项式时间判定语言 \(R\),使得 \(x\in L\) 时 \(\exists y\forall z,(x,y,z)\in R\),否则 \(\forall y\exists z,(x,y,z)\in R\)。让梅林发送 \(y\),然后用一次 AM 交互判断后面的 CoNP 问题,即得 \(\sum_2^p\subseteq\mathbf{MAM}=\mathbf{AM}\subseteq\prod_2^p\)。
MIP
如果有多个证明者,得到的复杂性类称作 \(\mip\)。注意证明者之间不能交流,如同警察审讯嫌疑人,分别审讯能得到更多信息。\(\mip\) 相比 \(\ip\) 的优势正是该点,因为事实上 \(\mip=\nEXP\)。
令 \(M^O\) 为某个支持查询神谕 \(O\) 的多项式时间概率图灵机,接受和拒绝某个语言 \(L\) 中的输入 \(x\) 分别用 \(\exists O,P(M^O(x)=1)\ge 2/3\) 和 \(\forall O,P(M^O(x)=1)\le 1/3\) 标识。\(\ip\) 中证明者可以自适应,而神谕概率图灵机中神谕必须预先确定。容易发现(有多项式级别个)证明者的 \(\mip\) 不强于神谕概率图灵机,因为可以把所有证明者编码到神谕里。反过来,给定一个神谕概率图灵机,它可以改成两个证明者的 \(\mip\)。具体地,当其需要查询神谕时改为问证明者 \(1\),执行完后随机向证明者 \(2\) 核验查询的一些神谕,确保 \(1\) 和 \(2\) 的策略预先固定。
决策树
令 \(f:\{0,1\}^n\to\{0,1\}\) 为某个函数,它的决策树需要满足如下条件:每个点带一个 \(x_i\),表示根据 \(x_i\) 是 \(0/1\) 走到左/右子树,要求叶子结点为 \(f(x_1,\dots,x_n)\)。对树 \(t\) 和输入 \(x\),令 \(\operatorname{cost}(t,x)\) 为检查了多少个 \(x\) 中的位。
记 \(f\) 的决策树复杂度为 \(D(f)=\min\limits_{t\in T(f)}\max\limits_{|x|=n}\operatorname{cost}(t,x)\),\(T(f)\) 是 \(f\) 的合法决策树集合。显然 \(D(f)\le n\)。
例:假如 \(f\) 是 or 函数,则 \(D(f)=n\),利用“交互库自适应”的思想,让输入自适应即得。
例:令 \(f\) 为访问地址函数 \(f(x_{1\dots k},y_{1\dots 2^k})=y_x\),则 \(D(f)\le k+1<\log n+1\),其中 \(n=k+2^k\)。再由输入“自适应”得 \(D(f)>k\)。
证明复杂度:决策树复杂度的非确定性版本。一个 \(x\) 的 0-证明是一个位掩码集合 \(S\),使得当 \(x'\) 在 \(S\) 上的位和 \(x\) 在 \(S\) 上的位相同时 \(f(x')=0\)。由此还得到 \(f(x)=0\)。同理定义 1-证明。因此 \(f(x)\) 可以由 \(x\) 的一个位的子集得到。令 \(C(f)\) 为最小的 \(k\) 使得对所有 \(x\),其都有一个大小 \(\le k\) 的 \(f(x)\)-证明。
例:给定 \(n\) 个点的图的 \(n(n-1)/2\) 大小的邻接阵,问图是否连通。运用上述思想还是能够证明 \(D(n)=n(n-1)/2\),交互库维护一张当前不连通但可以用未被查询的边联通的图就行。
1-证明是图的一棵生成树,0-证明是一个割,故 \(n\) 是偶数时 \(C(f)=\max\{n^2/4,n-1\}=n^2/4\)。
显然 \(C(f)\le D(f)\),而事实上有 \(C(f)\le D(f)^2\)。
建树如下:给定 \(x\),求解 \(f(x)\)。如果 \(f\) 是常数直接返回。否则对某个 \(f(x_0)=0\) 找到其 0-证明 \(S\),对 \(S\) 建决策树,即观察 \(x\) 在 \(S\) 中的所有未被观察过的位,然后递归。
一次最多观察 \(C(f)\) 位。注意到任意 0-证明与 1-证明必须有交否则它们互相矛盾,每次递归会让 1-证明长度缩小 \(1\),从而递归最多 \(C(f)\) 次。
布尔电路
布尔电路定义:一张DAG,每个点为 \(\land,\lor,\lnot\) 之一,入度 \(\le 2\),非运算入度为 \(1\)。二元运算符的入度可以不失一般性地扩展到任意级别。
称一个 \(T(n)\) 规模的电路族为一系列电路 \(\{C_n\}\) 满足 \(C_n\) 恰有 \(n\) 个输入位,\(1\) 个输出位且 \(\forall n,|C_n|\le T(n)\)。
任何一个不含条件或循环语句的程序都可以用布尔电路刻画。称 \(\p_{/\text{poly}}\) 为输入多项式规模内电路族能判定的所有语言构成的类。
定理:\(\p\subsetneq\p_{/\text{poly}}\)。
不相等:任何一元语言 \(\{1^n:n\in S\}\) 都可由至多 \(n\) 规模的布尔电路(全与或直接输出 \(0\))判定,而语言 \(\{1^n:n=(\lang M\rang,x),M(x)\text{ halts}\}\) 不可判定。
包含:注意到可以用散漫图灵机模拟普通图灵机,直接用布尔电路计算快照序列,如库克-勒维定理证明中所述只需上一时刻快照和各个带头所在位置上次访问时刻的快照就能计算出下一时刻快照,这个电路甚至可由一台 \(\l\) 内的图灵机计算,因为散漫图灵机的带头位置是对数空间可计算的。
不用散漫图灵机证明 \(\p\subset\p_{\text{/poly}}\):类似 Meyer 定理,令 \(v(i,j,a)\) 表示计算历史 \(i\) 行 \(j\) 列是否为 \(a\),其只依赖于 \(v(i-1,j-1,\cdot),v(i-1,j,\cdot),(i-1,j+1,\cdot)\),能以此构造电路,对 \(T(n)\) 时间的图灵机电路规模是 \(O(T(n)^2)\)。
电路可满足性与库克-勒维定理
给定一个布尔电路,问是否存在输入使得该布尔电路输出 \(1\),此判定问题记作 \(\text{CKT-SAT}\),其是 \(\np\) 完全的,因为其显然属于 \(\np\),而对验证器用上述定理证明方式中的图灵机构造电路可以得到 \(\text{CKT-SAT}\) 是 \(\np\) 难的。
将其归约到 \(\text{3SAT}\) 以证明库克-勒维定理。对每个点开一个变量 \(z_i\),则 \(z_i=z_j\land z_k,z_i=z_j\lor z_k,z_i=\not z_j\) 都可以用 \(3\text{SAT}\) 表达。例如 \(x=y\land z\) 的表达是 \((\bar x\lor\bar y\lor z)\land (\bar x\lor y\lor\bar z)\land (\bar x\lor y\lor z)\land(x\lor\bar y\lor\bar z)\)。最后在表达式中加入输出点 \(z_i\lor z_i\lor z_i\) 即完成规约,容易发现其可在多项式时间内完成。
上述 \(\p_{/\text{poly}}\) 类甚至包含不可判定语言,其原因是该复杂性类并不关心电路能否被实际构造出来。如果要求所有电路族中所有电路都能被多项式时间图灵机构造,则得到的 \(\p_{/\text{poly}}=\p\)。证明:前者属于后者可以直接用额外一台图灵机模拟电路,后者属于前者之前证明过了。如先前所述,“被多项式时间图灵机构造”可以加强到“被对数空间图灵机构造”,所得结论不变。
上述能被多项式时间/对数空间图灵机构造的电路族分别称为 \(\p\) 一致电路族和 \(\l\) 一致电路族。
另一种定义 \(\p_{/\text{poly}}\) 类的方式是带建议的图灵机。记带 \(a(n)\) 位建议的 \(O(T(n))\) 时间图灵机 \(M\) 判定语言 \(L\),如果存在一个字符串序列 \(\alpha\) 使得 \(|\alpha_n|=a(n)\) 且 \(\forall x,x\in L\iff M(x,\alpha_{|x|})=1\),复杂度类记作 \(\dtime(T(n))/a(n)\)。有 \(\p_{/\text{poly}}=\bigcup\limits_{c,d}\dtime(n^c)/n^d\)。前者属于后者:把电路当建议。后者属于前者:重复之前的证明过程。
Karp-Lipton 定理与 Meyer 定理
Karp-Lipton 定理:如果 \(\np\subseteq\p_{/\text{poly}}\) 则 \(\ph=\sum_2^p\)。
证明后者成立只需证 \(\prod_2^p\) 完全语言 \(\prod_2\text{SAT}\) 属于 \(\sum_2^p\) 即得 \(\ph\) 塌缩。该语言为 \(\forall u\exists v,\varphi(u,v)=1\)。
如果 \(\np\subseteq\p_{/\text{poly}}\),则存在一个多项式规模电路族解决如下问题:给定 \(\varphi\) 和 \(u\),求解是否有 \(v\) 使得 \(\varphi(u,v)=1\)。而与哦 SAT 的判定问题的解法就可以输出构造方案,因此有一个电路族 \(C\)(设其需要用 \(q(n)\) 位表示,\(q\) 为某多项式)当 \(v\) 存在时输出 \(v\)。
问题是 \(C'\) 构造不出来,本定理的思想是去用 \(\exists\) 猜 \(C\)。如果 \(\prod_2\text{SAT}\) 成立,则 \(\exists|\lang C\rang|=q(n)\forall u,\varphi(u,C(\varphi,u))=1\)。而如果前者不成立,则存在 \(u\) 使得 \(\varphi(u,\cdot)=0\),故后者不成立。而图灵机可以多项式时间模拟电路,故后式属于 \(\sum_2^p\)。
Meyer 定理:如果 \(\EXP\subseteq\p_{/\text{poly}}\) 则 \(\EXP=\sum_2^p\)。
证明:考虑计算历史。令多项式规模电路 \(C\) 表示给定输入 \(x\),位置 \(i\),时间 \(t\),输出其上字符(把图灵机状态编码到带头所在位置字符上,注意电路输出规模是常数,\(i,t\) 长度是多项式规模),则如下表达式等价于原判定问题: \(\exists C\forall x,t,C(x,i,t)\text{ is obtained from }C(x,i-1/i/i+1,t-1)\land C(x,1,2^{n^c})\text{ accepts}\)。
推论:如果 \(\p=\np\) 则 \(\EXP\not\subseteq\p_{/\text{poly}}\)。否则有 \(\p=\sum_p^2=\EXP\),与时间分层定理矛盾。
线路下界与非一致分层定理
如果能证明 \(\np\notin\p_{/\text{poly}}\) 则 \(\p\neq\np\)。Karp-Lipton 定理提供了 \(\p\neq\np\) 的证据。通过线路表示计算,有望规避对角化方法的相对性导致的局限。
定理:对任意 \(n>1\),存在函数 \(f:\{0,1\}^n\to\{0,1\}\) 不能被规模 \(2^n/10n\) 的电路计算。
证明:取 \(f\) 为纯随机函数,则给定固定电路 \(C\) 和输入 \(x\),\(C(x)=f(x)\) 的概率是 \(1/2\)。由于 \(f\) 在各个输入上随机选取,\(C\) 计算 \(f\) 的概率为 \(2^{-2^n}\)。而规模至多为 \(S=2^n/10n\) 的电路可以用邻接表表示成 \(9S\log S\) 位,因此总共有不超过 \(2^{0.9\cdot 2^n}\) 个,因此存在计算 \(f\) 的规模不超过 \(2^n/(10n)\) 的概率至多为 \(2^{-0.1\cdot 2^n}<1\)。由此得绝大多数函数都不能被对应规模电路计算,但目前仍然没有找到一个不属于 \(\np\) 的这种函数。
此外,根据香农的结论,任何函数可以用规模 \(O(2^n/n)\) 的电路计算。
引理:任何函数都能用 \(O(2^n)\) 规模计算。
证明:考虑 \(f(x_{1\dots n})=(x_1\land f(1,x_{2\dots n}))\lor(\lnot x_1\land f(0,x_{2\dots n}))\),由其构造。
引理:所有的 \(2^{2^n}\) 个输入长度为 \(n\) 的函数在某输入上的值可以用 \(2^{2^n}(1+o(1))\) 规模计算。
证明:考虑 \(f(x_{1\dots n})=(x_1\land g(x_{2\dots n}))\lor(\lnot x_1\land h(x_{2\dots n}))\),\(g\) 和 \(h\) 均是输入长度为 \(n-1\) 的函数。输入长度为 \(n\) 相比输入长度为 \(n-1\) 时多了 \(2^{2^{n-1}+1}\) 个与,\(2^{2^n}\) 个或,\(1\) 个非,递归关系为 \(F(k)=F(k-1)+2^{2^{n-1}+1}+2^{2^n}+1\),解得 \(F(k)=2^{2^n}(1+o(1))\)。
\(f(x_{1\dots n})=\bigvee\limits_{a}f(x_{1\dots k},a_{{k+1}\dots n})x_{k+1}^{a_{k+1}}\dots x_n^{a_n}\),其中 \(x_i^1=x_i,x_i^0=\lnot x_i\)。因此要实现计算 \(f\) 的电路,只需要实现计算所有输入长度为 \(k\) 函数的电路与一些逻辑运算符,总共复杂度 \(2^{2^k}(1+o(1))+O(2^{n-k})\),取 \(k=\log(n-\log n)\) 即得。
非一致分层定理:对任意满足 \(2^n/n>T'(n)>10T(n)>n\) 的两个函数 \(T,T':\N\to\N\),规模 \(T\) 的电路族能判定的语言是规模 \(T'\) 的电路族能判定的语言的真子集。
仅证明 \(T=n\),\(T'=n^2\) 的情况。对任意 \(l\),存在函数 \(f\) 不能被 \(2^l/10l\) 规模的电路计算,而任意函数都可由 \(10l2^l\) 规模的电路计算。令 \(l=1.1\log n\),\(g:\{0,1\}^n\to\{0,1\}\) 为对 \(g\) 的前 \(l\) 位计算 \(f\) 的结果,则 \(g\) 所需规模不超过 \(10l2^l=O(n^{1.1}\log n)=O(n^2)\),而超过 \(2^l/(10l)=n^{1.1}/11\log n\),即超过 \(O(n)\)。
线路复杂性类的精细分层
并行计算机中若干个微处理器成品被通过互联网络(如超立方体网络)连在一起,该网络通常确保 \(n\) 个微处理器之间的通信能够(假设网络总负载存在上界)在 \(O(\log n)\) 步内完成。
如果存在具有 \(n^{O(1)}\) 个微处理器的并行机在 \(\log^{O(1)}n\) 时间内求解规模为 \(n\) 的计算问题则称该计算问题存在高效并行算法。例如计算两个 \(n\) 位数的串行加法需要 \(O(n)\) 步,而使用超前进位加法器只需要 \(O(n)\) 个处理器和 \(O(\log n)\) 步,故加法存在高效并行算法。类似地,整数乘除也有高效并行算法,且整数除法并行算法并不直观。很多矩阵运算和一些图论算法(如最短路和MST)都有高效并行实现。但目前网络流和线性规划等问题仍未找到高效并行算法,且人们猜测这些问题不存在高效并行算法。
对任意 \(d\),如果有判定语言 \(L\) 的规模 \(\operatorname{poly}(n)\),深度 \(O(\log^dn)\) 的电路族,则称 \(L\in\mathbf{NC}^d\)。诸 \(\mathbf{NC}^{d}\) 取并得到 \(\mathbf{NC}\)。类似定义 \(\mathbf{AC}^d\) 和 \(\mathbf{AC}\),区别在于后者允许逻辑门的入度 \(>2\)。
将逻辑门的入边用深度为 \(\log\) 级别的树展开,得到 \(\mathbf{NC}^i\subseteq\mathbf{AC}^i\subseteq\mathbf{NC}^{i+1}\)。特别注意 \(\mathbf{NC}^0\) 只能依赖常数位的输入。
例:判定 \(x\) 是否含有奇数个 \(1\) 的语言是 \(\mathbf{NC}^1\) 的。
定理:一个语言有高效并行算法当且仅当其属于 \(\mathbf{NC}\)。证明注意到线路和处理器的计算容易相互转化。先预处理出电路(假定这部分是常数,如果电路不是 \(\l\) 一致的则算法也是非一致的),再让电路每个结点对应一个处理器能从后者转化到前者,代价是多一个通信的 \(\log\)。反方向转化为构造电路让第 \(t\) 层的第 \(i\) 个顶点完成处理器 \(i\) 在 \(t\) 时刻的计算。
人们目前不知道 \(\p=\mathbf{NC}\) 是否成立,甚至不知道 \(\ph=\mathbf{NC}^1\) 是否成立,尽管大部分人认为不成立。使用对数空间规约可以得到 P 完全语言。判定在某电路上一组给定输入是否会输出 \(1\) 是 P 完全的,证明过程类似 \(\p\subsetneq\p_{/\text{poly}}\) 的证明过程。
如果电路族中每个电路的大小、逻辑门的类型、邻接矩阵中 \(i,j\) 是否有边都可在多项式时间内计算,则称该电路为有向联通 Direct Connect 一致的。这类电路的大小可以是指数但其能由多项式时间图灵机表出全部信息。
定理:如果某 DC 一致电路族只使用与/或/非逻辑门,规模为 \(2^{n^{O(1)}}\),深度为常数,入度可以 \(>2\)(即可以为指数),非门只出现在输入层,不能出现在任何别的逻辑门的输出后,则复杂性类为 \(\ph\)。如果去掉深度为常数的限制,则复杂性类是 \(\EXP\)。
P/poly 与别的复杂性类的关系
\(\mathbf{EXPSPACE}\not\subseteq\p_{/\text{poly}}\)。证明:对每个函数,找到第一个(一个函数是 \(2^n\) 个比特,可以当成数比较)需要 \(\Omega(2^n/n)\) 规模计算的函数 \(f_n\),\(L=\bigcup\limits_{n}\{|x|=n:f_n(x)=1\}\) 不在 \(\p_{\text{/poly}}\) 内。
\(\EXP^{\Sigma_2^p}\not\subseteq\p_{\text{/poly}}\)。
证明:利用这种神谕我们也能找到 \(f_n\)。给定一个 \(f\)(其大小是 \(2^n\)),判定是否有规模 \(<2^n/10n\) 电路计算之是 NP 问题。于是给定一个范围 \([f_1,f_2]\),\(\exists f\in[f_1,f_2],\forall |C|<2^n/10n,C\notin C_f\),其中 \(C_f\) 是计算 \(f\) 的所有电路。由上述 \(\sum_2^p\) 问题可以判断 \([f_1,f_2]\) 内是否有硬性要求高规模电路计算的函数,二分就可以求出 \(f_n\)。
\(\nEXP^{\np}\not\subseteq\p_{/\text{poly}}\)。证明:假设其成立,则 \(\np\subset\p_{/\text{poly}}\),由 Karp-Lipton,\(\ph=\sum_2^p\),于是 \(\p^{\Sigma_2^p}=\Sigma_2^p=\np^{\np}\),由填充法 \(\EXP^{\sum_2^p}=\nEXP^{\np}\),从而导出矛盾。
Nick's Class 与 Alternation Circuits
此小节要求 NC 电路对数一致。
布尔矩阵乘法(给定布尔矩阵 \(A,B\),位置 \(i,j\),计算 \((AB)_{ij}\))是 \(\nc^1\) 的:第一层计算所有 \(a_{i,k}\land b_{k,j}\),接下来 \(\log n\) 层 or 起来,最后需要输出 \(n^2\) 个位置中的一个。
为此我们需要多路选择器:给定 \(x_{1\dots,n},y_{0\dots 2^n-1}\),输出 \(y_x\)。这个事实上是一个布尔公式,且实际上有 \(L\in\nc^1\) 当且仅当 \(L\) 能由多项式规模布尔公式族给出,注意布尔公式族要求电路是一棵树。
\(\nc^1\) 转到布尔公式是容易的,直接递归,不需要对被重复使用的电路部分进行特殊处理,电路规模是 \(2^{O(\log n)}\) 级别,即多项式级别。
反过来的问题是树可能是 \(O(n)\) 级别深度的,需要把它拍平。为此可以利用如下变换:假设公式 \(C(D)\) 需要用到公式 \(D\) 的内容,则 \(C(D)\) 可以重新写成 \((C(1)\land D)\lor(C(0)\land\lnot D)\),从而将 \(D\) 移出 \(C\) 的子树。
找一棵最小的 \(\ge n/3\) 大小的子树,则其大小一定 \(<2n/3\) 否则其子树满足条件。令其为 \(D\),则有 \(C(1)\),\(C(0)\),\(D\) 三棵树的大小都 \(\le2n/3\)。令 \(T(n)\) 为对规模 \(n\) 公式构造得到的树的深度,则 \(T(n)\le T(2n/3)+3\),从而 \(T(n)=O(\log n)\)。
显然 \(\nc\subseteq\p\),\(\nc^1\subseteq\l\)(使用 dfs 计算电路结果),此外还有 \(\nl\subseteq\nc^2\)。只证 NL 完全问题 \(\text{PATH}\in\nc^2\):我们可以构造出带自环的邻接矩阵表示 \(\le 1\) 步的可达性,做布尔矩阵快速幂即得 \(\le n\) 步的可达性,最后输出 \(s,t\) 项对应结果。
线性规划是 P 完全问题。
\(\nc\) 会坍塌,如果有 \(\nc^i=\nc^{i+1}\) 则 \(\nc=\nc^i\)。
二进制整数加法在 \(\ac^0\) 内:进位 \(c_k=\bigvee\limits_{0\le i<k}(a_i\land b_i\land\bigwedge\limits_{i<j<k}(a_j\lor b_j))\)。
奇偶性判断(给定输入,问输入是否有奇数个 \(1\))不在 \(\ac^0\) 内,证明采用多项式方法。
多项式方法
令 \(C\) 为大小 \(s\),深度 \(d\) 的电路,则 \(C\) 可被一个 \(\Z_3=\{-1,0,1\}\) 上 \((\log s)^{O(d)}\) 次数的多项式 \(99\%\) 近似,而奇偶性判断不能被 \(\Z_3\) 上 \(cn^{1/2}\) 多项式 \(99\%\) 近似,对某个常数 \(c\)。由此得证。
先证明前者:先前算术化方法的多项式次数太高了,随机选 \(a_{1\dots n}\in\Z_3\),用 \(p_A=a_1x_1+a_2x_2+\dots+a_nx_n\) 近似 \(x_1\lor x_2\lor\dots\lor x_n\)。当后者为 \(0\) 时前者一定是 \(0\),后者为 \(1\) 时前者是 \(0\) 的概率为 \(1/3\)。
因此选择 \(\Theta(\log s)\) 个不同的 \(A_i=a_{i,1\dots n}\),用 \(1-\prod(1-p_{A_i}^2)\) 表示 or,可以让错率 \(<\frac{1}{100s}\),于是每个或门都是 \(\Theta(\log s)\) 度数多项式,非门用 \(1-x\),与门用德摩根律 \(1-(1-x_1)\lor (1-x_2)\lor \dots\lor (1-x_n)\)。每个门都有 \(\frac{1}{100s}\) 概率出错,总错率 \(\le 1\%\),最终得到的多项式度数 \((\log s)^{O(d)}\)。
证明后者:任何 \(\{0,1\}^n\to\{0,1\}\) 的多项式都能被以相同的度数搬到 \(\{-1,1\}^n\to\{-1,1\}\) 上:给定 \(\{0,1\}^n\to\{0,1\}\) 下的 \(f(x_{1\dots n})\),构造 \(\{-1,1\}^n\to\{-1,1\}\) 下的 \(g(x_{1\dots n})=2f(\frac{x_1+1}2,\frac{x_2+1}2,\dots,\frac{x_n+1}2)-1\),换到 \(\Z_3\) 域下 \(\frac{x+1}2\) 就是 \(-x-1\)。
原本的奇偶函数定义在 \(\{-1,1\}^n\) 上是 \(x_1x_2\dots x_n\)。假设存在度数为 \(cn^{1/2}\) 的多项式 \(q\) 在 \(S\subseteq\{-1,1\}^n\) 上等于 \(x_1x_2\dots x_n\),其中 \(S\ge 0.99\cdot2^n\)。由于 \(\{-1,1\}^n\) 上 \(x^{-1}=x\),因此(假设 \(n=7\)) \(x_1x_3x_4x_7=x_2x_5x_6q(x_{1\dots 7})\),换言之度数 \(d'>n/2\) 的多项式可以转成 \((n-d')+cn^{1/2}\) 的多项式。
任意 \(\{-1,1\}^n\to\{-1,1\}\) 上的函数都等价于一个 \(\Z_3\) 上的 \(n\) 次多项式(该多项式是多线性的,即满足没有一个单项式里某变量的幂次 \(>1\)),则任意 \(S\to\{-1,1\}\) 上的函数可以转成 \(\frac n 2+c\sqrt n\) 的多项式。转化完的多项式也是多线性的,因为 \(x^2=1\)。
下面对函数和多项式进行计数。函数有 \(2^{0.99\cdot 2^n}\) 个。不看系数,度数为 \(k\) 的多线性单项式有 \(\binom n k\) 个,故总共有 \(\sum\limits_{i=0}^{\frac n 2+\sqrt n}\binom n i\),系数可以选 \(1,0,-1\),总共 \(3^{\sum\limits_{i=0}^{\frac n 2+c\sqrt n}\binom n i}\) 个,选取适当 \(c\) 即导出矛盾。
为了解决算不了异或的问题,有复杂性类 \(\ac^0[p]\) 表示加入判断 \(\sum x_i\not\equiv 0\pmod p\) 是否成立的门后的复杂性类,令 \(\mathbf{ACC}^{0}=\bigcup\ac^0[p]\)。我们证明了 \(\text{MOD}_2\notin\ac^0[3]\)。事实上对不同的质数 \(p,q\),有 \(\text{MOD}_p\notin\ac^0[q]\)。[Williams 2010] 证明了 \(\nEXP\not\subseteq\mathbf{ACC}^0\)。有人认为 \(\mathbf{ACC}^0\) 与神经网络存在一定关联。
如果证明 \(\np\) 没有多项式规模电路,就能说明 \(\p\neq\np\),然而事实上已知的线路下界是线性,甚至对 \(\nEXP\) 内的问题都没有超多项式下界。
APSP 全源最短路
[Ryan Williams 2014] “Faster all-pairs shortest paths via circuit complexity” 中给出了 \(O(n^3/2^{\Omega(\sqrt{\log n})})\) 时间(在RAM上工作)的随机化全源最短路做法,下面给出一个稍微宽松一些的做法,只考虑 \([0,n^3]\) 内整数边权,因此边权长度占 \(O(\log n)\)。
目前 (min,+) 矩阵乘法没有 \(O(n^{3-\varepsilon})\) 做法。如果能计算其快速幂就能
考虑两个向量的“内积” \(u^Tv=\min\limits_k(u_k+v_k)\),加法是 \((\log n)^{O(1)}\) 大小 \(\ac^0\) 电路。\(x\le y\) 用 \((\bigwedge\limits_{i=1}^t1\oplus x_i\oplus y_i)\lor\bigvee\limits_{i=1}^t((1\oplus x_i)\land y_i\land\bigwedge\limits_{j=1}^{i-1}(1\oplus x_j\oplus y_j))\),如果 \((x_1\le x_2)\land (x_1\le x_3)\land\dots\land(x_1\le x_k)\) 则输出 \(x_1\),于是 \(u^Tv\) 可以用 \(\operatorname{poly}(k,\log n)\) 大小 \(\ac^0\) 电路计算。
之前提到过大小 \(s\),深度 \(d\) 的电路可以在 \(\Z^3\) 上用 \((\log s)^{O(d)}\) 次多项式 \(99\%\) 近似。类似地,在 \(\Z_2\) 上也可以用相同规模多项式 \(99\%\) 近似,从而 \(u^Tv\) 可以用 \(\log^{O(1)}(k\log n)\) 次多项式 \(1-O(1/n^3)\) 近似,其输入长度量级是 \(k\log n\)。
如果要计算 \(n\times k\) 和 \(k\times n\) 矩阵的乘积,需要计算 \(n\times n\) 的向量的内积,每个内积都是 \(D=\log^{O(1)}(k\log n)\) 次多项式,而 \(K\) 输入,度数 \(D\) 的多线性多项式里至多有 \(O(K)^D\) 项,不妨假设项数 \(\le n^{0.1}\)。把这个多线性多项式里跟 \(u\) 有关的项和跟 \(v\) 有关的项分离,转化为一般的内积(如 \(u_1v_2u_3+v_1u_2v_3\) 转化为 \((u_1u_3,u_2)\cdot (v_2,v_1v_3)\)),从而转化为 \(n\times n^{0.1}\) 和 \(n^{0.1}\times n\) 的一般矩阵乘法,这个由快速矩乘能在 \(\tilde O(n^2)\) 时间内完成。
最后我们希望 \((k\log n)^{\log^c(k\log n)}<n^{0.1}\),取 \(k=2^{\Theta(\log^{1/(c+1)}n)}\) 能满足条件。最后把两个矩阵各拆成 \(n/k\) 块,做矩乘。总复杂度 \(\tilde O(n^3/k)=O(\frac{n^3}{2^{\Theta(\log^{1/(c+1)}n)}})\)。
P 内的规约
APSP
假定边权是输入规模多项式级别。
APSP 假设:对任意常数 \(\varepsilon\) 其不存在 \(O(n^{3-\varepsilon})\) 的算法。
APSP 问题的一个特例是 min,+ 矩阵乘法,构造一个三分图,点集 1 向点集 2 按 \(A\) 连边,点集 2 向点集 3 按 \(B\) 连边,则点集 1 到点集 3 中点的距离就是 \(A,B\) 的 min,+ 矩阵乘法。反过来,给定 min,+ 矩阵乘法,用快速幂可以计算 APSP,从而它们在上述假设下等价,即两者要么都存在 \(O(n^{3-\varepsilon})\) 内做法,要么都不存在 \(O(n^{3-\varepsilon})\) 内做法。
负三角形:找到权值为负的三元环。用 min,+ 乘法解决负三角形:判断是否有 \(A^2_{ij}+A_{ji}=0\),其中 \(A\) 是邻接矩阵。
矩阵乘法验证:给定 \(A,B,C\),判断 \(AB=C\) 是否成立。做法:随机 01 向量 \(r\),看 \(ABr\) 和 \(Cr\) 是否相等。如果 \(AB\neq C\) 其至少以概率 \(\frac 1 2\) 拒绝,从而有 \(O(n^2)\) 做法。min,+ 矩阵乘法验证类似,但目前没有低复杂度做法。
下面证明负三角形、min,+ 矩阵乘法验证能在适当复杂度内被归约到 APSP。
首先将 min,+ 矩阵乘法归约到所有点对负三角形,即对 \(\forall i,j\),判断 \(\exists k,w(i,j)+w(j,k)+w(k,i)<0\) 是否成立。给定 \(A,B\),构造三分图 \((I,J,K)\),满足对 \(i\in I,j\in J,k\in K\),\(w(j,k)=A_{j,k},w(k,i)=B_{k,i}\)。对 \(-w(i,j)\) 整体二分,我们能用所有点对负三角形判断是否有 \(\min\limits_{k}A_{j,k}+B_{k,i}<-w(i,j)\),从而复杂度只多一个 \(\log n\)。
然后将所有点对负三角形归约到负三角形(看起来很奇怪,因为后者只输出一位),假设负三角形所需时间 \(T(n)\),不失一般性地只考虑三分图 \((I,J,K)\),否则将点额外复制两份就行。显然可以用 \(n^2T(n)\) 的复杂度得到做法:每次找一个负三角形 \((i,j,k)\),把边 \(i,j\) 删了,直到 \(I\times J=\empty\) 或找不到负三角形停止。
将 \(I,J,K\) 分成大小为 \(s\) 的块,则一个点集被分成 \(n/s\) 块,对 \((n/s)^3\) 个点集块的三元组分别使用上述做法。删除 \(i,j\) 操作至多执行 \(n^2\) 次,从而总复杂度 \(O(((n/s)^3+n^2)T(s))\)。当 \(T(n)=n^{3-\delta}\) 时,取 \(s=n^{1/3}\),就得到 \(O(n^{3-\delta/3})\) 的做法。
无负权最小环可以规约到 APSP,有负权最小(简单)环可以被Hamilton回路规约,从而是 NP 完全的。如果图边权绝对值在 \(M\) 内,对每条边边权加上 \(8M\),则边权在 \([7M,9M]\) 内,所有四元环都 \(\ge 28M\),三元环都 \(\le 27M\),因此可以用最小环做负三角形。
用 min,+矩阵乘法验证做负三角形:记单位矩阵 \(I\) 为对角线全是 \(0\),别的位置全是 \(\infty\) 的矩阵。对 \(i\in I,j\in J,k\in K\),令 \(A_{j,k}=w_{j,k},B_{k,i}=w_{k,i},C_{i,j}=w_{i,j}\)。检验 \(\begin{bmatrix}-C^T&-\infty\\-\infty&-\infty\end{bmatrix}=\begin{bmatrix}A&I\\-\infty&-\infty\end{bmatrix}\begin{bmatrix}B&-\infty\\-C^T&-\infty\end{bmatrix}\) 是否成立,则 \(A_{j,k}+B_{k,i}<-C_{i,j}\iff \min\limits_k A_{j,k}+B_{k,i}<-C^T_{j,i}\iff\min((AB)_{j,i},-C^T_{j,i})\neq C^T_{j,i}\)。
由上述论证,负三角形、min,+ 矩阵乘法、min,+ 矩阵乘法验证、无负权最小环、APSP 问题要么同时存在 \(O(n^{3-\varepsilon})\) 做法,要么同时不存在 \(O(n^{3-\varepsilon})\) 做法。
3-SUM,正交向量判定与 ETH
3-SUM:给定 \(n\) 个数(一般认为都是整数,值域为 \([-n^3,n^3]\)),判定是否存在三个数和为 \(0\)。猜想:其至少需要 \(n^{2-o(1)}\) 时间。
OV(正交向量):给定 \(n\) 个在 \(\{0,1\}^d\) 内的向量,其中 \(d=O(\log n)\),判定是否有两个向量正交。猜想:其至少需要 \(n^{2-o(1)}\) 时间。目前 [Abboud, Williams, Yu 2015] 给出了 \(n^{2-\Theta(1/\log(d/\log n))}\) 做法。
指数时间假设 Exponential Time Hypothesis:3SAT 不能在次指数时间内被解决,即 \(n\) 个变量 \(m\) 个子句的 3SAT 需要 \(2^{\delta n}\) 时间,对某个 \(\delta>0\)。
给出一个 \(2^{(1-\varepsilon)n}\) 的 3SAT 做法:随机赋初值,重复 \(n\) 次,每次随意找一个不满足的子句,随机选择其内某变量反转。
分析:对某固定合法解 \(\alpha\),\(x\) 与 \(\alpha\) 差 \(k\) 位的概率是 \(\binom n k 2^{-n}\)。差 \(k\) 位时,每次有至少 \(1/3\) 概率修改对,于是恰好差 \(k\) 位且 \(k\) 步每步都改对的概率是 \(\binom n k 2^{-n}\frac{1}{3^k}\),对 \(k\) 从 \(0\) 到 \(n\) 求和得到 \((\frac 1 2(1+\frac 1 3))^n\),故需要重复约 \(O(1.5^n)\) 次。
更细致的分析:将上述重复 \(n\) 次改成重复 \(3n\) 次。在 \(j+2i\) 步内从差 \(j\) 位差到 \(0\) 位(\(i+j\) 次正确修改,\(i\) 次错误修改)的概率是 \(\binom{j+2i}i\frac{j}{j+2i}(\frac 1 3)^{i+j}(\frac 2 3)^i\ge\frac 1 3\binom{j+2i}i(\frac 1 3)^{i+j}(\frac 2 3)^i\)。\(\frac{j}{j+2i}\) 来源于要求任意时刻正确修改必须比错误修改次数多(从而错误变量个数在 \([0,n]\) 内),证明可以使用折线法,称作 Bertrand 投票定理。
只考虑 \(i=j\) 的情况,\(\frac 1 3\binom{3j}j(\frac 1 3)^{2j}(\frac 2 3)^j=(\frac 1 2)^{j-o(j)}\),\(2^{-n}\sum\binom n j (\frac 1 2)^j=(\frac 3 4)^n\),于是重复次数可以减少到 \(O((\frac 4 3)^n)\)。
SETH 强指数时间假设:对任意 \(\varepsilon>0\),存在 \(k\) 使得 k-SAT 不能在 \(2^{(1-\varepsilon)n}\operatorname{poly}(m)\) 内解决。[Schöning 1999] 中给出了 \(O((2-2/k)^n)\) 的 k-SAT 做法。
SETH 归约到 OV:使用 Meet in the Middle。假定 \(m=O(n)\),使用 \(2^{n/2+1}\) 个向量。把变量分成两组 \(V_1,V_2\),每组 \(n/2\) 个变量。各组内枚举所有赋值,构造长度等于 \(m+2\) 的向量:\(V_1\) 中向量前两个数是 \(01\),\(V_2\) 中向量前两个数是 \(10\),后面的第 \(k\) 个数 为 \(0\) 当且仅当仅凭自己组内的赋值能够满足第 \(k\) 个子句。于是 \(V_1,V_2\) 中向量垂直等价于 k-SAT 有合法解。于是如果 OV 有 \(n^{2-\delta}\) 做法,k-SAT 有 \(O(2^{n(1-\delta/2)})\) 做法。
编辑距离
定理:SETH成立时求解最小编辑距离没有 \(n^{2-\delta}\) 做法。将 OV 归约到编辑距离。
OV 问题的等价描述:给定包含 \(n\) 个长 \(d=O(\log n)\) 01 向量的集合 \(A,B\),问是否存在 \(a\in A,b\in B\) 使得 \(a\cdot b=0\)。
思路:把每个向量变成一个短串,\(a_i\in A\to\alpha_i\),\(b_j\in B\to\beta_j\),串长都 \(\le d^{O(1)}\)。如果有两个向量正交则它们的编辑距离是 \(S\),否则编辑距离是 \(L>S\),注意 \(S,L\) 都是常数,以利于后面的构造。
构造如下两个串:\(\alpha_1\$\alpha_2\$\dots\alpha_{n-1}\$\alpha_n\),\((t\$)^{n-1}\beta_1\$\beta_2\$\dots\beta_{n-1}\$\beta_n(\$t)^{n-1}\),其中 \(\$\) 是长度 \(d^{O(1)}\) 的分割符,\(t\) 是全一向量对应串。
先考虑坐标怎么转成字符串:可以令 \(A\) 中的 \(1\) 变成 0001,\(0\) 变成 0111,\(B\) 中的 \(0\) 变成 0011,\(B\) 中的 \(1\) 变成 1111,则只有 \(1-1\) 的编辑距离是 \(3\),其余编辑距离都是 \(1\)。定义这两个映射分别为 \([a^i]\) 和 \([b^i]\)。
再考虑如何构造向量 \(a,b\) 的对应串。一个尝试是 \(\alpha'=[a^1]22\dots 2[a^2]22\dots 2\dots22\dots 2[a^d]\),\(\beta'\) 类似,\(2\) 的长度是 \(d^{O(1)}\)。这样编辑距离是 \(d+2a\cdot b\),与向量具体内容有关,不符合要求。
再观察 \(\alpha''=[0]_a52\dots 2[0]_a22\dots 2\dots22\dots 2[0]_a\),如上文所述 \([0]_a\) 是 0111。此时 \(\alpha''\) 和 \(\beta'\) 的编辑距离一定是 \(d+1\)。于是令 \(\alpha=44\dots 4\alpha''33\dots 3\alpha'44\dots 4\),\(\beta=33\dots 3\beta'33\dots 3\),填充的数字长度仍是 \(d^{O(1)}\),通过决定让 \(\alpha''\) 还是 \(\alpha'\) 与 \(\beta'\) 对应,可以实现取 \(\min\) 效果。此时向量正交时编辑距离是 \(S\),否则编辑距离是 \(S+1\)。
回到原先构造的串。如果有两个向量正交,就适当删除第二个串的前段和后段(也可以认为是平移第一个串)使得两个正交向量处于相同位置。注意全 \(1\) 向量不与任何向量垂直,因此平移后所有对应 \(t\) 的 \(\alpha\) 编辑距离一定是 \(S+1\)。故有向量正交时编辑距离 \(\le S+(n-1)(S+1)+Z\),\(Z\) 是两向量串长差,否则编辑距离 \(\ge n(S+1)+Z\)。
因此 OV 能归约到规模 \(O(nd^{O(1)})\) 的编辑距离问题,从而后者有 \(O(n^{2-\delta})\) 做法时前者有 \(\tilde O(n^{2-d})\) 做法。
\(O(n^2/\log n)\) 求解编辑距离问题(Four Russians):观察最原始的 dp。dp表上一个 \(k\times k\) 的正方形只依赖正方形外左上角 \(O(k)\) 个元素(具体地,\(f_{i\dots i+k-1,j\dots j+k-1}\) 只依赖 \(f_{i-1,j-1\dots j+k-1},f_{i-1\dots i+k-1,j-1}\)),相邻两个元素差值绝对值 \(\le 1\),从而它们相对 \(f_{i-1,j-1}\) 的取值情况只有 \(3^{2k+1}\) 种。再假设字母表大小是 \(4\),则可能使用的字符串(即 \(a_{i\dots i+k-1}\),\(b_{j\dots j+k-1}\))只有 \(4^{2k}\) 种。两者相乘得到只需预处理 \(O(c^{2k})\) 种情况,\(k=\Theta(\log n)\) 时情况数为 \(O(n)\),先预处理之。再把dp表划分成若干 \(k\times k\) 的块,每块只要计算边界处dp值,总共有 \((n/k)\times (n/k)\) 块,每块复杂度 \(O(k)\),总复杂度 \(O(n^2/k)=O(n^2\log n)\)。
其它 SETH-Hard 问题
无权无向图直径问题:直径定义为任意两点间距离最大值,最简单的做法是每个点 bfs 一遍,复杂度为 \(O(nm)\)。
近似算法定义:如果算法近似比为 \(r>1\),设答案为 \(t\),则当问题是最小化问题时输出必须 \(\le tr\),是最大化问题时输出必须 \(\ge t/r\)。
3/2-无权无向图近似直径 [Roditty, V. Williams 2014]:复杂度 \(\tilde O(mn^{1/2})\),输出一个 \([\lfloor 2D/3\rceil,D]\) 内的估计,\(D\) 是真实直径。假设 \(D=3h\)。
首先以每个点 \(1/\sqrt n\) 概率将其选入集合 \(S\),则以 \(1-1/n^c\) 概率 \(|S|=O(\sqrt n\log n)=\tilde O(\sqrt n)\),期望大小是 \(O(\sqrt n)\)。计算 \(d(u,S)\) 表示 \(u\) 到 \(S\) 的距离,找到最大化 \(d(w,S)\) 的 \(\omega\)。记 \(T=\{v:d(w,v)<d(w,S)\}\),\(T\) 以高概率大小为 \(\tilde O(\sqrt n)\),然后假定直径一端在 \(S,T\) 内,从这两个点集出发,计算距离最大值并返回。
分析:考虑真实直径 \(D=d(a,b)=3h\),如果有 \(u\in S\) 使得 \(d(u,a)\ge 2h\) 或 \(d(u,b)\ge 2h\) (即 \(d(u,a)\le h\) 或 \(d(u,b)\le h\)),则从该点bfs能得到 3/2 近似。剩下的点满足 \(h<d(u,a)<2h,h<d(u,b)<2h\)。这意味着 \(d(a,S)>h\),因此 \(d(w,S)>h\)。由于 \(w\in T\),不妨假设 \(d(w,b)<2h\) 否则也能得到正确估计。
由于 \(d(w,S)>h\),\(w\) 到 \(b\) 最短路上距离 \(w\) 为 \(h\) 的点也在 \(T\) 内。此时 \(d(w,y)=h\),从而 \(d(y,b)<h\),从而从 \(y\) 开始 BFS 能得到正确估计。
OV 归约到直径:构造 \((n,d,n)\) 三分图,左侧有边 \((u,i)\),当且仅当 \(u_i=1\);右侧有边 \((i,v)\),当且仅当 \(v_i=1\)。于是有向量垂直时直径是 \(3\),否则直径是 \(2\)。因此如果能区分直径为 \(2\) 和 \(3\) 就能解决 OV,换言之在 OV 假设下 ❤️/2 的直径近似没有 \(O(m^{2-\delta})\) 做法。
动态有向图单源连通性计数:给定一张有向图和一个点 \(s\),更新是加边或删边,查询 \(s\) 能到几个点。显然有单次修改 \(O(m)\) dfs 做法,问是否有单次修改/查询 \(O(m^{1-\delta})\) 做法。
无向图动态连通性有很多次线性做法,如 [KRKPT15] 最坏 \(O(\sqrt{n(\log\log n)^2/\log n})\) 的确定性做法。
OV 规约到该问题:跟规约到直径一样,唯一区别是最左侧不是 \(n\) 个点,左边只有一个 \(s\),每次动态修改左边到中间的边以枚举 \(a_i\),右边照常连。如果对某个 \(a_i\),可达点数比 \(n+\operatorname{popcount}(a_i)\) 小,则存在两向量垂直。于是如果有单次修改/查询 \(O(m^{1-\delta})\) 做法,OV 有 \(\tilde O(n^{2-\delta})\) 做法。
[Pătraşcu 2010]:找到动态连通性/子图连通性/Langerman 问题的 \(O(n^{o(1)})\) 更新/查询做法是 3SUM-困难的。[Abboud, Vassilevska, Yu 2015]:APSP,SETH,3SUM 中一者成立,单源连通性计数就需要线性时间。
在线矩阵乘法与 3SUM
在线矩乘假设:给定 \(A\) 和 \(n\) 个向量 \(v_{1\dots n}\),在线回答 \(Av_1,Av_2,\dots,Av_n\)。猜想其与离线版本不同,不存 \(O(n^{3-\delta})\) 做法。
只考虑 01 矩阵和向量,其可以归约到有向图动态s-t连通性:s连到某个左侧点(枚举一遍),所有左侧点按 \(A_{ij}\) 是否为 \(1\) 连到所有右侧点,所有右侧点按 \(v_j=1\) 是否成立连边。计算 \(Av_k\) 要 \(O(n)\) 次更新和查询,故总共要 \(O(n^2)\) 次更新和查询,从而如果s-t连通性能在 \(O(n^{1-\delta})\) 更新内解决,则猜想不成立。
s-t连通性到二分图匹配:点集赋值两份为 \(V',V''\),\((u,v)\) 改为 \((u'',v')\),加边 \((v',v'')\),删除 \(s'\) 和 \(t''\),则一组完美匹配对应一条路径,从而动态二分图匹配在在线矩乘假设下没有 \(O(n^{1-\delta})\) 做法。
3SUM到三点共线:映射数 \(a\) 到点 \((a,a^3)\)。3SUM到三线共点:从三点共线对偶。点 \((a,b)\) 和直线 \(y=cx+d\) 可以转成 \(y=ax-b\) 和 \((c,-d)\)。

浙公网安备 33010602011771号