0%
8 min read 期末复习

CS338 计算理论导论期末复习

SUSTech CS338 Introduction to Theory of Computation 期末复习:DFA/NFA/正则表达式、CFG/PDA、图灵机、可判定性、复杂度与答题模板。

更系统的笔记见 计算理论导论系统笔记

这份复习覆盖 ppts/ 全部课件、Week1Week13 的作业题面与 LaTeX/PDF 答案,以及 answers/ 中 Assignment 1–13 的官方答案。建议先看第 0 节答题规范,再按 DFA/NFA/RE → CFL/PDA → TM/可判定性 → 复杂度的顺序复习。


0. 考试答题规范:不要只写结论

如果题目要求 “use the construction proof”,必须给出新机器/新文法的完整形式,不能只画直觉图或说”显然封闭”。

DFA 乘积构造模板(交、并、差、对称差)

给定

M1=(Q1,Σ,δ1,q1,F1),M2=(Q2,Σ,δ2,q2,F2).M_1=(Q_1,\Sigma,\delta_1,q_1,F_1),\quad M_2=(Q_2,\Sigma,\delta_2,q_2,F_2).

构造

M=(Q1×Q2,Σ,δ,(q1,q2),F)M=(Q_1\times Q_2,\Sigma,\delta,(q_1,q_2),F)

其中

δ((r,s),a)=(δ1(r,a),δ2(s,a)).\delta((r,s),a)=(\delta_1(r,a),\delta_2(s,a)).

按目标语言设置接受态:

  • 交集:F=F1×F2F=F_1\times F_2
  • 并集:F=(F1×Q2)(Q1×F2)F=(F_1\times Q_2)\cup(Q_1\times F_2)
  • 差集:F=F1×(Q2F2)F=F_1\times(Q_2-F_2)
  • 对称差:F=(F1×(Q2F2))((Q1F1)×F2)F=(F_1\times(Q_2-F_2))\cup((Q_1-F_1)\times F_2)

正确性:读入同一前缀后,第一分量正是 M1M_1 的状态,第二分量正是 M2M_2 的状态,因此接受条件等价于目标布尔组合。

NFA 并/连接/星号构造模板

  • :新起始态 q0q_0,从 q0q_0ϵ\epsilon-transition 到两个旧起始态;接受态为两个 NFA 接受态的并集。
  • 连接:从第一个 NFA 的每个接受态用 ϵ\epsilon-transition 到第二个 NFA 的起始态;接受态为第二个 NFA 的接受态。
  • Star:新起始态也是接受态;从新起始态 ϵ\epsilon 到旧起始态;从每个旧接受态 ϵ\epsilon 回旧起始态。
  • 单接受态:新增唯一接受态 qaq_a,从所有旧接受态 ϵ\epsilonqaq_a,原接受态取消接受。

子集构造模板

给 NFA N=(Q,Σ,δ,q0,F)N=(Q,\Sigma,\delta,q_0,F),构造 DFA D=(2Q,Σ,δ,E(q0),F)D=(2^Q,\Sigma,\delta',E(q_0),F')

若有 ϵ\epsilon-transition,则

δ(S,a)=E(qSδ(q,a)).\delta'(S,a)=E\left(\bigcup_{q\in S}\delta(q,a)\right).

接受态:

F={SQSF}.F'=\{S\subseteq Q\mid S\cap F\neq\emptyset\}.

作业里需要列出可达子集和转移表,不要只写”用 subset construction”。

CFG → PDA 模板

构造 PDA 用栈模拟最左推导:

  1. 初始先压入底符号 $,再压入起始变量 SS
  2. 对每条产生式 AuA\to u,加 ϵ,AuR\epsilon,A\to u^R 的替换路径(多符号压栈要拆成多个中间状态)。
  3. 对每个终结符 aa,加读入并匹配的转移 a,aϵa,a\to\epsilon
  4. 栈底 $ 被弹出且输入读完时接受。

PDA → CFG 模板

先保证 PDA 只有一个接受态且接受前清空栈。变量 ApqA_{pq} 表示从状态 ppqq 并清空所压栈内容的所有字符串:

  • 基础规则:AppϵA_{pp}\to\epsilon
  • 连接规则:ApqAprArqA_{pq}\to A_{pr}A_{rq}
  • 匹配规则:若 pa,ϵtrp\xrightarrow{a,\epsilon\to t}r push tt,且 sb,tϵqs\xrightarrow{b,t\to\epsilon}q pop tt,则 ApqaArsb.A_{pq}\to aA_{rs}b.

归约证明模板

要证明目标 BB 难,必须从已知难问题 AA 归约到 BBAmBA\le_m BApBA\le_p B

  1. 说明已知 AA 的性质,例如 ATMA_{TM} undecidable,或 3SAT NP-complete。
  2. 给出输入 xx 到实例 f(x)f(x) 的构造,且构造可计算/多项式时间。
  3. 证明双向:xA    f(x)Bx\in A \iff f(x)\in B
  4. 结论:若 BB 可解,则 AA 可解,矛盾;或 BB NP-hard。若还要 NP-complete,必须再证明 BNPB\in NP

Pumping Lemma 答题模板

证明非正则:

  1. 假设 LL 正则,令 pp 为 pumping length。
  2. wLw\in Lwp|w|\ge p
  3. 任取分解 w=xyzw=xyz,满足 xyp,y>0|xy|\le p, |y|>0
  4. xyp|xy|\le p 定位 yy 在某一块内。
  5. i=0i=0i=2i=2,证明 xyizLxy^iz\notin L,矛盾。

证明非 CFL:

  1. 假设 LL 是 CFL,令 pp 为 CFL pumping length。
  2. sLs\in L,分解 s=uvxyzs=uvxyz,满足 vxyp,vy1|vxy|\le p, |vy|\ge 1
  3. 由于 vxyp|vxy|\le p,它最多跨越有限相邻块。
  4. 分情况或统一说明 pumping 改变局部块,破坏全局相等/比例关系。
  5. i=0i=0i=2i=2,得到 uvixyizLuv^ixy^iz\notin L

1. DFA 与正则语言

DFA 定义与接受

DFA 是五元组

M=(Q,Σ,δ,q0,F)M=(Q,\Sigma,\delta,q_0,F)

其中 QQ 是有限状态集,Σ\Sigma 是字母表,δ:Q×ΣQ\delta:Q\times\Sigma\to Qq0q_0 是初始态,FQF\subseteq Q 是接受态。

DFA 接受 w=w1wnw=w_1\cdots w_n,当且仅当存在状态序列

r0=q0,ri+1=δ(ri,wi+1),rnF.r_0=q_0,\quad r_{i+1}=\delta(r_i,w_{i+1}),\quad r_n\in F.

语言 L(M)={wM accepts w}L(M)=\{w\mid M\text{ accepts }w\}。若某语言被某 DFA 识别,则它是 regular language。

设计 DFA 的常用状态含义

复习时不要背图,背”状态记录什么信息”:

  • 以某串结尾:状态记录最长后缀匹配了目标串多少位。例如 contains 0101,状态记录已匹配 “、0010100101
  • 至少/至多出现次数:状态记录计数并在阈值处吸收,例如至少四个 10,1,2,3,40,1,2,3,\ge4 五类。
  • 奇偶性:两个状态来回切换。
  • “以 0 开头且以 1 结尾”:先记住开头是否合法,再记录最后一个字符。
  • “不含某 substring”:先构造”含该 substring” 的 DFA,再取补集;或直接设置陷阱态。
  • 交集语言:先构造两个简单 DFA,再做乘积构造。

正则运算与闭包

正则语言对并、交、补、差、连接、Kleene star 封闭。

  • 并/交/差/补:DFA 层面最直接,使用乘积或翻转接受态。
  • 连接/星号:NFA 层面最自然,使用 ϵ\epsilon-transition。
  • 反转 ARA^R:正则表达式结构归纳最直接: (R1R2)R=R1RR2R,(R1R2)R=R2RR1R,(R)R=(RR).(R_1\cup R_2)^R=R_1^R\cup R_2^R,\quad (R_1R_2)^R=R_2^RR_1^R,\quad (R^*)^R=(R^R)^*.

Assignment 1 要点

官方答案要求把图转为形式化描述。写 DFA 形式化描述时必须列:QQΣ\Sigmaδ\delta 表格、q0q_0FF

典型语言:begins with 0 and ends with 1、contains at least four 1s、contains substring 0101、length at least 4 and fourth symbol is 1、starts with 1 and has odd length or starts with 0 and has even length、contains at least two 0s and at most one 1、空语言、all strings except ϵ\epsilon

补集构造:

  • 不含 ba:先构造含 ba 的 DFA,再翻转接受态。
  • 既不含 ab 也不含 ba:等价于 aba^*\cup b^*
  • 不在 bab^*a^* 中:等价于含 substring ab

交集构造:

  • 至少两个 a 且至少三个 b:状态 (i,j)(i,j),其中 i{0,1,2}i\in\{0,1,\ge2\}j{0,1,2,3}j\in\{0,1,2,\ge3\}
  • 偶数个 a 且一个或两个 b:记录 a parity 和 b count 0,1,2,30,1,2,\ge3
  • a 开头且至多两个 b:先判断首字符,再计数 b

2. NFA、正则表达式、GNFA

NFA 定义

NFA 仍是五元组,但转移函数为

δ:Q×(Σ{ϵ})P(Q).\delta:Q\times(\Sigma\cup\{\epsilon\})\to\mathcal P(Q).

NFA 接受一个串,只要存在一条路径,路径标签(去掉 ϵ\epsilon)等于该串且终点在接受态。

NFA 与 DFA 等价

核心定理:若 NFA 识别 AA,则 AA 正则。证明用 subset construction。有 ϵ\epsilon-transition 时必须使用 ϵ\epsilon-closure。

NFA 转 DFA:subset construction 完整写法

给定 N=(Q,Σ,δ,q0,F)N=(Q,\Sigma,\delta,q_0,F)。若 NNϵ\epsilon-transition,先定义

E(R)={qQq 可由 R 中某状态只通过 ϵ-move 到达}.E(R)=\{q\in Q\mid q\text{ 可由 }R\text{ 中某状态只通过 }\epsilon\text{-move 到达}\}.

构造 DFA D=(QD,Σ,δD,qD,FD)D=(Q_D,\Sigma,\delta_D,q_D,F_D)

  1. 起始态:qD=E({q0})q_D=E(\{q_0\})
  2. 对每个已发现的子集状态 SQS\subseteq Q 和每个输入符号 aΣa\in\Sigma,计算 Move(S,a)=qSδ(q,a),\operatorname{Move}(S,a)=\bigcup_{q\in S}\delta(q,a), 再令 δD(S,a)=E(Move(S,a))\delta_D(S,a)=E(\operatorname{Move}(S,a))
  3. 若新集合还没出现,把它加入待处理队列。只列可达子集即可;若题目要求 complete DFA,则 \emptyset 也要作为死状态列出。
  4. 接受态:FD={SQDSF}F_D=\{S\in Q_D\mid S\cap F\neq\emptyset\}

正确性:对任意输入串 ww,DFA 读完 ww 后所在的子集,恰好等于 NFA 从 q0q_0 读完 ww 后可能处在的所有状态的 ϵ\epsilon-closure。因此该子集与 FF 相交,当且仅当 NFA 有某条接受路径。

NFA 转 DFA 示例:以 01 结尾

NFA:Q={q0,q1,q2}Q=\{q_0,q_1,q_2\}Σ={0,1}\Sigma=\{0,1\}q0q_0 start,F={q2}F=\{q_2\}。 转移:δ(q0,0)={q0,q1}\delta(q_0,0)=\{q_0,q_1\}δ(q0,1)={q0}\delta(q_0,1)=\{q_0\}δ(q1,1)={q2}\delta(q_1,1)=\{q_2\}

A={q0}A=\{q_0\}B={q0,q1}B=\{q_0,q_1\}C={q0,q2}C=\{q_0,q_2\}。转移表:

DFA stateon 0on 1accepting?
A={q0}A=\{q_0\}BBAAno
B={q0,q1}B=\{q_0,q_1\}BBCCno
C={q0,q2}C=\{q_0,q_2\}BBAAyes

CC 接受是因为 C{q2}C\cap\{q_2\}\neq\emptyset,不是因为集合中所有 NFA 状态都接受。

正则表达式

正则表达式递归定义:,ϵ,a\emptyset,\epsilon,a 是正则表达式;若 R1,R2R_1,R_2 是,则 R1R2R_1\cup R_2R1R2R_1R_2R1R_1^* 也是。

Kleene theorem:

regular language    DFA/NFA    regular expression.\text{regular language}\iff \text{DFA/NFA}\iff \text{regular expression}.

Thompson 构造与状态消除

  • RE → NFA:对基础表达式建小 NFA,再递归处理 union/concat/star。
  • DFA/NFA → RE:转 GNFA 后消状态。消去状态 qq 时,对任意 i,ji,j 更新边标签: RijRijRiq(Rqq)Rqj.R_{ij}\leftarrow R_{ij}\cup R_{iq}(R_{qq})^*R_{qj}.

作业中必须写添加新 start、新 accept、逐步消状态,不能只给最终正则式。

Assignment 2 要点

NFA 构造要点:

  • ends with 00:三态;起点可在任意处猜测倒数两个 0 的开始。
  • contains 0101:五态;匹配进度 0 到 4。
  • even number of 0s or exactly two 1s:用新起点 ϵ\epsilon 分支到两个子 NFA。
  • {0}\{0\}:两态,读一个 0 接受。
  • 010+0^*1^*0^+:三态,注意最后的 0+0^+ 至少一个 0
  • 1(001+)1^*(001^+)^*:起点接受,读 00 后必须至少一个 1 回到起点。
  • {ϵ}\{\epsilon\}:单个起始接受态。
  • 00^*:单个起始接受态,0 自环。

Closure construction 必须按证明构造:并、连接、star、single accept state。

Assignment 3 要点

正则表达式速记:

  • starts with 1, ends with 01Σ01\Sigma^*0
  • at least three 1s:Σ1Σ1Σ1Σ\Sigma^*1\Sigma^*1\Sigma^*1\Sigma^*
  • contains 0101Σ0101Σ\Sigma^*0101\Sigma^*
  • third symbol is 0Σ20Σ\Sigma^2 0\Sigma^*
  • length at most 5:(Σϵ)5(\Sigma\cup\epsilon)^5
  • strings of positive length:Σ+\Sigma^+
  • empty language:\emptyset

注释语言 CC:以 /# 开始,以 #/ 结束,中间不能提前出现 #/。可简记为

/#(#(ab)/)#+//\#(\#^*(a\cup b)\cup /)^*\#^+/

关键状态含义:在 body 中看到 # 后,若下一个是 / 就结束;若是 a,b,# 则继续。


3. 非正则语言与 Pumping Lemma

正则 Pumping Lemma

LL 正则,则存在 pp,任意 wL,wpw\in L, |w|\ge p,可写为 w=xyzw=xyz,满足:

xyp,y>0,i0, xyizL.|xy|\le p,\quad |y|>0,\quad \forall i\ge0,\ xy^iz\in L.

它只能证明”非正则”,不能证明”正则”。

标准证明

  • {1n2n3nn0}\{1^n2^n3^n\mid n\ge0\} 非正则:取 w=1p2p3pw=1^p2^p3^p。由 xyp|xy|\le py=1,>0y=1^\ell,\ell>0。泵 i=2i=2 后得到 1p+2p3p1^{p+\ell}2^p3^p,三段数量不相等,矛盾。
  • {wwww{a,b}}\{www\mid w\in\{a,b\}^*\}:取 w=(apbp)3w=(a^pb^p)^3。由于 xyp|xy|\le pyy 位于第一段 aa 中,泵后第一段变长,不能再分成三个完全相同的块。
  • {a2nn0}\{a^{2^n}\mid n\ge0\} 非正则:取 w=a2pw=a^{2^p}y=ay=a^\ell,且 1p1\le\ell\le p。泵 i=2i=2 后长度为 2p+2^p+\ell,满足 2p<2p+2p+p<2p+12^p<2^p+\ell\le2^p+p<2^{p+1},夹在连续两个 2 的幂之间,矛盾。
  • 为什么不能用 0p1p0^p1^p 证明 010^*1^* 非正则:泵 0p1p0^p1^p 的前段 0 后仍是 010^*1^*。你证明的是不在 {0k1k}\{0^k1^k\},不是不在 010^*1^*
  • {0m1m0mm0}\{0^m1^m0^m\mid m\ge0\} 非正则:取 w=0p1p0pw=0^p1^p0^pyy 在第一段 0 内,泵 i=2i=2 后前后 0 数量不同。
  • {0m1nmn}\{0^m1^n\mid m\ne n\} 非正则:用闭包。若 LL 正则,则 L01\overline L\cap 0^*1^* 正则。但 L01={0n1nn0}\overline L\cap 0^*1^*=\{0^n1^n\mid n\ge0\} 非正则,矛盾。
  • 出现 01 次数等于 10 次数的语言是正则:次数相等 iff w{ϵ,0,1}w\in\{\epsilon,0,1\} 或首尾字符相同。正则式:{ϵ,0,1}0Σ01Σ1\{\epsilon,0,1\}\cup0\Sigma^*0\cup1\Sigma^*1
  • C={1kyy 中 1 的个数k}C=\{1^k y\mid y\text{ 中 1 的个数}\le k\} 非正则:取 w=1p01pw=1^p01^p,前缀 1p1^pk=pk=p。泵掉前面的 y=1y=1^\ell 后,开头最多 pp-\ell 个 1,但后缀仍有 pp 个 1,违反条件。

4. CFG、CFL、PDA

CFG 定义

CFG 为

G=(V,Σ,R,S)G=(V,\Sigma,R,S)

其中 VV 是变量,Σ\Sigma 是终结符,RR 是产生式,SS 是起始变量。若一个字符串有两棵不同 parse tree,则文法 ambiguous。

常用 CFG

  • 至少三个 1SR1R1R1R,R0R1Rϵ.S\to R1R1R1R,\quad R\to0R\mid1R\mid\epsilon.
  • 以相同符号开始和结尾: S1R10R001,R0R1Rϵ.S\to1R1\mid0R0\mid0\mid1,\quad R\to0R\mid1R\mid\epsilon.
  • 奇数长度: S0S00S11S01S101.S\to0S0\mid0S1\mid1S0\mid1S1\mid0\mid1.
  • 奇数长度且中间符号为 0: S0S00S11S01S10.S\to0S0\mid0S1\mid1S0\mid1S1\mid0.
  • 回文: S0S01S101ϵ.S\to0S0\mid1S1\mid0\mid1\mid\epsilon.
  • 空语言:可用 SSS\to S 或无接受路径的 PDA。

CNF

Chomsky Normal Form 只允许:

ABC,AaA\to BC,\quad A\to a

如果语言含 ϵ\epsilon,允许新起始符号 S0ϵS_0\to\epsilon

转换步骤:

  1. 加新起始变量 S0SS_0\to S
  2. 消除 ϵ\epsilon-productions。
  3. 消除 unit productions。
  4. 长右部拆成二元变量,终结符替换成单独变量。

若 CFG 在 CNF 中,推导长度为 w|w| 的非空串时恰好需要 2w12|w|-1 步:w1|w|-1ABCA\to BC 让变量叶子数从 1 增到 w|w|,再 w|w|AaA\to a 生成终结符。

PDA

PDA 转移记为 a,Xγa,X\to\gamma,表示读入 aa(可为 ϵ\epsilon),弹出 XX(可为空),压入 γ\gamma

核心等价:

CFL    某 PDA 识别.\text{CFL}\iff\text{某 PDA 识别}.

CFG 转 PDA:完整构造

给定 G=(V,Σ,R,S)G=(V,\Sigma,R,S),构造 PDA PP,栈里保存”还需要匹配或展开的 sentential form”。PDA 的状态可取 Q={qstart,q,qacc}Q=\{q_{\mathrm{start}},q,q_{\mathrm{acc}}\},栈字母表 \Gamma=V\cup\Sigma\cup\{\}$。

核心转移:

  1. 初始化:q_{\mathrm{start}}\xrightarrow{\epsilon,\\to S$}q$。
  2. 展开变量:对每条产生式 AX1X2XkA\to X_1X_2\cdots X_k,加转移 qϵ,AX1X2Xkqq\xrightarrow{\epsilon,A\to X_1X_2\cdots X_k}q。若只能逐个压栈,按 Xk,Xk1,,X1X_k,X_{k-1},\ldots,X_1 顺序压,使最后 X1X_1 在栈顶。若 AϵA\to\epsilon,则加 qϵ,Aϵqq\xrightarrow{\epsilon,A\to\epsilon}q
  3. 匹配终结符:对每个 aΣa\in\Sigma,加 qa,aϵqq\xrightarrow{a,a\to\epsilon}q
  4. 接受:q\xrightarrow{\epsilon,\\to\epsilon}q_{\mathrm{acc}}$。

正确性:PDA 每次用 AuA\to u 替换栈顶变量,正好对应 CFG 最左推导中的一步;每次读入终结符 aa 并弹出 aa,正好确认当前推导出的最左终结符与输入一致。

PDA 转 CFG:完整构造

先把 PDA 改成等价的规范形式:只有一个接受态 qaccq_{\mathrm{acc}};接受前栈必须为空;每个转移只做 push 或 pop 一个栈符号。

为每一对状态 p,qQp,q\in Q 建变量 ApqA_{pq},含义:从 pp 空栈到 qq 空栈的所有字符串。起始变量是 Aq0qaccA_{q_0q_{\mathrm{acc}}}

产生式分三类:

  1. 空计算:AppϵA_{pp}\to\epsilon,对每个 pQp\in Q
  2. 串接计算:ApqAprArqA_{pq}\to A_{pr}A_{rq},对所有 p,r,qQp,r,q\in Q
  3. push-pop 配对:若有 pa,ϵtrp\xrightarrow{a,\epsilon\to t}rsb,tϵqs\xrightarrow{b,t\to\epsilon}q,则加 ApqaArsbA_{pq}\to aA_{rs}b

CFL 闭包与非闭包

CFL 对并、连接、Kleene star 封闭。证明可用 CFG:

  • 并:新起始变量 SS1S2S\to S_1\mid S_2
  • 连接:SS1S2S\to S_1S_2
  • Star:SS1SϵS\to S_1S\mid\epsilon

每个正则语言都是 CFL:对正则表达式结构归纳。

CFL 不对交和补封闭:

  • A={ambncnm,n0}A=\{a^mb^nc^n\mid m,n\ge0\}B={anbncmm,n0}B=\{a^nb^nc^m\mid m,n\ge0\}。二者都是 CFL,但 AB={anbncnn0}A\cap B=\{a^nb^nc^n\mid n\ge0\} 不是 CFL。
  • 若 CFL 对补封闭,则由 De Morgan 与并封闭可推出对交封闭,矛盾。

CFL 与正则语言的交封闭:给 PDA PP 和 DFA DD,构造乘积 PDA,状态为 (qP,qD)(q_P,q_D),栈行为照 PDA,读入符号时同时更新 DFA;接受态为 FP×FDF_P\times F_D

CFL Pumping Lemma

LL 是 CFL,则存在 pp,任意足够长 sLs\in L 可写为 s=uvxyzs=uvxyz,满足

vxyp,vy1,i0, uvixyizL.|vxy|\le p,\quad |vy|\ge1,\quad \forall i\ge0,\ uv^ixy^iz\in L.

标准证明:

  • {0n1n0n1n}\{0^n1^n0^n1^n\} 非 CFL:取 0p1p0p1p0^p1^p0^p1^p。因 vxyp|vxy|\le p,只影响至多两个相邻块。泵后至少一个块长度变,另有块保持 pp,四段无法同为 nn
  • {0n#02n#03n}\{0^n\#0^{2n}\#0^{3n}\} 非 CFL:取 0p#02p#03p0^p\#0^{2p}\#0^{3p}vxyvxy 不可能跨两个 #,只改变局部一段或相邻两段,泵后比例 1:2:31:2:3 被破坏。

5. Turing Machines 与 Church-Turing

TM 定义

标准 TM:

M=(Q,Σ,Γ,δ,q0,qaccept,qreject)M=(Q,\Sigma,\Gamma,\delta,q_0,q_{accept},q_{reject})

其中 Γ\Gamma 是 tape alphabet,Γ\sqcup\in\GammaΣΓ{}\Sigma\subseteq\Gamma-\{\sqcup\}

δ:Q×ΓQ×Γ×{L,R}.\delta:Q\times\Gamma\to Q\times\Gamma\times\{L,R\}.

配置写作 uqvuqv:带内容为 uvuv,当前状态 qq,读写头在 vv 的第一个字符上。

Decider vs Recognizer

  • Decider:所有输入都 halt,接受 LL 中输入,拒绝非 LL 输入。
  • Recognizer:LL 中输入会 accept;非 LL 输入可以 reject 或 loop。
  • Decidable \Rightarrow Turing-recognizable。
  • AA decidable iff AAA\overline A 都 Turing-recognizable。

TM 变体

PPT 覆盖的等价模型:

  • 多带 TM 等价于单带 TM。
  • NTM 等价于 DTM(可模拟所有计算分支)。
  • Enumerator 与 TM 识别器等价。
  • Church-Turing thesis:直观可算法计算的函数可由 TM 计算。

作业中重要变体:

  • 2-PDA 识别 {anbncn}\{a^nb^nc^n\}:读 a 时压 stack1;读 b 时压 stack2;读 c 时同时弹两个栈;输入结束且两栈空则接受。这说明 2-PDA 比 1-PDA 强。
  • Left-reset TM 模拟普通左移:用标记法,reset 到最左端,逐步找当前格前一格,用额外标记推进候选前驱。
  • 只能右移/停留或输入只读的 TM:识别能力退化为正则语言。证明思路:构造等价有限自动机,状态编码 TM 从当前位置向右移动后的有限控制状态。

TM 设计算法题

  • 识别 {anbncn}\{a^nb^nc^n\}:循环扫描,找未标记 a 改为 X,向右找未标记 b 改为 Y,再找未标记 c 改为 Z,回到左端;最后确认没有未标记 a,b,c 且顺序合法。
  • #0=#1\#0=\#1:反复找一个未标记 0 和一个未标记 1 配对标记。
  • #0=2#1\#0=2\#1:每找一个 1,匹配两个 0
  • 补语言:若已有 decider,可翻转 accept/reject;若只是 recognizer,不能直接补。
  • 二进制减一:移到最右,从右向左把连续 0 改成 1,遇到第一个 1 改成 0 后停。
  • 二进制减法 xyx-y:重复对 xxyy 执行减一,直到 y=0y=0
  • 整数除法 x/y\lfloor x/y\rfloor:多带 TM 上重复减 yy,计数 quotient。

6. Decidability 与 Undecidability

可判定语言

经典可判定问题:

  • ADFA={M,wM is a DFA and accepts w}A_{DFA}=\{\langle M,w\rangle\mid M\text{ is a DFA and accepts }w\}
  • ANFAA_{NFA}, AREXA_{REX}
  • EDFA={ML(M)=}E_{DFA}=\{\langle M\rangle\mid L(M)=\emptyset\}
  • EQDFAEQ_{DFA}
  • ACFGA_{CFG}, ECFGE_{CFG}

典型算法:

  • ADFAA_{DFA}:直接模拟 DFA。
  • ANFAA_{NFA}:转 DFA 或图搜索所有 NFA 分支。
  • AREXA_{REX}:RE → NFA → DFA,再判定。
  • EDFAE_{DFA}:从 start 做 BFS,看是否能到接受态。
  • EQDFAEQ_{DFA}:构造对称差 DFA,判空。
  • ACFGA_{CFG}:转 CNF 后 CYK/dynamic programming。
  • ECFGE_{CFG}:标记能生成终结串的变量,看 start 是否被标记。

重要结论

  • ALLDFAALL_{DFA} 可判定:构造识别 L(A)\overline{L(A)} 的 DFA MM,运行 EDFAE_{DFA}。若补语言为空,则 L(A)=ΣL(A)=\Sigma^*
  • AϵCFGA_{\epsilon CFG} 可判定:运行 ACFGA_{CFG}G,ϵ\langle G,\epsilon\rangle,或转 CNF 后检查是否有 SϵS\to\epsilon
  • ETM\overline{E_{TM}} Turing-recognizable:枚举所有字符串,dovetail 模拟,一旦某个输入被接受就接受。
  • EQDFAEQ_{DFA} 有限测试上界:若 A,BA,Bn1,n2n_1,n_2 个状态,对称差 DFA 有 n1n2n_1n_2 个状态。若存在区分串,则存在长度小于 n1n2n_1n_2 的区分串。

Diagonalization 与 ATMA_{TM}

ATM={M,wM accepts w}A_{TM}=\{\langle M,w\rangle\mid M\text{ accepts }w\}

是 Turing-recognizable 但 undecidable。

Recognizer:通用 TM 模拟 M(w)M(w),若 MM accept 则 accept,若 reject 则 reject,若 loop 则 loop。

不可判定证明:

  1. 假设 HH decides ATMA_{TM}
  2. 构造 DD:输入 M\langle M\rangle,运行 H(M,M)H(\langle M,\langle M\rangle\rangle)。若 HH accept,则 DD reject;若 HH reject,则 DD accept。
  3. 运行 D(D)D(\langle D\rangle) 得矛盾。

ATM\overline{A_{TM}} 不是 Turing-recognizable。否则 ATMA_{TM} 和其补都 recognizable,可并行运行得到 decider,矛盾。

Reducibility

映射归约 AmBA\le_m B:存在可计算函数 ff,使得 wA    f(w)Bw\in A\iff f(w)\in B

性质:

  • AmBA\le_m BBB decidable,则 AA decidable。
  • AmBA\le_m BAA undecidable,则 BB undecidable。
  • AmBA\le_m BBB T-recognizable,则 AA T-recognizable。
  • AmBA\le_m BAA T-unrecognizable,则 BB T-unrecognizable。

Rice Theorem

任何关于 L(M)L(M) 的非平凡性质都是 undecidable。非平凡:有些 TM 的语言满足该性质,有些不满足。

注意:Rice 只适用于”语言性质”,不适用于”TM 语法性质”如状态数是否大于 481。

应用:L(M)L(M) infinite、1011L(M)1011\in L(M)L(M)=ΣL(M)=\Sigma^* 都是 undecidable。

Assignment 9-10 要点

  • {0,1,2}N\{0,1,2\}^{\mathbb N} 不可数:对角线构造新序列,第 ii 位取不同于 f(i)f(i)ii 位的符号。
  • 三元组集合可数:按 i+j+k=ni+j+k=n 分层,每层有限,先列和小的。
  • “TM 是否会在空白带上写非空符号”可判定:模拟 Q+1|Q|+1 步,若没写且状态重复则之后永远重复。
  • “TM 是否至少 481 个状态”可判定:语法性质,直接解析编码计数。
  • DFA 是否不接受任何偶数个 1 的串:构造 DFA AA 接受偶数个 1 的串,构造 MAM\cap A,运行 EDFAE_{DFA} 判空。
  • EQCFG\overline{EQ_{CFG}} Turing-recognizable:枚举所有字符串 ww,运行 ACFGA_{CFG} 判断 ww 是否由 G1,G2G_1,G_2 生成;若结果不同则接受。
  • AA T-recognizable 且 AmAA\le_m\overline A,则 AA decidable:由归约 wA    f(w)Aw\in\overline A \iff f(w)\in A,可 recognize A\overline A,故 AAA\overline A 都 recognizable。
  • 判定 halts on empty input 不可判定:从 HALTTMHALT_{TM} 归约。给 M,w\langle M,w\rangle,构造 MM':在空输入上模拟 M(w)M(w),若 halt 则 halt,否则 loop。

7. Time Complexity 与 P

时间复杂度

TM 在时间 t(n)t(n) 内运行:对所有长度 nn 输入,最多 t(n)t(n) 步内 halt。

TIME(t(n))={BB 可由确定性单带 TM 在 O(t(n)) 时间判定}.TIME(t(n))=\{B\mid B\text{ 可由确定性单带 TM 在 }O(t(n))\text{ 时间判定}\}. P=kTIME(nk)P=\bigcup_k TIME(n^k)

即多项式时间可判定语言。

课件强调:

  • 最坏情况复杂度是对长度 nn 的所有输入取上界。
  • reasonable encoding 很重要;图的 adjacency matrix/list 是合理编码,数字用 unary 通常不合理。
  • 多带 TM 与单带 TM 在多项式意义下等价:多带 t(n)t(n) 可由单带 O(t(n)2)O(t(n)^2) 模拟。

P 中的典型问题

  • PATH P\in P:给有向图 G,s,tG,s,t,从 ss 做 BFS/marking,若标记到 tt 则接受。
  • RELPRIME P\in P:Euclidean algorithm:重复 xxmodyx\leftarrow x\bmod y,交换 x,yx,y,直到 y=0y=0。若 gcd 为 1 则接受。
  • CFL P\in P:用 CYK/dynamic programming。转 CNF 后,对每个 substring 存能生成它的变量集合,总复杂度多项式。
  • HAMPATH 与 PATH 的区别:PATH 只问是否有任意路径,BFS 可解;HAMPATH 要经过每个节点恰好一次,暴力路径数可达 m!m!,是否在 P 是开放问题。

P 闭包

P 对并、连接、补封闭。

  • Union:顺序运行两个多项式 decider,任一接受则接受。
  • Concatenation:枚举 n+1n+1 个 split w=uvw=uv,运行两个 decider,某个 split 都接受则接受。
  • Complement:运行 decider 并翻转结果。

CONNECTED P\in P:无向图从任意顶点 BFS,若所有顶点都被标记则接受。

ALL_DFAPALL\_DFA\in P:构造补 DFA,对补 DFA 从起点 BFS。若能到接受态,则原 DFA 不是 all。

EQ_DFAPEQ\_DFA\in P:构造对称差 DFA,再用 EDFAE_{DFA} 的 BFS 判空。


8. NP、coNP、Polynomial Reducibility

NP 定义

NP=kNTIME(nk)NP=\bigcup_k NTIME(n^k)

等价定义:存在多项式时间 verifier VV 和多项式长度 certificate cc,使得

wL    c, cwk, V(w,c) accepts.w\in L\iff \exists c,\ |c|\le |w|^k,\ V(w,c)\text{ accepts}.

重要定理:语言在 NP 中 iff 有 polynomial-time verifier。

  • NTM → verifier:certificate 描述接受分支。
  • verifier → NTM:非确定性猜 certificate,再运行 verifier。

常见 NP 证明

标准写法是给 certificate 和 verifier:

  • 3SAT:certificate 是 truth assignment;检查每个 clause 是否有 true literal。
  • VERTEX-COVER:certificate 是 kk 个顶点;检查每条边至少一个端点在集合中。
  • TSP:certificate 是 tour;检查每个城市恰好一次且总权重 k\le k
  • MAX-CUT:certificate 是顶点划分 S,VSS,V-S;数 crossing edges 是否 k\ge k
  • 3-COLORING:certificate 是每个顶点颜色;检查相邻顶点颜色不同。
  • CLIQUE:certificate 是 kk 个顶点;检查任意两点之间有边。
  • SUBSET-SUM:certificate 是子集;检查和是否为目标 tt
  • COMPOSITES:certificate 是非平凡因子 yy;检查 1<y<x1<y<xyxy\mid x

NP 闭包

NP 对 union、concatenation、star 封闭。

  • Union:certificate 额外包含选择 bit,说明用 V1V_1 还是 V2V_2
  • Concatenation:certificate 包含 split 位置 ii 以及两个子证书 c1,c2c_1,c_2
  • Star:certificate 包含分割位置列表和每段证书;段数至多 w|w|,总长度仍多项式。

P、NP、coNP 判断题

  • PNPP\subseteq NP:True,忽略 certificate,直接运行 P decider。
  • PP 对补封闭:True。
  • PNPcoNPP\subseteq NP\cap coNP:True。
  • P=NPP=NP,则 NP=coNPNP=coNP:True。
  • SATP\overline{SAT}\in P:严格说是开放问题;若它在 P,则 P=NPP=NP

2-COLOR 与 2-SAT

2-COLOR PNP\in P\cap NP

  • NP:certificate 是 2-coloring。
  • P:BFS/DFS 检查二分图。未染色点染 0,邻居染 1,若遇到同色边则 reject。

2-SAT PNP\in P\cap NP

  • NP:certificate 是 assignment。
  • P:构造 implication graph: (xy)(¬xy)(¬yx).(x\vee y)\equiv(\neg x\to y)\wedge(\neg y\to x). 若某变量 xx¬x\neg x 在同一个 SCC,则不可满足;否则可满足。

9. NP-Completeness

定义与证明套路

语言 BB 是 NP-complete iff:

  1. BNPB\in NP
  2. 对所有 ANPA\in NPApBA\le_p B

实际证明 CC NP-complete:

  1. 证明 CNPC\in NP
  2. 从一个已知 NP-complete 问题 BB 归约到 CC,如 3SATpC3SAT\le_p C
  3. 证明构造多项式时间。
  4. 证明 iff。

3SAT → CLIQUE

给 3CNF ϕ=C1Cm\phi=C_1\wedge\cdots\wedge C_m。构造图 GG

  1. 对每个 clause 中每个 literal occurrence 建一个顶点。
  2. 不同 clause 的两个顶点之间连边,当且仅当两个 literal 不矛盾。
  3. 设置 k=mk=m

正确性:

  • ϕ\phi satisfiable,从每个 clause 选一个 true literal。这些 literal 互不矛盾,对应顶点两两相连,形成 mm-clique。
  • GGmm-clique,因为同 clause 内没有边,clique 必定每个 clause 选一个顶点;两两相连说明 literal 互不矛盾,可扩展为满足赋值。

2SAT → CLIQUE

同样构造,每个 2-clause 建两个顶点,连接不同 clause 且不矛盾的 literal,令 k=mk=m。能说明 2SAT 实例可多项式变成 CLIQUE 实例;但由于 2SAT 在 P,这个归约不能证明 CLIQUE NP-hard。要证明 CLIQUE NP-hard 必须从 NP-complete 问题如 3SAT 归约。

Double-SAT NP-complete

Double-SAT:{ϕϕ has at least two satisfying assignments}\{\phi\mid \phi\text{ has at least two satisfying assignments}\}

  • 在 NP:certificate 是两个不同 assignment,验证二者不同且都满足 ϕ\phi
  • 从 3SAT 归约:给 ϕ\phi,引入新变量 ww,构造 ϕ=ϕ(ww)\phi'=\phi\wedge(w\vee\overline w)。若 ϕ\phi satisfiable,则任意满足赋值可扩展为 w=truew=truew=falsew=false 两个满足赋值。若 ϕ\phi' 有至少两个满足赋值,则 ϕ\phi satisfiable。

3SAT → HAMPATH

课件与作业采用 Sipser diamond variable gadget:

  • 每个变量一个 gadget。
  • 从左到右遍历表示 true,从右到左遍历表示 false。
  • 每个 clause 一个 clause vertex,通过 wire 连到对应 literal 在 gadget 中的位置。
  • 若某 literal 使 clause satisfied,Hamiltonian path 可绕入该 clause vertex 并返回。

Directed HAMPATH → Undirected HAMPATH

给 directed G=(V,E)G=(V,E),构造 undirected GG'。对每个顶点 uuuin,umid,uoutu^{in},u^{mid},u^{out},并加内部边 {uin,umid},{umid,uout}\{u^{in},u^{mid}\},\{u^{mid},u^{out}\}。对每条有向边 (u,v)(u,v),加无向边 {uout,vin}\{u^{out},v^{in}\}。起点终点:s=sin,t=touts'=s^{in}, t'=t^{out}

关键:umidu^{mid} 度只连 uin,uoutu^{in},u^{out},所以 Hamiltonian path 必须连续穿过一个 gadget。路径从 sins^{in} 开始会强制所有 gadget 都以 inmidoutin\to mid\to out 方向穿过;跨 gadget 的边只能对应原图有向边。

3SAT → VERTEX-COVER

给 3CNF ϕ\phi,变量数 vv,clause 数 cc

  1. 每个变量 xix_i:建两个顶点 xi,xix_i,\overline{x_i},加边 {xi,xi}\{x_i,\overline{x_i}\}
  2. 每个 clause Cj=(j,1j,2j,3)C_j=(\ell_{j,1}\vee\ell_{j,2}\vee\ell_{j,3}):建三角形三个 clause 顶点。
  3. 每个 clause literal 顶点连到变量 gadget 中同名 literal 顶点。
  4. 设置 k=v+2ck=v+2c

正确性:

  • 满足赋值 → 每个变量 gadget 选 true literal 顶点;每个 clause 三角形中留下一个 true literal 顶点不选,选另两个。大小 v+2cv+2c
  • Vertex cover 大小 v+2c\le v+2c → 每个变量边至少选一个,共至少 vv;每个三角形至少选两个,共至少 2c2c。因此必须恰好选这些数量。每个 clause 三角形有一个未选顶点,其连接边必须由变量 gadget 中同名顶点覆盖,令该 literal 为 true。

3COLOR NP-complete

在 NP:certificate 是 coloring,逐边检查端点颜色不同。

从 3SAT 归约:

  1. 建 palette 三角形 T,F,NT,F,N,强制三种颜色。
  2. 每个变量建 xi,xix_i,\overline{x_i},二者互连,且都连到 NN。因此它们不能取 Neutral,且必须一真一假。
  3. 每个 clause (abc)(a\vee b\vee c) 用两个 OR gadget:先算 u=abu=a\vee b,再算 o=uco=u\vee c
  4. gadget 的中间输出和最终输出连到 NN,使其只能 True/False。
  5. 最终输出 oo 还连到 FF,强制 oo 为 True。

正确性:clause 三个 literal 全 false 时 OR output 被迫 false,与连到 FF 冲突;至少一个 true 时 gadget 可合法 3-color。


10. Cook-Levin 与 3SAT

Cook-Levin Theorem

SAT is NP-complete.SAT\text{ is NP-complete}.

证明结构:

  1. SATNPSAT\in NP:certificate 是 truth assignment。
  2. 对任意 ANPA\in NP,取多项式时间 NTM MM 决定 AA。给输入 ww,构造公式 ϕM,w\phi_{M,w},使 wA    ϕM,w satisfiablew\in A\iff \phi_{M,w}\text{ satisfiable}

Tableau

MMnkn^k 时间内运行,构造 nk×nkn^k\times n^k tableau,每行是一条 configuration。变量 xi,j,sx_{i,j,s} 表示 tableau 的第 ii 行第 jj 格内容是符号/状态 ss

公式:

ϕM,w=ϕcellϕstartϕmoveϕaccept.\phi_{M,w}=\phi_{cell}\wedge\phi_{start}\wedge\phi_{move}\wedge\phi_{accept}.
  • ϕcell\phi_{cell}:每个 cell 恰好一个符号。
  • ϕstart\phi_{start}:第一行是 q0wq_0w\sqcup\cdots
  • ϕaccept\phi_{accept}:某处出现 qacceptq_{accept}
  • ϕmove\phi_{move}:每个 2×32\times3 window 合法,保证相邻配置符合转移函数。

为什么用 2×32\times3 window

δ(q,0)=(r,0,L)\delta(q,0)=(r,0,L)δ(q,1)=(s,1,L)\delta(q,1)=(s,1,L)rsr\ne s。考虑 window:

0q1r01\begin{array}{ccc} 0 & q & 1\\ r & 0 & 1 \end{array}

它非法,因为上方状态 qq 实际扫描的是右侧 1,应产生 ss 而不是 rr。但它的两个 2×22\times2 子窗口都可分别出现在某个合法 2×32\times3 window 中。因此只查 2×22\times2 不够。

SAT → 3SAT

3SAT 是 NP-complete。长 clause 转 3CNF:

  • 1 literal:xx 可写成 (xxx)(x\vee x\vee x)
  • 2 literals:(xy)(x\vee y) 可写成 (xyx)(x\vee y\vee x) 或用 padding。
  • 3 literals:保持。
  • l>3l>3 literals:(x1xl)(x_1\vee\cdots\vee x_l) 替换为 (x1x2z1)(z1x3z2)(zl3xl1xl).(x_1\vee x_2\vee z_1)\wedge(\overline z_1\vee x_3\vee z_2)\wedge\cdots\wedge(\overline z_{l-3}\vee x_{l-1}\vee x_l).

注意原公式与新公式不必逻辑等价,只需 satisfiability 等价。


11. Space, PSPACE, NP-hardness, 近似

Space complexity

TM 在 space f(n)f(n) 内运行:对长度 nn 输入,最多使用 f(n)f(n) 个 tape cells。

SPACE(f(n))={BB 被某 deterministic TM 用 O(f(n)) space 判定}SPACE(f(n))=\{B\mid B\text{ 被某 deterministic TM 用 }O(f(n))\text{ space 判定}\} NSPACE(f(n))={BB 被某 nondeterministic TM 用 O(f(n)) space 判定}.NSPACE(f(n))=\{B\mid B\text{ 被某 nondeterministic TM 用 }O(f(n))\text{ space 判定}\}. PSPACE=kSPACE(nk),NPSPACE=kNSPACE(nk).PSPACE=\bigcup_k SPACE(n^k),\quad NPSPACE=\bigcup_k NSPACE(n^k).

Savitch theorem:

NSPACE(f(n))SPACE(f(n)2),f(n)logn.NSPACE(f(n))\subseteq SPACE(f(n)^2),\quad f(n)\ge\log n.

推论:PSPACE=NPSPACEPSPACE=NPSPACE

课件关系:

PNPPSPACEEXPTIMEP\subseteq NP\subseteq PSPACE\subseteq EXPTIME

PEXPTIMEP\ne EXPTIME,所以这些包含中至少有一个是真包含,但不知道是哪一个。

NP-hardness

NP-hard 不要求问题在 NP 中,也可用于 search/optimization 问题。定义:对所有 ANPA\in NPApBA\le_p B。若某 NP-hard 问题有多项式算法,则 P=NPP=NP

NP-complete = NP-hard + in NP。

近似与随机算法

Vertex Cover 2-approximation

算法:当图中还有边时,任选一条边 (u,v)(u,v),把 u,vu,v 都加入 cover,并删除所有 incident edges。

证明:

  1. 输出 XX 是 vertex cover,因为每条边在被处理或删除时都被选中端点覆盖。
  2. 选中的边彼此不共享端点,任意最优 cover 至少要为每条这样的边选一个端点。
  3. 算法每条选中边选两个端点,所以 X2OPT|X|\le2OPT

Randomized MAX-3SAT 7/87/8 expectation

每个变量独立以 1/21/2 取 true。一个 3-literal clause 不满足概率为 (1/2)3=1/8(1/2)^3=1/8,满足概率 7/87/8。令 XiX_i 是第 ii 个 clause 是否满足的 indicator,则

E[Xi]=7/8,E[X]=iE[Xi]=7m/8.\mathbb E[X_i]=7/8,\quad \mathbb E[X]=\sum_i\mathbb E[X_i]=7m/8.

12. 快速总表

模型能力

模型等价描述语言类
DFANFA, regexRegular
PDACFGCFL
TM decider总停机算法Decidable
TM recognizer接受时停机Turing-recognizable
Poly-time DTMefficient deciderP
Poly-time NTM / verifiershort certificateNP

可判定/不可判定/可识别

问题结论
ADFA,ANFA,AREXA_{DFA},A_{NFA},A_{REX}decidable
EDFA,EQDFAE_{DFA},EQ_{DFA}decidable
ACFG,ECFGA_{CFG},E_{CFG}decidable
ATMA_{TM}recognizable, undecidable
ATM\overline{A_{TM}}not recognizable
HALTTMHALT_{TM}undecidable
ETME_{TM}undecidable, not recognizable
ETM\overline{E_{TM}}recognizable
EQTMEQ_{TM}undecidable, not recognizable
EQCFG\overline{EQ_{CFG}}recognizable

常见 NP-complete 链

SATp3SATpCLIQUESAT \le_p 3SAT \le_p CLIQUE 3SATpHAMPATHpUHAMPATH3SAT \le_p HAMPATH \le_p UHAMPATH 3SATpVERTEX-COVER,3SATp3COLOR3SAT \le_p VERTEX\text{-}COVER,\quad 3SAT \le_p 3COLOR

作业对应复习索引

作业必会内容
Assignment 1DFA 形式化、补集、乘积构造
Assignment 2NFA 图、union/concat/star construction、single accept、subset construction
Assignment 3regex、Thompson、GNFA state elimination、reverse 正则性
Assignment 4正则 pumping lemma、闭包反证
Assignment 5CFG、parse tree、PDA、CNF
Assignment 6CFG-PDA 等价、CFL closure、CFL pumping、CFL 非闭包、CFL \cap regular
Assignment 72-PDA、TM 配置、TM 设计、left-reset、read-only/right-only 正则性
Assignment 8DFA/RE/CFG 判定问题、ETM\overline{E_{TM}} recognizer、EQDFAEQ_{DFA} 长度上界
Assignment 9对角线、可数性、TM 语法/行为判定、DFA 与偶数个 1
Assignment 10EQCFGEQ_{CFG} co-recognizable、mapping reduction、Rice、CYK、P 闭包
Assignment 11NP verifier、NP closure、2COLOR、2SAT、P/NP/coNP 判断
Assignment 123SAT→CLIQUE、Double-SAT、3SAT→HAMPATH、3COLOR
Assignment 13Cook-Levin tableau、legal window、UHAMPATH、VERTEX-COVER

13. 易错点 checklist

  • 自动机题:先写”状态记录什么”,再写状态/转移/接受态。
  • 构造证明题:必须给完整 tuple 或完整规则,不要只说”按闭包性”。
  • Pumping 题:选择的串必须在语言中,且分解必须任意。
  • 归约题:方向绝对不能反。从已知难问题归约到目标问题。
  • NP-complete 题:先 in NP,再 NP-hard。
  • Rice 题:先确认是 L(M)L(M) 的非平凡语义性质,不是机器编码的语法性质。
  • P/NP 题:注意”可验证”与”可求解”不同;HAMPATH 在 NP,但不知道是否在 P。
  • DFA 乘积构造中接受态按目标布尔组合设置,不要混淆交集与并集。
  • Subset construction 的 DFA 接受态是”包含旧接受态”,不是”全是旧接受态”。
  • NFA 的 ϵ\epsilon-closure 在子集构造中必须算入起始态和每次转移后的闭包。
  • CFG 转 PDA 时,多符号右部压栈要倒序,保证最左推导顺序正确。
  • PDA 转 CFG 前必须先规范化:单接受态、接受前栈空、每步只 push/pop 一个符号。
  • CNF 推导长度为 w|w| 的串需要 2w12|w|-1 步。
  • 证明非正则/非 CFL 只能用 Pumping Lemma 的否定,不能用它证明正则/CFL。
  • AmBA\le_m B 的方向:AA 难则 BB 难;BB 易则 AA 易。
  • 复杂度分析时注意 reasonable encoding,unary 编码下的多项式时间不一定是真正多项式。
  • 多带 TM 与单带 TM 在多项式意义下等价,但具体复杂度差一个平方。

Comments