§1–3:讲义 PDF p1–30(页脚 1–29);教材 §1.10 末(QBF,书 p33–34)、§1.15(归约,书 p43–44)、§1.16–1.17(书 p45–51,PDF p58–64)、§1.18 前半(书 p52–53,PDF p65–66) §4–6:讲义 PDF p31–45(页脚 30–44);教材 §1.17 定理 1.14(书 p51)、§1.18 末(书 p54–55)、§1.19(书 p55–58,PDF p68–71)
第 1 讲研究时间。本讲换一种资源:空间,即计算时要用多少格草稿纸。空间和时间最大的不同是可以重复使用:时间一去不复返,草稿纸却可以擦掉重写。这一点让空间复杂性呈现出与时间很不一样的面貌:
- 非确定性对时间的帮助至今说不清(),对空间的帮助却很有限(Savitch:最多平方)。
- 非确定型时间类是否对补封闭不知道(),非确定型空间类却是封闭的(Immerman-Szelepcsényi)。
本讲的整体逻辑如下:
| 部分 | 要回答的问题 | 核心结论 |
|---|---|---|
| 1. Space Bounded Computation | 空间怎么计量?和时间什么关系? | 只计工作带;格局图;;空间谱系 |
| 2. Logspace Reduction | 怎样比较 以内问题的难度? | 对数空间归约:输出很长,但每一位都能在对数空间算出 |
| 3. PSPACE Completeness | 中最难的问题是什么? | 是 -完全的;多项式空间 ≈ 双人博弈 |
| 4. Savitch Theorem | 非确定性能节省多少空间? | ,故 |
| 5. NL Completeness | 的代表问题是什么? | 有向图可达性 是 -完全的 |
| 6. Immerman-Szelepcsényi | 对补封闭吗? | 是: |
贯穿全讲的工具是格局图:把”机器是否接受 “变成”图中从起点能否走到终点”。第 3、4、5、6 部分都是在这张图上做文章。
1. Space Bounded Computation
1.1 空间的计量:SPACE 与 NSPACE
先要规定”用了多少空间”怎么算。若把输入本身也算进去,任何算法至少用 格,就无法讨论”比输入还小的空间”。可是很多有意义的算法只需几个指针或计数器,例如数一数输入里有几个 。所以约定:输入带只读、不计入空间,只数工作带上用过的格子。
定义: 与
设 ,。
- :存在常数 和判定 的图灵机,在每个长度为 的输入上,访问过的工作带格子(非空白)不超过 个。
- :存在常数 和接受 的非确定图灵机,无论做出怎样的非确定选择,访问过的工作带格子都不超过 个。
通常要求 。理由是机器至少要能”指向”输入的任意一位,例如记住输入读写头的位置,这需要一个 位的计数器。比 更小的空间几乎做不了有意义的事。
与线性加速类似,空间也有压缩定理: 空间可以压缩到 (把若干格编码成一个符号)。所以 的定义中允许常数倍。
与时间可构造类似,空间函数也要求可构造:
定义:空间可构造函数
设 。
- 若存在图灵机在 空间内计算 ,称 空间可构造。
- 若存在图灵机在输入 上恰好使用 格工作带后停机,称 完全空间可构造。
两种定义等价(不同于时间的情形)。
空间可构造性的主要用途是圈地:先在工作带上标出 个格子作为”领地”,之后的模拟一旦要越界就停下,这相当于时间的”时钟”。
对非确定型机器,若 空间可构造,可以放宽要求:只需成功的计算路径不超过 空间,失败的路径可以越界甚至不停机。理由是可以先圈出 格,越界的路径直接判为失败。
1.2 格局与格局图
时间的核心对象是”一串格局”。空间的核心对象是所有可能格局组成的图,因为空间有限,格局的总数也就有限。
定义:格局(空间版)
运行中的图灵机 在输入 上的格局由以下部分组成:
- 当前状态;
- 工作带内容(研究空间时总可以假设只有一条工作带);
- 所有读写头的位置,包括输入带读写头的位置。
起始格局记为 。约定只有唯一的接受格局 (例如接受前先把工作带擦干净、读写头归位)。
输入内容固定,不放进格局;但输入读写头的位置要记,它需要 位。
格局有多少个? 设 使用 格工作带,状态集 、字母表 都是常数大小。一个格局要记录:状态( 种)、工作带内容( 种)、工作带读写头位置( 种)、输入读写头位置( 种)。总数至多
每个格局可以用 位描述。
的约定在这里又起了作用:它让输入读写头位置带来的 倍被 吸收。
定义:格局图(configuration graph)
在输入 上的格局图 是有向图:顶点是 的所有格局,若格局 一步可以变成 ,就连一条边 。
于是: 接受 中存在从 到 的路径。
确定型机器每个格局至多一条出边,格局图是一条(可能带圈的)链;非确定型机器每个格局可以有两条出边。无论哪种,“是否接受”都变成了图的可达性问题,而格局图有 个顶点。
还有一个推论:若 空间的确定型机器停机,它至多运行 步,否则某个格局会重复出现,机器陷入死循环。所以总可以假设空间受限的机器都会停机:给它装一个能数到 的计数器即可,这个计数器只占 空间。
怎样判断”一步可达”? 后面的构造都要反复检查” 是不是一条边”,所以需要知道这一检查本身有多便宜。
引理:一步关系是局部可检查的
存在大小为 的合取范式 ,使对任意两个格局 : 给定 ,求值 可在 时间、 空间内完成; 本身也能在 空间内构造出来。
直观:一步计算只改动读写头所在的格子及其旁边。所以检查 ,只需把两个格局逐格比较:远离读写头的格子必须不变,读写头附近的格子必须按迁移函数变化。每一格的检查是一个常数大小的小公式, 个小公式合取起来就是 。逐格扫描时只要记住”正在比较第几格”,所以只需 空间。
1.3 空间与时间的关系
定理
设 空间可构造,则
证明
- 第一个: 步内读写头至多走过 个格子。
- 第二个:确定型机器是非确定型机器的特例。
- 第三个:设 NDTM 在 空间内接受 。确定型机器先在 时间内写出格局图 (逐对检查 ),再用广度优先搜索判断 能否到达 。图有 个顶点,BFS 的时间是其多项式,仍为 。
时间与空间的直观对比:时间 至多用掉 格空间;空间 至多”撑得住” 步,因为不同的格局只有这么多。更精细的结果是:
定理(Hopcroft-Paul-Valiant, 1975)
即 步的计算总能用比 略少的空间完成。这是目前已知的 与 之间唯一的非平凡关系,证明见教材 §1.20。
1.4 空间复杂性类
定义:常用空间类
对数空间 的直观: 位恰好够存常数个指向输入的指针或不超过 的计数器。 就是”只用常数个指针和计数器扫描输入”能解决的问题。
例: 中的问题
- :扫描输入,只记一位奇偶性。
- :从低位到高位逐位检查,只记”当前第几位”和进位。
- :用小学竖式乘法逐位检查结果的每一位。第 位等于所有满足 的 之和加上进位,只需记下标 和进位(进位不超过 ,也只需对数位)。
的代表问题:可达性。
定义:
命题
。
证明
设 有 个顶点。从 出发,每一步非确定地猜当前顶点的一个出邻居并走过去,同时计数;走到 就接受,走满 步还没到就拒绝。任何时刻只需记住”当前顶点”和”已走步数”,都是 位。
关键在于空间可以重用:走过的路不必记住,到了新顶点就把旧顶点擦掉。若真有路径,某条猜测序列会恰好沿它走到 。
:比 更大。
命题(Games are harder than puzzles)
证明: 问题的每条计算路径只用多项式空间。确定型机器逐一枚举所有选择序列,每试完一条就擦掉重来,空间可以重复使用,所以总空间仍是多项式(时间却是指数的)。
这个包含关系的直观意义是”谜题比博弈容易”。数独、哈密尔顿回路这类谜题的答案很短,猜出来就能检查,属于 。围棋、象棋这类双人博弈要找的是必胜策略,它要应对对手的所有应招,可能根本写不成多项式长,只能靠遍历博弈树来判断;而遍历博弈树恰好只需多项式空间(第 3 部分)。
综合 §1.3 的定理(取 与 ),得到下面的包含链:
其中 来自 。
1.5 通用机与空间谱系定理
时间谱系定理的条件里有 因子,因为通用机模拟要多花 倍时间。模拟的空间开销则小得多:
定理(无空间开销的通用机)
存在通用图灵机,模拟空间 的机器 时,只用 空间,常数 只依赖于 。
通用机把 的所有工作带内容存在自己的一条工作带上,用特殊符号标出各读写头的位置,再用常数大小的额外区域记录当前状态等簿记信息。数据搬来搬去只花时间,不多占空间。
定理(空间谱系定理,Hartmanis-Stearns 1965)
若 空间可构造且 ,则
证明
与时间谱系定理相同,用对角线构造机器 :
- 在工作带上圈出 格(用到 空间可构造);
- 模拟 ,一旦模拟需要越出圈定区域就停机并输出 ;同时用一个计数器数步数,超过 步(说明 已陷入循环)也停机输出 ;
- 若模拟正常结束,输出 。
判定的语言 。若 由某台空间 的机器 判定,由于模拟只多常数倍空间且 ,取 的一个足够长的编码 , 能在 空间内模拟完 ,于是 ;另一方面 与 判定同一语言,,矛盾。
与时间版本相比,这里只要求 ,没有 因子,正是因为通用机的空间开销只是常数倍。由此 。
2. Logspace Reduction
2.1 为什么需要更弱的归约
§2.6(第 1 讲)用归约证明了停机问题不可判定:把问题 的实例变成问题 的实例,从而”若 好解,则 也好解”。一般形式是:
定义:m-归约
若可计算全函数 满足:对所有 ,,称 是 到 的 m-归约,记 。
读作” 不比 难”。用它比较复杂度时,归约本身必须比所研究的类更便宜,否则归约函数自己就能把问题解掉,比较就失去了意义。
例如用多项式时间归约(第 3 讲的 Karp 归约)比较 中的问题:任何 都能归约到任何非平凡的问题 。归约函数先自己把 解掉,答”是”就输出 中一个固定的元素,答”否”就输出 外一个固定的元素。这样一来, 中所有非平凡问题都”一样难”,什么信息也得不到。
要研究 、 以及 内部的结构,就需要计算能力更弱的归约:对数空间归约。我们还希望它保持类:若 归约到 且 ,则 。
2.2 隐式对数空间可计算函数
困难在于,归约函数的输出 往往是多项式长的,根本放不进对数空间。解决办法是不要求把输出整个写出来,只要求能算出输出的任意一位。
定义:隐式对数空间可计算(implicitly logspace computable)
函数 称为隐式对数空间可计算的,如果:
- 输出长度多项式有界:;
- “第 位是否存在”在对数空间可判定:;
- “第 位是否为 “在对数空间可判定:。
定义:对数空间归约
若存在隐式对数空间可计算的 m-归约 把 归约到 ,称 对数空间可归约到 ,记 。
由于输出长度多项式有界,下标 只需 位,所以”给定 算第 位”确实能在对数空间内进行。
还有一个更直观的等价说法:
定义:对数空间可计算
若函数 能被一台图灵机计算:它的工作带只用 格,另有一条只写输出带(每写一个符号读写头就右移一格,不能回头读或改写),称 对数空间可计算。
引理
隐式对数空间可计算 对数空间可计算。
证明思路
- () 要算第 位:运行只写输出的机器,但不真的写输出,只数已经”写出”了几个符号,数到第 个时报告它。计数器 位。
- () 依次对 用条件 3 算出第 位,写到只写输出带上,直到条件 2 说明输出结束。只需额外记住 。
2.3 传递性:用重算代替存储
归约要能用来比较难度,必须可传递。对数空间归约的传递性并不显然: 太长,不能先算出来存好,再在上面运行 。
引理
若 且 ,则 。
证明
设 ()、()隐式对数空间可计算。要算 的第 位:运行计算 第 位的对数空间机器,假装它的输入 写在一条”虚拟带”上。每当它需要读虚拟带的第 位,就当场调用计算 的对数空间机器把这一位算出来,用完即扔。整个过程只需存: 机器的工作带()、虚拟读写头的位置 ()、计算 的工作带(),共 。输出长度 仍是多项式。
**“用重算代替存储”**是对数空间算法最核心的技巧:时间可以浪费,空间不行。某个中间结果需要第二次时,不去查表,而是再算一遍。同一思路可以证明 保持类:若 且 ,则 。
与 Karp 归约的关系。 对数空间可计算函数在多项式时间内可算(对数空间机器只有 个格局),所以对数空间归约一定是多项式时间归约;反过来是否成立不知道。已知的 NP-完全性证明,用对数空间归约也都成立。
3. PSPACE Completeness
3.1 完全性
归约给了比较难度的尺子,于是可以谈一个类中”最难”的问题。
定义: -难与 -完全
- 若对每个 都有 ,称 是 -难的。
- 若 还属于 ,称 是 -完全的。
完全问题是整个类的”代表”:它一个问题就承载了整个类的难度。例如若某个 -完全问题属于 ,则( 保持 )。类似地可以定义 -完全(第 5 部分)、-完全(第 3 讲)等。
3.2 量化布尔公式
的代表问题是量化布尔公式的求值。先回忆量词:(对所有 )和 (存在 )。在布尔域上, 只能取 或 ,所以
定义:量化布尔公式与
量化布尔公式(QBF)是形如 的公式,其中每个 , 取值于 , 是只含变量 的无量词布尔公式。所有变量都被量词约束,所以 QBF 要么真、要么假。
例:读懂 QBF
- :取 ,无论 是什么都成立,真。
- :对每个 ,取 即可,真。
- :要找一个 与所有 都不同,不可能,假。
后两个只是交换了量词顺序,真假就变了: 允许 依赖于 , 要求 先定、对所有 都有效。
QBF 推广了可满足性:设 是合取范式,变量为 ,则
只用一种量词时是 或 问题;量词交替出现,难度就上升了。
QBF 即双人博弈。 把
看成两人轮流落子:玩家 I()先给 赋值,玩家 II()再给 赋值……最后若 为真则玩家 I 获胜。公式为真,当且仅当玩家 I 有必胜策略:存在一步走法,使对手无论怎么应对,自己都有一步走法……一直到赢。判断这类博弈谁有必胜策略也是 -完全的(Papadimitriou, Games Against Nature, 1983)。
3.3 Stockmeyer-Meyer 定理
定理(Stockmeyer-Meyer, 1973)
是 -完全的。
证明分两半:(求值不难),以及 是 -难的(任何多项式空间计算都能写成 QBF)。
(1) :深度优先遍历求值树。

把 展开成一棵高度为 的二叉树:第 层结点按 分叉,叶子是 在该赋值下的值。 结点的值是两个孩子的”或”, 结点的值是两个孩子的”与”,根的值就是 的真假。
证明( )
对这棵树做深度优先遍历。当前位置用一个长度至多 的 0-1 串表示(从根到当前结点的赋值),沿途每层只需记一位”左子树结果”。到达叶子时,在给定赋值下计算 ,用 空间。遍历完一个子树就擦掉它的中间结果。总空间 ,即线性空间。
树有 片叶子,时间是指数的;但任何时刻只需存一条从根到叶子的路径,这又是”空间可重用”的体现。
(2) 是 -难的:把”格局图中有路径”写成 QBF。
设 在 空间内判定 ,任取输入 。目标:在对数空间内构造一个 QBF ,使 为真。
由 §1.2, 当且仅当格局图中有从 到 的路径;格局图至多 个顶点,所以这条路径长度至多 。每个格局是 位,可以用 个布尔变量表示。对 构造公式 ,含义为:
- 起点: 表示” 或 “,由 §1.2 的 加上相等判断得到,大小 。
- 递推:长度 的路径,必有一个”中点”,把它分成两段长度 的路径。
朴素的写法是
但这里 出现了两次,每递推一层公式长度翻倍, 会有 长,没法在多项式时间写出来。
关键技巧:用 让一份 检查两段。
加上前提,相当于说”对 和 这两对都要满足 “;而 只写了一次。这就像程序里把”调用两次同一个函数”改写成”循环两次、每次调用一次”,代码只写一份。
证明( 是 -难的)
按上式递推,每层只增加常数个格局变量和常数个等式,即 取 ,其中 使 不小于格局总数,则 (若计入变量名的编码,每个变量名 位,总长 ),是多项式。所有量词前移即得标准形式的 QBF(各层变量互不相同,可以直接前移)。
由构造, 为真。输出 时只需记住”正在写第几层 “以及层内位置, 部分由 §1.2 的引理在 空间写出。因此 是对数空间归约。
证明思路(通俗版)
- 要证什么:任何”多项式空间能判定的问题”都能翻译成”某个 QBF 是否为真”。
- 翻译什么:机器接受 ,等价于格局图里有一条从起点到终点的路。这条路可能有指数长,不能一格一格写进公式。
- 怎么压缩:用”二分中点”递归地描述路径。“长度 的路”等于”存在中点,两半都是长度 的路”。递归 层就覆盖了指数长的路。
- 为什么需要 :直接写”两半都满足”会让公式每层翻倍。借助 ,“对两对端点中的每一对”只需写一份子公式,公式每层只增加 。
- 体会: 负责猜中点, 负责”两边都要检查”,量词交替正好对应了”二分递归”。下一部分 Savitch 定理用的是同一个二分中点的想法,只是改成在机器上执行。
4. Savitch Theorem
第 3 部分把”格局图中有路径”写成了一个不大的 QBF。本部分把同一个”二分中点”的想法搬到机器上执行,回答本讲的第一个核心问题:非确定性能节省多少空间?
先看直接的办法为什么不行。确定型机器模拟一台 空间的 NDTM,可以:
- 枚举所有选择序列:一条计算路径可能长达 步,光是写下一条选择序列就要 格。
- 在格局图上做 BFS(§1.3 的证明):要记住”已访问过的格局”,最多 个。
两种办法都要指数空间。Savitch 定理说,其实平方就够了。
4.1 Savitch 定理
定理(Savitch, 1970)
若 空间可构造,则
证明目标:给定 空间的 NDTM 和输入 ,用确定型机器在 空间内判断格局图 中 能否到达 。策略:与 §3.3 一样,用中点把”长度 的路径”拆成两段”长度 的路径”,递归地检查。§3.3 中” 中点”由公式的量词表达,这里改成逐一枚举所有可能的中点。
证明
定义确定型递归过程 ,它判断”从 到 是否有长度 的路径”:
- :返回” 或 “,后者用 §1.2 的引理检查。
- :按字典序逐一枚举所有 位的串 。若某个 使 与 都返回 ,就返回 ;全部试完仍不行,返回 。
取 使 不少于格局总数,确定型机器运行 ,返回 就接受。对 归纳即知 正确;格局图中的路径若存在,必有一条长度不超过格局总数 。
空间:递归深度为 。每一层只需记住自己的 和 ,共 位。两个子调用先后执行,第二个调用复用第一个调用用过的空间。所以任何时刻栈上至多 层、每层 位,总空间 。 空间可构造保证了机器能先算出格局的长度和 。

上图把递归过程画成一棵树。底部横轴是一条从 到 的候选路径;根 是整条路径的中点, 是左右两半各自的中点,依此类推,树高 。所有结点投影到横轴上,就得到这条路径上的格局。算法对这棵树做深度优先遍历,任何时刻只保存一条从根到当前结点的路径(图中左边或右边的粗线),即 个格局、每个 位。
代价是时间。 每一层要试 个中点,每个中点引起两次递归调用,总时间 ,比 BFS 的 慢得多。这又是”用时间换空间”。
与 §3.3 对照,两者是同一个想法的两种实现:
| Stockmeyer-Meyer(§3.3) | Savitch | |
|---|---|---|
| 找中点 | 量词 | 逐一枚举所有 |
| 两段都要检查 | 让一份 管两段 | 两次递归调用先后执行,空间复用 |
| 每层的开销 | 公式增加 | 栈帧占 |
| 总规模 | 公式 | 空间 |
证明思路(通俗版)
- 难点:要判断能否从起点走到终点,但路可能有指数长,既不能记住整条路,也不能记住走过哪些地方。
- 二分:从 A 到 B 能在 步内走到,等于存在一个中转站 M,A 到 M、M 到 B 都能在 步内走到。中转站不知道是哪个,就一个个试。
- 为什么省空间:先查”A 到 M”,查完把草稿擦掉,再查”M 到 B”。递归只有 层(路径长度的对数),每层只记三个格局。
- 平方从哪来:层数 乘以每层 。
4.2 推论
推论
(,多项式的平方仍是多项式。)这个推论很实用:要证明某个问题属于 ,只需设计一个多项式空间的非确定算法,猜测往往比确定地搜索好写得多。
它还推出 对补封闭:
中间一步是因为确定型类对补封闭(第 1 讲 §4.4)。
对对数空间,Savitch 定理只给出 ,比 大,所以:
- 仍是开放问题;平方是不是最优的,也不知道。
- 上面求补的推导对 失效。 是否对补封闭要另想办法,这是第 6 部分的内容。
与时间对比:模拟非确定时间,已知最好的办法仍是指数级的 ;模拟非确定空间却只付出平方的代价。差别在于空间可以重复使用,而递归的”先查一半、擦掉、再查另一半”正是在重复使用空间。
5. NL Completeness
§1.4 证明了 ,§1.2 又说明任何空间受限的计算都是格局图上的可达性问题。两件事合起来就得到: 是 中最难的问题。
5.1 NL-完全
定义: -完全
若 ,且对每个 都有 ,称 是 -完全的。
这里必须用对数空间归约。,若用多项式时间归约,按 §2.1 的论证,几乎每个 中的问题都会是”完全”的,这个概念就没有意义了。
5.2 PATH 是 NL-完全的
定理
是 -完全的。
证明
已在 §1.4 证明。下证 -难。
设 NDTM 在 空间内判定 ,于是 的格局可以用 位表示,常数 只依赖于 。定义 取 的顶点为所有 位的串,共 个(不是合法格局的串从 出发永远到不了,不影响答案)。用邻接矩阵表示 :第 个元素为 当且仅当 。
- 输出长度为 ,多项式有界。
- 给定下标 ,用 §1.2 的引理检查 ,只需存 和检查过程的计数器,共 空间。
- 、 是容易写出的固定格式的串。
所以这是对数空间归约。由 §1.2, 接受 图中 能到达 。
只看无圈图也够了。 由 §1.2,可以假设对数空间机器都会停机:给它装一个计数器,数到多项式步就停。把计数器的值放进格局,每走一步计数器加一,格局图中就不可能有圈。于是:
推论
有向无圈图的可达性问题也是 -完全的。
“NL 就是 PATH”。 对 封闭(与 §2.3 同样用重算代替存储),再加上完全性,得到
即 恰好是”能在对数空间内变成可达性问题”的那些问题。特别地, 当且仅当 : 与 的差别,全在于确定型机器能否只用常数个指针判断有向图的可达性。
Remark
对无向图,可达性问题在 中(Reingold, 2005),所以难点在于边有方向:在有向图里走进死胡同就退不回来。
6. Immerman-Szelepcsényi Theorem
本讲的最后一个问题是: 对补封闭吗?
回顾第 1 讲 §5.2 的不对称:NDTM 接受只需要一条成功路径,拒绝却要所有路径都失败。所以非确定机器擅长证明”存在”(例如指出一条路径),不擅长证明”不存在”。对 ,Savitch 定理让我们先变成确定型再取补(§4.2);对 ,这条路走不通。由 §5,问题归结为:
一台对数空间 NDTM 能否确认”从 不能到达 ”?
人们曾普遍以为不能,就像相信 一样。1987 年,Immerman 和 Szelepcsényi 各自独立地证明了:能。
定理(Immerman-Szelepcsényi, 1987)
6.1 核心想法:清点人数
把”不存在”转化为”存在”的关键是计数。假如事先知道从 能到达的顶点恰好有 个,那么” 不可达”就等价于:
存在 个不同于 的顶点,每个都附有一条从 出发的路径。
这是一个存在性命题,NDTM 可以去猜、去验证。就像点名:花名册上说今天到了 30 人,若点到了 30 个不是小明的人,小明就一定没来。
于是证明分成两步:
- (A) 已知个数,确认不可达:已知可达顶点数 ,确认 不在其中。
- (B) 求出个数:用非确定对数空间算出 。
先说清楚”非确定地算出一个数”是什么意思:每条计算路径要么放弃(拒绝),要么得出正确的值,并且至少有一条路径不放弃。
记号: 为从 出发 至多 步能到达的顶点集合,。于是 ,,,而 就是所有可达顶点( 是顶点数)。每个 只需 位,存得下;集合 本身可能有 个元素,存不下。
6.2 第一步:已知 ,判断任意 是否属于
过程:枚举 (已知 )
计数器 。按顺序对每个顶点 :
- 非确定地猜 是否属于 ;
- 若猜”是”,就非确定地猜一条从 出发、长度至多 的路径走到 (同 §1.4,只记当前顶点和步数)。走不到就放弃;走到了就 ,并对 做所需的检查(例如 是不是 );
- 若猜”否”,跳过 。
所有顶点处理完后,若 ,放弃。
关键观察:没有放弃的路径,一定恰好把 完整地列举了一遍。每个被计数的顶点都验证过路径,所以计数到的顶点都在 中;计数又恰好等于 ,所以 中一个也没漏。因此在列举过程中顺便检查” 是否出现过”,得到的就是""的正确答案,无论答案是”是”还是”否”。另外,猜得全对的那条路径不会放弃,所以总有路径给出答案。
空间:、、、路径上的当前顶点和步数,都是 位。
6.3 第二步:由 归纳地算出
顶点 属于 ,当且仅当 ,或者有某个 使 是一条边。所以:
过程:由 计算
。按顺序对每个顶点 :用 §6.2 的过程(以 为已知个数)列举一遍 ,列举时检查是否出现 或 。若出现,。
每处理一个 都要把 重新列举一遍,这又是”用重算代替存储”: 存不下,那就每次需要时重新猜一遍。由 §6.2,没放弃的路径对每个 都判断正确,所以算出的 正确。算完 就可以擦掉 。
6.4 完整证明
证明(Immerman-Szelepcsényi 定理)
构造对数空间 NDTM,输入 , 有 个顶点:
- 。
- 对 ,用 §6.3 由 算出 ,然后擦掉 。
- 用 §6.2 的过程(以 为已知个数)列举一遍 ,检查 是否出现。若列举成功且 未出现,接受;否则拒绝。
正确性:由 §6.2、§6.3,没有放弃的路径上,所有 都正确,第 3 步对""的判断也正确。所以若 从 可达,没有路径接受;若不可达,猜得全对的那条路径接受。
空间:任何时刻只需存 、、、正在处理的 ,以及 §6.2 过程中的 位,共 。
证明思路(通俗版)
- 难点:非确定机器能”指出一条路”来证明可达,却没法直接证明”没有路”。
- 转化:若知道可达顶点一共有 个,就把它们一个个找出来(每个都指出路径),凑满 个时 还没出现, 就一定不可达。“不存在”变成了”存在一份完整的名单”。
- 个数从哪来:一层层地数。知道” 步内能到达的有 个”,就能可靠地列出这些顶点,从而判断每个顶点是否在 步内可达,数出 。
- 为什么空间够:从头到尾只存几个计数器和顶点编号,名单本身从不保存,每次需要时重新猜一遍。
推论
证明
设 ,即 。由 §5,存在对数空间归约 使 ,即 。所以 ,又 对 封闭,得 。于是 ,由第 1 讲 §4.4 的引理即得相等。
同一个算法在格局图上运行,就得到一般形式:
推论
若 空间可构造,则 。
(对 空间的 NDTM 和输入 ,在格局图 上运行上述算法。格局图有 个顶点,顶点名和计数器都是 位;边不必存,需要时用 §1.2 的引理当场检查。)
Remark:为什么这个技巧对 不管用
清点人数需要把所有顶点逐一过一遍。在空间受限的世界里时间不受限,逐一枚举 个格局没有问题。对 而言,要清点的对象(例如所有候选证书)有指数多个,多项式时间内过不完。所以 仍然开放。
6.5 应用:2SAT 是 NL-完全的
作为 Immerman-Szelepcsényi 定理的应用,看一个逻辑问题。2-合取范式是每个子句至多含两个文字的合取范式,例如 。
第 3 讲会看到,每个子句允许三个文字的 是 -完全的;只差一个文字, 却落在 中。原因是两个文字的子句恰好是一条蕴含:
” 为假则 必须为真”,这种强制关系可以沿着链条传播,于是可满足性变成了图上的可达性。
定义:蕴含图
设 2-合取范式 的变量为 。它的蕴含图有 个顶点 ;对每个子句 ,加入两条边 和 (单文字子句 看作 )。
边的含义是”若起点为真,则终点必须为真”。沿路径传递,(零步或多步可达)意味着” 为真则 必须为真”。边是成对加入的,所以图有对称性: 当且仅当 (逆否命题)。
引理
不可满足 存在变量 ,使蕴含图中 且 。
证明
() 若 取真,由 , 也必须为真,矛盾;若 取假, 为真,由 , 必须为真,矛盾。
() 证逆否:假设没有这样的 ,构造一个满足赋值。重复以下操作直到所有变量都有值:任取一个未赋值的变量 ,由假设, 与 至少一个不成立,选文字 使 不成立;把所有 的文字 设为真( 设为假)。这样做不会冲突:
- 不会有 与 同时成立,否则由对称性 ,于是 ,与 的选法矛盾。
- 不会之前已被设为假。否则 之前已被设为真,而已设为真的文字集合对 封闭;由对称性 ,所以 之前已被设为真, 已有值,矛盾。
最终每个子句 都满足:若 为假,则 为真,由边 和真文字集合的封闭性, 为真。
定理
是 -完全的。
证明
:由引理,判断 不可满足,只需非确定地猜一个变量 ,再用 §1.4 的算法检查 和 。蕴含图的每条边都能从 当场读出,所以 ,即 。这里用到了 Immerman-Szelepcsényi 定理。
是 -难的:把 归约到 。给定 ,把每个顶点看成一个变量,每条边 变成子句 (即 ),再加上单文字子句 和 ,得到 。
- 若 能到达 : 为真沿路径迫使 为真,与子句 矛盾, 不可满足。
- 若 不能到达 :把从 可达的顶点设为真,其余设为假。可达集合沿边封闭,所以每个子句 都满足; 为真, 为假。 可满足。
所以 ,且每个子句只依赖一条边,这是对数空间归约。
最后, 是 -难的:对 ,,故 ,即 。由传递性,。
6.6 全景
本讲结束时,可以把已知的类排成一条链:
谱系定理告诉我们其中有些包含是严格的:
- (Savitch 加空间谱系定理),所以 到 之间至少有一个包含是严格的;
- (时间谱系定理),所以 到 之间至少有一个包含是严格的。
但具体是哪一个,一个也不知道。人们普遍相信 ; 是结构复杂性理论中的重要开放问题。
最后把本讲的结论和用到的技巧放在一起:
| 结论 | 核心技巧 |
|---|---|
| 格局只有 个,在格局图上搜索 | |
| 空间谱系定理(无 因子) | 对角线方法;通用机只有常数倍空间开销 |
| 可传递 | 用重算代替存储 |
| 是 -完全的 | 二分中点, 让一份子公式检查两段 |
| Savitch: | 二分中点,递归调用先后执行、空间复用 |
| 是 -完全的 | 格局图本身就是归约 |
| Immerman-Szelepcsényi: | 归纳计数(清点人数),每次重新猜名单 |