TCS Homework 9

9.1

题目

问题 1. 证明当 TQBF(真量化布尔公式问题)限制在量词后面的部分是合取范式(CNF)时,它仍然是 PSPACE-完全的。

解答

证明步骤

步骤 1: CNF-TQBF ∈ PSPACE

  • 标准 TQBF 问题(无矩阵形式限制)已知在 PSPACE 中(由 PSPACE = APTQBF 的性质可得)。

  • CNF-TQBF 是 TQBF 的子集,因为其矩阵被限制为 CNF 形式。

  • 因此,CNF-TQBF ∈ PSPACE。

步骤 2: CNF-TQBF 是 PSPACE-难(PSPACE-hard)

  • 要证明 CNF-TQBF 是 PSPACE-难的,需证明标准 TQBF(其矩阵可以是任意布尔公式)可以多项式时间归约到 CNF-TQBF。
  • 归约思路:给定一个标准 TQBF 实例 Φ=Q1x1Q2x2Qnxnϕ(x1,,xn)\Phi = Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \phi(x_1, \ldots, x_n),其中 ϕ\phi 是任意布尔公式,我们将其转换为一个等价的 CNF-TQBF 实例 Φ\Phi',其中矩阵是 CNF 形式。这通过以下步骤实现:
    1. 应用 Tseitin 变换:将矩阵 ϕ\phi 转换为 CNF 形式,但引入额外的辅助变量。
      • Tseitin 变换是一种多项式时间算法,可将任意布尔公式 ϕ\phi 转换为一个 CNF 公式 ϕ\phi',同时引入一组新变量 y1,,ymy_1, \ldots, y_m,使得:

        ϕ(x1,,xn)y1ymϕ(x1,,xn,y1,,ym),\phi(x_1, \ldots, x_n) \equiv \exists y_1 \cdots \exists y_m \phi'(x_1, \ldots, x_n, y_1, \ldots, y_m),

        其中 ϕ\phi' 是 CNF 公式,且变换后公式大小(变量数和子句数)是原始公式大小的线性倍(因此多项式时间可完成)。
      • 新变量 y1,,ymy_1, \ldots, y_m 是“存在量化”的,因为它们用于编码 ϕ\phi 的子公式的结构,确保 ϕ\phi' 在逻辑上等价于 ϕ\phi(在给定存在量词下)。
    2. 构造新公式:将 Tseitin 变换的结果嵌入原量词序列中:

      Φ=Q1x1Q2x2Qnxny1ymϕ(x1,,xn,y1,,ym).\Phi' = Q_1 x_1 Q_2 x_2 \cdots Q_n x_n \exists y_1 \cdots \exists y_m \phi'(x_1, \ldots, x_n, y_1, \ldots, y_m).

      • 这里,新添加的量词 y1ym\exists y_1 \cdots \exists y_m 被放置在原量词序列的最后(即最内层),因为辅助变量 yiy_i 依赖于所有先前的变量 x1,,xnx_1, \ldots, x_n
    3. 等价性证明Φ\Phi 等价于 Φ\Phi',即:

      Φ 为真    Φ 为真.\Phi \text{ 为真} \iff \Phi' \text{ 为真}.

      • 理由:由 Tseitin 变换的性质,对于任意固定赋值给 x1,,xnx_1, \ldots, x_n,存在赋值给 y1,,ymy_1, \ldots, y_m 使得 ϕ(x1,,xn,y1,,ym)\phi'(x_1, \ldots, x_n, y_1, \ldots, y_m) 为真当且仅当 ϕ(x1,,xn)\phi(x_1, \ldots, x_n) 为真。因此,整个量化公式的真值被保留。
      • 量词顺序不变(仅在最内层添加存在量词),因此等价性成立。
    4. 矩阵是 CNFϕ\phi' 是 CNF 公式,因此 Φ\Phi' 是一个有效的 CNF-TQBF 实例。
    5. 归约复杂度:Tseitin 变换可在多项式时间内完成(相对于原始公式大小),且引入的新变量和子句数量是原始公式大小的线性函数,因此整个归约是多项式时间。
  • PSPACE-难性:由于标准 TQBF 是 PSPACE-完全的,且我们给出了从 TQBF 到 CNF-TQBF 的多项式时间归约,因此 CNF-TQBF 是 PSPACE-难的。

9.2

题目

SUM={(x,y,z)x,y,z>0 是满足 x+y=z 的二进制整数}\text{SUM} = \{(x, y, z) \mid x, y, z > 0 \text{ 是满足 } x + y = z \text{ 的二进制整数}\}。证明 SUML\text{SUM} \in L

解答

假设输入格式为字符串 w=x#y#zw = x \# y \# z,其中 #\# 是分隔符。

算法描述

  1. 计算字符串长度

    • 扫描输入,计算 xx 的长度 lenx\text{len}_x:初始化计数器 lenx=0\text{len}_x = 0,从输入起始位置向右扫描,每读到一个非 #\# 字符,lenx\text{len}_x 加 1,直到遇到第一个 #\#
    • 类似地,计算 yy 的长度 leny\text{len}_y:从第一个 #\# 后开始,初始化 leny=0\text{len}_y = 0,扫描直到第二个 #\#,每读一个字符,leny\text{len}_y 加 1。
    • 计算 zz 的长度 lenz\text{len}_z:从第二个 #\# 后开始,初始化 lenz=0\text{len}_z = 0,扫描直到输入结束,每读一个字符,lenz\text{len}_z 加 1。
    • 空间分析:每个长度计数器最多为 nn,存储需 O(logn)O(\log n) 位。
  2. 计算最大位置

    • 计算 max_lenxy=max(lenx,leny)\text{max\_len}_{xy} = \max(\text{len}_x, \text{len}_y)
    • max_pos=max_lenxy+1\text{max\_pos} = \text{max\_len}_{xy} + 1(因为 zz 可能比 max(lenx,leny)\max(\text{len}_x, \text{len}_y) 多一位)。
    • 空间分析:max_lenxy\text{max\_len}_{xy}max_pos\text{max\_pos} 最多为 n+1n + 1,存储需 O(logn)O(\log n) 位。
  3. 初始化进位

    • carry=0\text{carry} = 0(初始进位)。
    • 空间分析:carry\text{carry} 为 0 或 1,需 O(1)O(1) 空间。
  4. 逐位加法验证

    • 对于位置 tt 从 0 到 max_pos\text{max\_pos}(包含):
      • 计算索引
        • 对于 xx,索引 ix=lenxti_x = \text{len}_x - t(若 1ixlenx1 \leq i_x \leq \text{len}_x,则位有效,否则为 0)。
        • 对于 yy,索引 iy=lenyti_y = \text{len}_y - t(若 1iyleny1 \leq i_y \leq \text{len}_y,则位有效,否则为 0)。
        • 对于 zz,索引 iz=lenzti_z = \text{len}_z - t(仅当比较时需要)。
      • 获取位值
        • bitx={input[ix]if 1ixlenx0otherwise\text{bit}_x = \begin{cases} \text{input}[i_x] & \text{if } 1 \leq i_x \leq \text{len}_x \\ 0 & \text{otherwise} \end{cases}
        • bity={input[starty+iy1]if 1iyleny0otherwise\text{bit}_y = \begin{cases} \text{input}[\text{start}_y + i_y - 1] & \text{if } 1 \leq i_y \leq \text{len}_y \\ 0 & \text{otherwise} \end{cases}
          其中 starty=lenx+2\text{start}_y = \text{len}_x + 2yy 的起始位置)。
        • 类似地,zz 的起始位置 startz=lenx+leny+3\text{start}_z = \text{len}_x + \text{len}_y + 3
        • 空间分析:索引计算和位置值最多为 O(n)O(n),存储需 O(logn)O(\log n) 位。
      • 计算和与期望位
        • s=bitx+bity+carrys = \text{bit}_x + \text{bit}_y + \text{carry}
        • exp_z_bit=smod2\text{exp\_z\_bit} = s \mod 2
        • new_carry=s/2\text{new\_carry} = \lfloor s / 2 \rfloor
        • 空间分析:s3s \leq 3exp_z_bit\text{exp\_z\_bit}new_carry\text{new\_carry} 为常数大小,需 O(1)O(1) 空间。
      • 验证
        • t<lenzt < \text{len}_z:
          • 获取实际位 bitz=input[startz+iz1]\text{bit}_z = \text{input}[\text{start}_z + i_z - 1](若 1izlenz1 \leq i_z \leq \text{len}_z)。
          • bitzexp_z_bit\text{bit}_z \neq \text{exp\_z\_bit},拒绝。
        • tlenzt \geq \text{len}_z:
          • exp_z_bit0\text{exp\_z\_bit} \neq 0,拒绝(因为 zz 无此位,但期望值非零)。
      • 更新进位carry=new_carry\text{carry} = \text{new\_carry}.
    • 空间分析:tt 最多为 max_posn+1\text{max\_pos} \leq n + 1,存储需 O(logn)O(\log n) 位。
  5. 结束处理

    • 循环结束后,若未拒绝,则接受(即 x+y=zx + y = z)。
    • 注意:在 t=max_post = \text{max\_pos} 时,new_carry\text{new\_carry} 必为 0,因此无需额外检查进位。

空间复杂度分析

  • 存储的长度(lenx,leny,lenz\text{len}_x, \text{len}_y, \text{len}_z)需 O(logn)O(\log n) 位。
  • max_lenxy,max_pos,t\text{max\_len}_{xy}, \text{max\_pos}, tO(logn)O(\log n) 位。
  • 进位(carry,new_carry\text{carry}, \text{new\_carry})需 O(1)O(1) 空间。
  • 临时变量(索引、位值、和等)需 O(logn)O(\log n)O(1)O(1) 空间。
  • 总工作空间为 O(logn)O(\log n).

9.3

题目

(a) 一个无向图是二分图(bipartite),如果其节点可以被划分为两个集合,使得所有边都连接一个集合中的节点与另一个集合中的节点。证明一个图是二分图当且仅当它不包含节点数为奇数的环(即奇环)。

(b) 设 BIPARTITE={GG 是一个二分图}\text{BIPARTITE} = \{ \langle G \rangle \mid G \text{ 是一个二分图} \}。证明 BIPARTITE\text{BIPARTITE} 属于复杂度类 NL(非确定性对数空间)。

解答

(a) 证明:一个图是二分图当且仅当它不包含奇环

  1. 如果 GG 是二分图,则 GG 中不存在奇环。

    假设 GG 是二分图,则节点集 VV 可以被划分为两个不相交的集合 UUVV,使得每条边都连接 UU 中的一个节点和 VV 中的一个节点(即没有边在同一个集合内)。

    考虑 GG 中的任意一个环 C=v1v2vkv1C = v_1 - v_2 - \cdots - v_k - v_1,其中 k3k \geq 3。由于 GG 是二分图,节点在环中必须交替地属于 UUVV。不失一般性,假设 v1Uv_1 \in U。则:

    • v2Vv_2 \in V(因为边 (v1,v2)(v_1, v_2) 连接 UUVV),
    • v3Uv_3 \in U(因为边 (v2,v3)(v_2, v_3) 连接 VVUU),
    • 依此类推。

    一般地,对于节点 viv_i

    • 如果 ii 是奇数,则 viUv_i \in U,
    • 如果 ii 是偶数,则 viVv_i \in V.

    现在,考虑节点 vkv_kv1v_1

    • 如果 kk 是奇数,则 vkUv_k \in U(因为 kk 奇数)。
    • 但边 (vk,v1)(v_k, v_1) 要求 vkv_kv1v_1 属于不同集合,而 v1Uv_1 \in UvkUv_k \in U 矛盾(因为两者都在 UU)。

    因此,当 kk 为奇数时,环 CC 不可能存在。换言之,GG 中不存在奇环。

    如果 kk 是偶数,则 vkVv_k \in Vv1Uv_1 \in U 属于不同集合,没有矛盾,因此偶环可以存在。

  2. 如果 GG 中不存在奇环,则 GG 是二分图。

    假设 GG 中不存在奇环。需要证明 GG 是二分图。由于图的连通分量相互独立,如果每个连通分量都是二分图,则整个图是二分图。因此,只需考虑 GG 连通的情况(若不连通,对每个连通分量单独证明)。

    选取一个起始节点 sVs \in V。通过 BFS(广度优先搜索)对节点着色:

    • 令层 0 为 {s}\{s\},着色为颜色 0。
    • 层 1 为 ss 的所有邻居,着色为颜色 1。
    • 层 2 为层 1 节点的所有未访问邻居,着色为颜色 0。
    • 依此类推,交替着色。

    具体地,对每个节点,根据其 BFS 层数(距离 ss 的最短路径长度)着色:

    • 如果距离为偶数,着色为颜色 0。
    • 如果距离为奇数,着色为颜色 1。

    现在,证明这种着色是有效的二分图着色:即每条边都连接不同颜色的节点(即不同集合)。

    在 BFS 中,所有边要么连接相邻层(即距离相差 1 的节点),要么可能连接同层节点(如果存在非树边)。如果存在一条边连接同层的两个节点,则会导致矛盾。

    假设存在边 (u,v)(u, v)uuvv 都在同一层 kk(即 dist(s,u)=dist(s,v)=k\text{dist}(s, u) = \text{dist}(s, v) = k)。设 xxssuussvv 的最短路径上的最后一个共同祖先节点。令 d=dist(s,x)d = \text{dist}(s, x),则:

    • dist(x,u)=kd\text{dist}(x, u) = k - d,
    • dist(x,v)=kd\text{dist}(x, v) = k - d.

    路径 xux \to uxvx \to v 是不相交的(因为 xx 是最后一个共同节点)。考虑路径:xuvxx \to u \to v \to x(即从 xxuu,然后边 (u,v)(u, v),然后从 vv 返回 xx)。这形成一个环,其长度为:

    dist(x,u)+1+dist(x,v)=(kd)+1+(kd)=2(kd)+1,\text{dist}(x, u) + 1 + \text{dist}(x, v) = (k - d) + 1 + (k - d) = 2(k - d) + 1,

    这是奇数(因为 2(kd)2(k - d) 是偶数,加 1 为奇数)。

    由于路径 xux \to uxvx \to v 不相交,这是一个简单环。因此,GG 中存在奇环,与假设矛盾。

    故,不存在边连接同层节点。所有边都连接相邻层(距离相差 1),因此每条边都连接颜色 0 和颜色 1 的节点。着色有效,GG 是二分图。

(b) 证明 BIPARTITE\text{BIPARTITE} 属于 NL

利用 Immerman-Szelepcsényi 定理:由于 NL = coNL,证明 BIPARTITE={GG 不是二分图}\overline{\text{BIPARTITE}} = \{ \langle G \rangle \mid G \text{ 不是二分图} \} 属于 NL 即可。等价地,证明检查“是否存在奇环”在 NL 中。

算法思路:

  • 非确定性猜测一个起始节点 v0v_0
  • v0v_0 开始非确定性遍历一条路径,记录当前节点、路径长度模 2(奇偶性),以及步数计数器。
  • 如果在某步移动后,当前节点回到 v0v_0 且路径长度模 2 为 1(奇数),则接受(找到奇闭行走,隐含奇环)。

详细算法:

  1. 非确定性选择一个起始节点 v0Vv_0 \in V(存储 v0v_0,需要 log2n\lceil \log_2 n \rceil 位)。
  2. 初始化:
    • 当前节点 cv0c \gets v_0,
    • 当前路径长度模 2 len0\text{len} \gets 0,
    • 步数计数器 step0\text{step} \gets 0(用于限制路径长度,避免无限循环)。
  3. 重复以下步骤最多 nn 次(因为路径长度超过 nn 时必有重复节点):
    • 非确定性选择一个邻居 ddcc 相邻(通过扫描输入磁带检查边 (c,d)(c, d) 是否存在)。
    • 更新:
      • cnextdc_{\text{next}} \gets d,
      • new_len(len+1)mod2\text{new\_len} \gets (\text{len} + 1) \mod 2(更新长度奇偶性)。
    • 检查:如果 cnext=v0c_{\text{next}} = v_0new_len=1\text{new\_len} = 1,则接受(找到从 v0v_0v0v_0 的奇闭行走)。
    • 否则,设置:
      • ccnextc \gets c_{\text{next}},
      • lennew_len\text{len} \gets \text{new\_len},
      • stepstep+1\text{step} \gets \text{step} + 1.
  4. 如果步数超过 nn 仍未接受,则拒绝。

空间分析:

  • 存储 v0v_0O(logn)O(\log n) 位。
  • 存储当前节点 ccO(logn)O(\log n) 位。
  • 存储 len\text{len}(模 2):1 位。
  • 存储步数计数器 step\text{step}(计数到 nn):O(logn)O(\log n) 位。
    总空间:O(logn)O(\log n),符合 NL 要求。

正确性:

  • 如果 GG 有奇环: 设奇环为 C=v0v1vkv0C = v_0 - v_1 - \cdots - v_k - v_0,其中 kk 为奇数。非确定性选择 v0v_0 为起始节点,并沿环遍历:从 v0v_0v1v_1,再到 v2v_2,…,最后回到 v0v_0。移动 kk 步后:
    • 初始:c=v0c = v_0, len=0\text{len} = 0
    • kk 步移动后:cnext=v0c_{\text{next}} = v_0, new_len=(lenprev+1)mod2\text{new\_len} = (\text{len}_{\text{prev}} + 1) \mod 2。由于环长 kk 为奇数,且 lenprev\text{len}_{\text{prev}}k1k-1(偶数),故 new_len=even+1=odd=1\text{new\_len} = \text{even} + 1 = \text{odd} = 1。满足接受条件,MM 接受。
  • 如果 GG 无奇环: 则不存在奇闭行走。对于任何 v0v_0 和任何路径,当移动回 v0v_0 时,路径长度必为偶数(否则与无奇环矛盾)。因此,new_len=1\text{new\_len} = 1 的条件永不满足,MM 不接受。

9.4

题目

S(n)lognS(n) \geq \log n 是一个空间可构造函数。证明 NSPACE(S(n))=coNSPACE(S(n))\text{NSPACE}(S(n)) = \text{coNSPACE}(S(n))NL=coNL\text{NL} = \text{coNL} 的一个推论。

解答

LL 是一个语言,使得 LcoNSPACE(S(n))L \in \text{coNSPACE}(S(n))。则其补语言 LNSPACE(S(n))\overline{L} \in \text{NSPACE}(S(n))。即存在一个非确定性图灵机 MM 在空间 O(S(n))O(S(n)) 内判定 L\overline{L}

由于 PATH(有向图可达性问题)是 NSPACE(S(n))\text{NSPACE}(S(n))-完全的(对于 S(n)lognS(n) \geq \log n),存在一个对数空间规约将 L\overline{L} 规约到 PATH。具体地:

  • 给定输入 xx(长度 n=xn = |x|),规约机器输出一个配置图 GG 和两个节点 s,ts, t
  • xLx \in \overline{L} 当且仅当在 GG 中存在从 sstt 的路径。
  • 等价地,xLx \in L 当且仅当在 GG 中不存在从 sstt 的路径,即 (G,s,t)coPATH(G, s, t) \in \text{coPATH}
  • GG 的节点数 N=2O(S(n))N = 2^{O(S(n))}(因为空间界限为 S(n)S(n),配置大小 O(S(n))O(S(n)),配置数 2O(S(n))2^{O(S(n))})。
  • 输入到 coPATH 的大小 mm(即描述 (G,s,t)(G, s, t) 的字符串长度)满足 m=Θ(Nk)=2O(S(n))m = \Theta(N^k) = 2^{O(S(n))} 对于某个常数 kk(例如,使用邻接矩阵表示时 m=O(N2)m = O(N^2))。

由假设 NL=coNL\text{NL} = \text{coNL},且 PATH 是 NL\text{NL}-完全的,因此 coPATH coNL=NL\in \text{coNL} = \text{NL}。即 coPATH 可用非确定性图灵机在空间 O(logm)O(\log m) 内判定(相对于输入大小 mm)。

现在构造一个非确定性图灵机 MM' 判定 LL

  1. 在输入 xx(长度 nn) 上,运行对数空间规约,生成 (G,s,t)(G, s, t)
    • 规约使用确定性空间 O(logn)O(\log n)(因为是对数空间规约)。
    • 输出 (G,s,t)(G, s, t) 的大小 m=2O(S(n))m = 2^{O(S(n))}
  2. 在输出 (G,s,t)(G, s, t) 上,非确定性判定 coPATH。
    • 使用空间 O(logm)O(\log m).
    • 由于 m=2O(S(n))m = 2^{O(S(n))},有 logm=O(S(n))\log m = O(S(n)),因此空间为 O(S(n))O(S(n)).

总空间使用:

  • 规约步骤:空间 O(logn)O(\log n)
  • coPATH 判定:空间 O(logm)=O(S(n))O(\log m) = O(S(n))
  • 因为 S(n)lognS(n) \geq \log n,有 O(logn)O(S(n))O(\log n) \subseteq O(S(n)),故总空间为 O(S(n))O(S(n)).

MM' 接受 xx 当且仅当 (G,s,t)coPATH(G, s, t) \in \text{coPATH},即当且仅当 xLx \in L。因此,LNSPACE(S(n))L \in \text{NSPACE}(S(n)).

综上,对任意 LcoNSPACE(S(n))L \in \text{coNSPACE}(S(n)),有 LNSPACE(S(n))L \in \text{NSPACE}(S(n)),即 coNSPACE(S(n))NSPACE(S(n))\text{coNSPACE}(S(n)) \subseteq \text{NSPACE}(S(n))。由对称性(或类似论证),NSPACE(S(n))coNSPACE(S(n))\text{NSPACE}(S(n)) \subseteq \text{coNSPACE}(S(n)) 也成立(因为补的补是原语言)。故 NSPACE(S(n))=coNSPACE(S(n))\text{NSPACE}(S(n)) = \text{coNSPACE}(S(n)).


TCS Homework 9
https://xiao-ao-jiang-hu.github.io/2025/05/30/tcs/tcs-hw-9/
作者
wst
发布于
2025年5月31日
许可协议