只有在接下了苦涩之杯后,才能得到永远的生命
Savitch’s Theorem :
∀ f ∈ Ω ( l o g ( n ) ) , N S P A C E ( f ( n ) ) ⊆ D S P A C E ( f ( n ) 2 ) \forall f\in\Omega(log(n)),NSPACE(f(n))\subseteq DSPACE(f(n)^2)
∀ f ∈ Ω ( l o g ( n ) ) , N S P A C E ( f ( n ) ) ⊆ D S P A C E ( f ( n ) 2 )
实际上还有:
∀ f ∈ Ω ( l o g ( n ) ) , N S P A C E ( f ( n ) ) ⊆ D T I M E ( 2 O ( f ( n ) ) ) \forall f\in\Omega(log(n)),NSPACE(f(n))\subseteq DTIME(2^{O(f(n))})
∀ f ∈ Ω ( l o g ( n ) ) , N S P A C E ( f ( n ) ) ⊆ D T I M E ( 2 O ( f ( n ) ) )
然后就有N S P A C E = P S P A C E NSPACE=PSPACE N S P A C E = P S P A C E 。因为:
N S P A C E = ⋃ k ∈ N N S P A C E ( n k ) = ⋃ k ∈ N P S P A C E ( n 2 k ) ⊆ P S P A C E P S P A C E ⊆ N S P A C E NSPACE=\bigcup_{k\in\mathbb{N}}NSPACE(n^k)=\bigcup_{k\in\mathbb{N}}PSPACE(n^{2k})\subseteq PSPACE\\
PSPACE\subseteq NSPACE
N S P A C E = k ∈ N ⋃ N S P A C E ( n k ) = k ∈ N ⋃ P S P A C E ( n 2 k ) ⊆ P S P A C E P S P A C E ⊆ N S P A C E
还有N S P A C E ⊆ E X P NSPACE\subseteq EXP N S P A C E ⊆ E X P 。
这个定理的证明实际上基于一个算法,也很好说明了 complexity 和 algorithm 间的关系。
考虑这样一个问题,给定一个图G G G ,以及两个顶点s , t s,t s , t ,判断G G G 中是否从s s s 到t t t 有一条通路。这个问题被称为 STCON 问题,可在空间复杂度O ( l o g 2 n ) O(log^2n) O ( l o g 2 n ) 内解决。算法如下:
1 2 3 4 5 6 7 8 bool k_edge_path (s, t, k) { if (k == 0 ) return s == t; if (k == 1 ) return (s, t) in Edge(G); for u in Vertex (G) { if k_edge_path (s, u, k - 1 ) && k_edge_path (u, t, k - 1 ) return true ; } return false }
这段代码就是求解s → t s\rightarrow t s → t 是否有长度≤ 2 k \leq 2^k ≤ 2 k 的路径,使用了倍增的思想。正确性是显然的,主要考虑它的空间复杂性。
既然使用了递归,那么就需要一个栈实现。首先整个递归深度为O ( l o g ( n ) ) O(log(n)) O ( l o g ( n ) ) ,因为s → t s\rightarrow t s → t 的路径最长可能是n n n 。
然后每层递归都需要存储s , t , k s,t,k s , t , k 三个变量,而这三个变量相对于输入⟨ G , s , t ⟩ \langle G,s,t\rangle ⟨ G , s , t ⟩ 的长度来说,存储空间都是O ( l o g ( n ) ) O(log(n)) O ( l o g ( n ) ) 级别的。
故整个算法空间复杂度为O ( l o g 2 n ) O(log^2n) O ( l o g 2 n ) 的。
为什么要考虑这个问题呢?就是因为图和非确定性图灵机的同构关系。
一个非确定性图灵机,假如我们限制它的空间复杂度在f ( n ) f(n) f ( n ) 级别,那么所有可能的 configuration 有多少个呢?
带子上的内容最多有O ( 2 f ( n ) ) O(2^{f(n)}) O ( 2 f ( n ) ) 级别个。
状态数是常量个,不依赖于输入。
读写头的位置有O ( f ( n ) ) O(f(n)) O ( f ( n ) ) 个。
一个 configuration 包含且仅包含上述内容,故给定一个 NTM,它的 configuration 最多在O ( f ( n ) ⋅ 2 f ( n ) ) O(f(n)\cdot 2^{f(n)}) O ( f ( n ) ⋅ 2 f ( n ) ) 级别。
而 NTM 运行的过程,实际上可以看作一个图。(不是把 NTM 本身看作一个图!)其中结点是 configuration,而边是 nondeterministic 的转移。而最后是否 accept 就是在寻找是否存在一条 path,从初始到 accept configuration。故利用上述算法,可以得到需要的空间复杂度为:
O ( l o g 2 ( f ( n ) ⋅ 2 f ( n ) ) ) = O ( f ( n ) 2 ) O(log^2(f(n)\cdot 2^{f(n)}))=O(f(n)^2)
O ( l o g 2 ( f ( n ) ⋅ 2 f ( n ) ) ) = O ( f ( n ) 2 )
故N S P A C E ( f ( n ) ) ⊆ D S P A C E ( f ( n ) 2 ) NSPACE(f(n))\subseteq DSPACE(f(n)^2) N S P A C E ( f ( n ) ) ⊆ D S P A C E ( f ( n ) 2 ) 。同理,利用 BFS、DFS 等不考虑空间但节省时间的算法,也可以得到时间复杂度为指数级别。
这个证明可能略粗糙,主要揭示了一个思想,有很多细节问题。譬如为啥我们不需要枚举t ∈ a c c e p t c o n f i g u r a t i o n t\in accept\;configuration t ∈ a c c e p t c o n f i g u r a t i o n ?实际上不失一般性,我们可以在不增加时间空间复杂度的情况下,修改 NTM 使得它只有一个 accept configuration。其他还有问题可以发挥下主观能动性解决下 ww