“EXPSPACE 是可用 $2^{\mathrm{poly}(N)}$ 空间决定的问题类,其中 $N$ 为输入编码长度。完全性包括指数空间上界,以及多项式时间归约意义下的 EXPSPACE…”
形式陈述
固定一台带只读输入带和有限条可读写工作带的图灵机。这里把长度为
在标准顺序纸带上,已访问区域可取为包含所有已访问格子的最短区间;固定带数时,这与逐带计数只差常数。对判定机
若
非确定机器的空间先对同一输入的所有分支取最大值,再对长度为
直觉
时间复杂度累计执行过多少步,空间复杂度统计一条运行中需要开辟多少工作格。同一格可以擦除后存放新内容,重写一千次仍只占一个格;因此时间可以远大于空间。所谓“同时保留的信息峰值”是复用的直观说法,正式计量则以曾访问的工作带区域为准。一个程序若只写一位、擦掉后向右移动,再反复这样做,当前非空格始终只有一个,但访问区域不断增长;它仍消耗增长的空间。要得到小空间算法,必须真正回用已开辟的区域,而非仅把不用的数据擦成空白。
只读输入与只写输出把“给定的数据”“中间工作区”“产生的结果”分开。若把输入本身算进工作空间,所有长度为
例子与边界
三位计数器展示空间复用
工作带上的三个位可以依次经历
这段运行执行多次进位,却始终只访问三个工作格。一般地,
计费边界
递归调用栈、显式队列、哈希表元数据和保存的指针都属于工作空间,不能只统计主要数组。复杂度理论中的格子数也不同于进程 RSS;运行库、内存分配器、代码页和缓存属于另一套工程测量模型。
Savitch 定理的八顶点例子把这一原则落实为四帧账本:逐帧记录端点、中点、阶段和返回位,左子调用结束后让右子调用复用原来的子调用工作区。删除一条边会增加需要探索的失败候选,却不增加最大递归深度。练习时应另列只读矩阵与输入扫描索引,不能把教学帧的载荷位数当作整机精确空间。
当
推论与应用
空间计量导出DSPACE和非确定空间类。配置由有限状态、所有头位置与工作带内容组成。若工作空间为
工程模型还需说明计量单位:
只写“
L把预算固定为
参考资料
- Sanjeev Arora and Boaz Barak, Computational Complexity: A Modern Approach, Cambridge University Press, 2009, Chapter 4.
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013, §8.1.