本节摘要:时间复杂性受关注多,但空间复杂性同样重要且有趣。本节讲清楚 PSPACE 类、PSPACE 完全问题、空间与时间的关系、以及为什么"空间比时间更宝贵"。读完你能理解为什么棋类游戏是 PSPACE 完全的、为什么空间复杂性有独特性质。
PSPACE 类是多项式空间可解的问题集合——确定性图灵机多项式空间内可解,时间不限。
直觉:PSPACE 是"空间高效"的问题——内存用多项式,但时间可能很长(指数)。
PSPACE 的例子:
这些问题时间可能指数(要搜索指数多状态),但空间多项式(状态可复用空间)。
已知:NP ⊆ PSPACE。直觉:非确定性多项式时间,每步多项式空间(多项式步 × 多项式空间 = 多项式空间)。所以 NP 问题用多项式空间可解(广度优先遍历所有分支)。
类似 coNP ⊆ PSPACE。所以 NP ∪ coNP ⊆ PSPACE。
但 PSPACE 是否等于 NP?多数相信 PSPACE 严格大于 NP——PSPACE 完全问题(如 QBF)被认为比 NP 完全更难,但无证明。
包含链:P ⊆ NP ⊆ PSPACE ⊆ EXPTIME。已知 P ⊊ EXPTIME(时间层次定理),所以至少一个包含是真包含,但具体哪个未全知。
类似 NP 完全,PSPACE 完全问题是 PSPACE 中最难的:所有 PSPACE 问题能多项式归约到它们。
QBF(量词布尔公式):判断 ∀x₁∃x₂∀x₃...φ 是否成立。QBF 是 PSPACE 完全的——任何 PSPACE 问题能归约到 QBF(编码多项式空间计算为量词公式)。
棋类游戏:国际象棋、围棋、跳棋的"给定棋局,先手是否必胜"是 PSPACE 完全(或 EXPTIME 完全,取决于规则)。直觉:棋盘状态多项式,但搜索博弈树指数,空间多项式但时间指数。
公式游戏:两玩家轮流给变量赋值,判断先手必胜。PSPACE 完全,是证明其他 PSPACE 完全的常用起点。

空间和时间复杂性的关系有几个有趣点:
1. 空间可复用,时间不可:一步用过的空间,下一步可复用。时间用过了就过去了。这让空间比时间"更宝贵"——同样多项式,空间限制更严。
2. 空间层次定理:更多空间能解更多问题。类似时间,但空间层次更清晰——SPACE(f(n)) ⊊ SPACE(g(n)) 当 g 比 f 增长快。这给出 L ⊊ PSPACE 等严格包含(L 是对数空间)。
3. Savitch 定理:NSPACE(f(n)) ⊆ SPACE(f(n)²)。非确定性空间 f(n) 能被确定性空间 f(n)² 模拟。这让 NPSPACE = PSPACE(非确定性多项式空间 = 确定性多项式空间)。对比时间:NTIME vs DTIME 关系不明(P vs NP),但空间关系明确(Savitch)。
4. 空间限制更严:L(对数空间)⊂ P(多项式时间)⊂ PSPACE。对数空间算法很受限,多项式时间算法相对自由。
L(对数空间):确定性图灵机 O(log n) 空间可解。极受限——只能存常数个对数大小的指针。
NL(非确定性对数空间):非确定性 O(log n) 空间。等价于"对数空间可验证"。
L 的例子:判断图是否连通——用 O(log n) 空间存当前顶点和计数器,广度优先遍历。但最短路在 L(Reingold 2005 证明,震惊学界)。
NL 的例子:s-t 连通性(从 s 能否到 t)——非确定性"猜"路径,O(log n) 空间存当前顶点。
L vs NL 关系未全明(多数相信 L ⊊ NL,但未证),但 Savitch 给 NL ⊆ SPACE(log² n)。
PSPACE 完全问题对应"长期规划""博弈"类问题:
这些问题共同点:涉及"对所有可能""存在某可能"的交替(量词交替),需要搜索指数多状态但多项式空间能复用。
实际应对类似 NP 完全——用近似、启发式、限制输入、符号模型检测(用 BDD 压缩状态)等。
直觉:空间可复用但更受限,时间不可复用但更自由。
1. 空间限制更严:多项式空间算法比多项式时间算法少——时间多项式但空间指数的算法存在(如某些递归),但空间多项式时间指数的算法常见。
2. 硬件限制:内存比 CPU 时间更贵——加内存比加 CPU 难,内存满了程序崩,时间慢点还能等。
3. 可复用性:空间可复用让小空间能解大问题(如流式算法),但时间不可复用让长时间问题只能等。
4. 层次清晰:空间层次定理给出严格包含(L ⊊ PSPACE),时间层次只给 P ⊊ EXPTIME,中间 NP 关系不明。
所以复杂性理论中空间类(L、NL、PSPACE)比时间类(P、NP)关系更清晰,但实际工程中空间往往更受关注(内存限制)。
"空间可复用"不是抽象口号,它有直接的工程后果。考虑这个问题:数据以流的形式不断到达(比如一天的网络日志),你要知道到目前为止出现过多少种不同的值。精确统计需要记住所有见过的值,空间随数据量增长;但如果不要求绝对精确,用固定大小的位数组加若干哈希函数(布隆过滤器)就能给出"大概率正确"的近似——这就是用可复用空间换精度的经典例子。
理论上的对应是流式算法与亚线性空间:允许少量误差,把空间压到对数级甚至常数级。这与 L 类(对数空间)的精神一脉相承:空间稀缺时,算法的设计思路从"记住一切"变成"归纳出足够的状态"。Reingold 证明无向图连通性在对数空间可解,正是这种思路的巅峰——只存常数个指针,却能遍历整张图。
空间复杂性给工程的启示很直接:当内存是瓶颈而时间相对宽裕时,很多问题可以重新设计为"多遍扫描加少量状态",这在数据库连接、图流分析、网络监控里都是日常操作。理解了空间可复用,就理解了为什么同样的资源预算下,空间约束往往比时间约束更能塑造算法形态。
⚠️ 常见误读:以为"多项式空间一定多项式时间"。错。PSPACE 问题空间多项式但时间可能指数——如 QBF 要搜索量词交替的指数组合,空间复用但时间累计指数。PSPACE ⊆ EXPTIME 但可能不等于 P。
💡 关键直觉:PSPACE 是多项式空间可解(时间可能指数),对应博弈/规划/长期推理。PSPACE 完全(QBF/棋类/公式游戏)比 NP 完全更难(相信未证)。空间可复用比时间宝贵,Savitch 定理让 NPSPACE=PSPACE。空间层次比时间层次清晰(L⊊PSPACE),实际空间限制更受关注。