Scarlet Serenade

Introduction to the Theory of Computation | Space Complexity

定义图灵机的空间复杂性

  • DTM 在长度为 的输入上最多扫描 个不同的方格
  • NTM 在长度为 的输入上在任何分支最多扫描 个不同的方格 则 M 的空间复杂度为

定义图灵机的空间复杂性类

  • SPACE(f(n)) 表示所有能在 空间上被 DTM 判定的语言
  • NSPACE(f(n)) 表示所有能在 空间上被 NTM 判定的语言

可满足性问题 SAT 属于 SPACE(f(n)):
对于输入的布尔公式 ,我们对其每个变量 赋值,计算公式在该赋值下的值。
存储每种复制需要 的空间,每次计算需要 的空间,所以总的空间复杂度为


定义语言 为所有 {其语言为字母表上全集的 NFA},我们可以给出一个 空间的算法 decide 其补集,核心思想为:

  • 用非确定性来猜测被 NFA 拒绝的串
  • 用线性空间存储在特定时刻 NFA 可能处于的状态

若一个 NFA 有拒绝的串,则必有长度小于 的串被拒绝,其中 为状态数:若被拒绝的串长度大于等于 ,则根据鸽笼原理,其经过的状态路径必有重复,则我们可以通过删除部分来得到更短的串 ...a[...a]...

Algorithm: 对于输入 为一个 NFA

mark start_state of M
for _ in 0..2**q {
    随机选择一个输入(NonDeterministic 体现在这里),并标记下一个状态来模拟读取
    若拒绝状态被标记,则输出 Accept
}
输出 Reject

我们的算法中用到的空间只有:状态标记以及 loop counter,所以我们的算法的空间复杂度是线性的。


我们定义一个 can_yield 过程,can_yield 被用来判断 NTM 的一个 Configuration 能否在给定步数内到达另一个 Configuration

can_yield c1 c2 t =
    if t = 1
        return (c1 = c2) or (c1 -> c2 in one step)
    for cm in machine
        if (can_yield c1 cm t/2) and (can_yield cm c2 t/2)
            return accept
    return reject

对每层递归,我们需要 的空间来存储 Configuration;基于二分,我们的递归深度为 的。所以我们总的空间复杂度为 的。


萨维奇定理说,用确定型图灵机模拟非确定图灵机,空间的增长是平方级别的,

给定一个 NTM ,我们构造一个 DTM ,对于输入

Output the result of

我们可以利用 can_yield 过程 来证明萨维奇定理。
这里我们限制的步数为 ,因为给定一个最大空间占用为 的 NTM,其状态数是给定的,则其 Configuration 的数量是 级别的,则根据鸽笼原理,从初始 Configuration 到接受 Configuration 一定是可以在 步内完成的 这样我们就构造出了空间复杂的为 的 DTM

我们目前给出的步骤的一个问题是,在算法开始前,我们没有 的确切值。