更系统的笔记见 计算理论导论系统笔记。
这份复习覆盖 ppts/ 全部课件、Week1 至 Week13 的作业题面与 LaTeX/PDF 答案,以及 answers/ 中 Assignment 1–13 的官方答案。建议先看第 0 节答题规范,再按 DFA/NFA/RE → CFL/PDA → TM/可判定性 → 复杂度的顺序复习。
0. 考试答题规范:不要只写结论
如果题目要求 “use the construction proof”,必须给出新机器/新文法的完整形式,不能只画直觉图或说”显然封闭”。
DFA 乘积构造模板(交、并、差、对称差)
给定
构造
其中
按目标语言设置接受态:
- 交集:
- 并集:
- 差集:
- 对称差:
正确性:读入同一前缀后,第一分量正是 的状态,第二分量正是 的状态,因此接受条件等价于目标布尔组合。
NFA 并/连接/星号构造模板
- 并:新起始态 ,从 用 -transition 到两个旧起始态;接受态为两个 NFA 接受态的并集。
- 连接:从第一个 NFA 的每个接受态用 -transition 到第二个 NFA 的起始态;接受态为第二个 NFA 的接受态。
- Star:新起始态也是接受态;从新起始态 到旧起始态;从每个旧接受态 回旧起始态。
- 单接受态:新增唯一接受态 ,从所有旧接受态 到 ,原接受态取消接受。
子集构造模板
给 NFA ,构造 DFA 。
若有 -transition,则
接受态:
作业里需要列出可达子集和转移表,不要只写”用 subset construction”。
CFG → PDA 模板
构造 PDA 用栈模拟最左推导:
- 初始先压入底符号
$,再压入起始变量 。 - 对每条产生式 ,加 的替换路径(多符号压栈要拆成多个中间状态)。
- 对每个终结符 ,加读入并匹配的转移 。
- 栈底
$被弹出且输入读完时接受。
PDA → CFG 模板
先保证 PDA 只有一个接受态且接受前清空栈。变量 表示从状态 到 并清空所压栈内容的所有字符串:
- 基础规则:
- 连接规则:
- 匹配规则:若 push ,且 pop ,则
归约证明模板
要证明目标 难,必须从已知难问题 归约到 : 或 。
- 说明已知 的性质,例如 undecidable,或 3SAT NP-complete。
- 给出输入 到实例 的构造,且构造可计算/多项式时间。
- 证明双向:。
- 结论:若 可解,则 可解,矛盾;或 NP-hard。若还要 NP-complete,必须再证明 。
Pumping Lemma 答题模板
证明非正则:
- 假设 正则,令 为 pumping length。
- 选 且 。
- 任取分解 ,满足 。
- 由 定位 在某一块内。
- 选 或 ,证明 ,矛盾。
证明非 CFL:
- 假设 是 CFL,令 为 CFL pumping length。
- 选 ,分解 ,满足 。
- 由于 ,它最多跨越有限相邻块。
- 分情况或统一说明 pumping 改变局部块,破坏全局相等/比例关系。
- 选 或 ,得到 。
1. DFA 与正则语言
DFA 定义与接受
DFA 是五元组
其中 是有限状态集, 是字母表,, 是初始态, 是接受态。
DFA 接受 ,当且仅当存在状态序列
语言 。若某语言被某 DFA 识别,则它是 regular language。
设计 DFA 的常用状态含义
复习时不要背图,背”状态记录什么信息”:
- 以某串结尾:状态记录最长后缀匹配了目标串多少位。例如 contains
0101,状态记录已匹配 “、0、01、010、0101。 - 至少/至多出现次数:状态记录计数并在阈值处吸收,例如至少四个
1用 五类。 - 奇偶性:两个状态来回切换。
- “以 0 开头且以 1 结尾”:先记住开头是否合法,再记录最后一个字符。
- “不含某 substring”:先构造”含该 substring” 的 DFA,再取补集;或直接设置陷阱态。
- 交集语言:先构造两个简单 DFA,再做乘积构造。
正则运算与闭包
正则语言对并、交、补、差、连接、Kleene star 封闭。
- 并/交/差/补:DFA 层面最直接,使用乘积或翻转接受态。
- 连接/星号:NFA 层面最自然,使用 -transition。
- 反转 :正则表达式结构归纳最直接:
Assignment 1 要点
官方答案要求把图转为形式化描述。写 DFA 形式化描述时必须列:、、 表格、、。
典型语言: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 。
补集构造:
- 不含
ba:先构造含ba的 DFA,再翻转接受态。 - 既不含
ab也不含ba:等价于 。 - 不在 中:等价于含 substring
ab。
交集构造:
- 至少两个
a且至少三个b:状态 ,其中 ,。 - 偶数个
a且一个或两个b:记录aparity 和bcount 。 - 以
a开头且至多两个b:先判断首字符,再计数b。
2. NFA、正则表达式、GNFA
NFA 定义
NFA 仍是五元组,但转移函数为
NFA 接受一个串,只要存在一条路径,路径标签(去掉 )等于该串且终点在接受态。
NFA 与 DFA 等价
核心定理:若 NFA 识别 ,则 正则。证明用 subset construction。有 -transition 时必须使用 -closure。
NFA 转 DFA:subset construction 完整写法
给定 。若 有 -transition,先定义
构造 DFA :
- 起始态:。
- 对每个已发现的子集状态 和每个输入符号 ,计算 再令 。
- 若新集合还没出现,把它加入待处理队列。只列可达子集即可;若题目要求 complete DFA,则 也要作为死状态列出。
- 接受态:。
正确性:对任意输入串 ,DFA 读完 后所在的子集,恰好等于 NFA 从 读完 后可能处在的所有状态的 -closure。因此该子集与 相交,当且仅当 NFA 有某条接受路径。
NFA 转 DFA 示例:以 01 结尾
NFA:,, start,。 转移:,,。
令 ,,。转移表:
| DFA state | on 0 | on 1 | accepting? |
|---|---|---|---|
| no | |||
| no | |||
| yes |
接受是因为 ,不是因为集合中所有 NFA 状态都接受。
正则表达式
正则表达式递归定义: 是正则表达式;若 是,则 、、 也是。
Kleene theorem:
Thompson 构造与状态消除
- RE → NFA:对基础表达式建小 NFA,再递归处理 union/concat/star。
- DFA/NFA → RE:转 GNFA 后消状态。消去状态 时,对任意 更新边标签:
作业中必须写添加新 start、新 accept、逐步消状态,不能只给最终正则式。
Assignment 2 要点
NFA 构造要点:
- ends with
00:三态;起点可在任意处猜测倒数两个0的开始。 - contains
0101:五态;匹配进度 0 到 4。 - even number of
0s or exactly two1s:用新起点 分支到两个子 NFA。 - :两态,读一个
0接受。 - :三态,注意最后的 至少一个
0。 - :起点接受,读
00后必须至少一个1回到起点。 - :单个起始接受态。
- :单个起始接受态,
0自环。
Closure construction 必须按证明构造:并、连接、star、single accept state。
Assignment 3 要点
正则表达式速记:
- starts with
1, ends with0: - at least three
1s: - contains
0101: - third symbol is
0: - length at most 5:
- strings of positive length:
- empty language:
注释语言 :以 /# 开始,以 #/ 结束,中间不能提前出现 #/。可简记为
关键状态含义:在 body 中看到 # 后,若下一个是 / 就结束;若是 a,b,# 则继续。
3. 非正则语言与 Pumping Lemma
正则 Pumping Lemma
若 正则,则存在 ,任意 ,可写为 ,满足:
它只能证明”非正则”,不能证明”正则”。
标准证明
- 非正则:取 。由 ,。泵 后得到 ,三段数量不相等,矛盾。
- :取 。由于 , 位于第一段 中,泵后第一段变长,不能再分成三个完全相同的块。
- 非正则:取 ,,且 。泵 后长度为 ,满足 ,夹在连续两个 2 的幂之间,矛盾。
- 为什么不能用 证明 非正则:泵 的前段 0 后仍是 。你证明的是不在 ,不是不在 。
- 非正则:取 , 在第一段 0 内,泵 后前后 0 数量不同。
- 非正则:用闭包。若 正则,则 正则。但 非正则,矛盾。
- 出现
01次数等于10次数的语言是正则:次数相等 iff 或首尾字符相同。正则式:。 - 非正则:取 ,前缀 作 。泵掉前面的 后,开头最多 个 1,但后缀仍有 个 1,违反条件。
4. CFG、CFL、PDA
CFG 定义
CFG 为
其中 是变量, 是终结符, 是产生式, 是起始变量。若一个字符串有两棵不同 parse tree,则文法 ambiguous。
常用 CFG
- 至少三个
1: - 以相同符号开始和结尾:
- 奇数长度:
- 奇数长度且中间符号为 0:
- 回文:
- 空语言:可用 或无接受路径的 PDA。
CNF
Chomsky Normal Form 只允许:
如果语言含 ,允许新起始符号 。
转换步骤:
- 加新起始变量 。
- 消除 -productions。
- 消除 unit productions。
- 长右部拆成二元变量,终结符替换成单独变量。
若 CFG 在 CNF 中,推导长度为 的非空串时恰好需要 步: 次 让变量叶子数从 1 增到 ,再 次 生成终结符。
PDA
PDA 转移记为 ,表示读入 (可为 ),弹出 (可为空),压入 。
核心等价:
CFG 转 PDA:完整构造
给定 ,构造 PDA ,栈里保存”还需要匹配或展开的 sentential form”。PDA 的状态可取 ,栈字母表 \Gamma=V\cup\Sigma\cup\{\}$。
核心转移:
- 初始化:q_{\mathrm{start}}\xrightarrow{\epsilon,\\to S$}q$。
- 展开变量:对每条产生式 ,加转移 。若只能逐个压栈,按 顺序压,使最后 在栈顶。若 ,则加 。
- 匹配终结符:对每个 ,加 。
- 接受:q\xrightarrow{\epsilon,\\to\epsilon}q_{\mathrm{acc}}$。
正确性:PDA 每次用 替换栈顶变量,正好对应 CFG 最左推导中的一步;每次读入终结符 并弹出 ,正好确认当前推导出的最左终结符与输入一致。
PDA 转 CFG:完整构造
先把 PDA 改成等价的规范形式:只有一个接受态 ;接受前栈必须为空;每个转移只做 push 或 pop 一个栈符号。
为每一对状态 建变量 ,含义:从 空栈到 空栈的所有字符串。起始变量是 。
产生式分三类:
- 空计算:,对每个 。
- 串接计算:,对所有 。
- push-pop 配对:若有 和 ,则加 。
CFL 闭包与非闭包
CFL 对并、连接、Kleene star 封闭。证明可用 CFG:
- 并:新起始变量 。
- 连接:。
- Star:。
每个正则语言都是 CFL:对正则表达式结构归纳。
CFL 不对交和补封闭:
- 取 ,。二者都是 CFL,但 不是 CFL。
- 若 CFL 对补封闭,则由 De Morgan 与并封闭可推出对交封闭,矛盾。
CFL 与正则语言的交封闭:给 PDA 和 DFA ,构造乘积 PDA,状态为 ,栈行为照 PDA,读入符号时同时更新 DFA;接受态为 。
CFL Pumping Lemma
若 是 CFL,则存在 ,任意足够长 可写为 ,满足
标准证明:
- 非 CFL:取 。因 ,只影响至多两个相邻块。泵后至少一个块长度变,另有块保持 ,四段无法同为 。
- 非 CFL:取 。 不可能跨两个
#,只改变局部一段或相邻两段,泵后比例 被破坏。
5. Turing Machines 与 Church-Turing
TM 定义
标准 TM:
其中 是 tape alphabet,,,
配置写作 :带内容为 ,当前状态 ,读写头在 的第一个字符上。
Decider vs Recognizer
- Decider:所有输入都 halt,接受 中输入,拒绝非 输入。
- Recognizer: 中输入会 accept;非 输入可以 reject 或 loop。
- Decidable Turing-recognizable。
- decidable iff 和 都 Turing-recognizable。
TM 变体
PPT 覆盖的等价模型:
- 多带 TM 等价于单带 TM。
- NTM 等价于 DTM(可模拟所有计算分支)。
- Enumerator 与 TM 识别器等价。
- Church-Turing thesis:直观可算法计算的函数可由 TM 计算。
作业中重要变体:
- 2-PDA 识别 :读
a时压 stack1;读b时压 stack2;读c时同时弹两个栈;输入结束且两栈空则接受。这说明 2-PDA 比 1-PDA 强。 - Left-reset TM 模拟普通左移:用标记法,reset 到最左端,逐步找当前格前一格,用额外标记推进候选前驱。
- 只能右移/停留或输入只读的 TM:识别能力退化为正则语言。证明思路:构造等价有限自动机,状态编码 TM 从当前位置向右移动后的有限控制状态。
TM 设计算法题
- 识别 :循环扫描,找未标记
a改为X,向右找未标记b改为Y,再找未标记c改为Z,回到左端;最后确认没有未标记a,b,c且顺序合法。 - :反复找一个未标记 0 和一个未标记 1 配对标记。
- :每找一个
1,匹配两个0。 - 补语言:若已有 decider,可翻转 accept/reject;若只是 recognizer,不能直接补。
- 二进制减一:移到最右,从右向左把连续 0 改成 1,遇到第一个 1 改成 0 后停。
- 二进制减法 :重复对 和 执行减一,直到 。
- 整数除法 :多带 TM 上重复减 ,计数 quotient。
6. Decidability 与 Undecidability
可判定语言
经典可判定问题:
- ,
- ,
典型算法:
- :直接模拟 DFA。
- :转 DFA 或图搜索所有 NFA 分支。
- :RE → NFA → DFA,再判定。
- :从 start 做 BFS,看是否能到接受态。
- :构造对称差 DFA,判空。
- :转 CNF 后 CYK/dynamic programming。
- :标记能生成终结串的变量,看 start 是否被标记。
重要结论
- 可判定:构造识别 的 DFA ,运行 。若补语言为空,则 。
- 可判定:运行 于 ,或转 CNF 后检查是否有 。
- Turing-recognizable:枚举所有字符串,dovetail 模拟,一旦某个输入被接受就接受。
- 有限测试上界:若 有 个状态,对称差 DFA 有 个状态。若存在区分串,则存在长度小于 的区分串。
Diagonalization 与
是 Turing-recognizable 但 undecidable。
Recognizer:通用 TM 模拟 ,若 accept 则 accept,若 reject 则 reject,若 loop 则 loop。
不可判定证明:
- 假设 decides 。
- 构造 :输入 ,运行 。若 accept,则 reject;若 reject,则 accept。
- 运行 得矛盾。
不是 Turing-recognizable。否则 和其补都 recognizable,可并行运行得到 decider,矛盾。
Reducibility
映射归约 :存在可计算函数 ,使得 。
性质:
- 若 且 decidable,则 decidable。
- 若 且 undecidable,则 undecidable。
- 若 且 T-recognizable,则 T-recognizable。
- 若 且 T-unrecognizable,则 T-unrecognizable。
Rice Theorem
任何关于 的非平凡性质都是 undecidable。非平凡:有些 TM 的语言满足该性质,有些不满足。
注意:Rice 只适用于”语言性质”,不适用于”TM 语法性质”如状态数是否大于 481。
应用: infinite、、 都是 undecidable。
Assignment 9-10 要点
- 不可数:对角线构造新序列,第 位取不同于 第 位的符号。
- 三元组集合可数:按 分层,每层有限,先列和小的。
- “TM 是否会在空白带上写非空符号”可判定:模拟 步,若没写且状态重复则之后永远重复。
- “TM 是否至少 481 个状态”可判定:语法性质,直接解析编码计数。
- DFA 是否不接受任何偶数个 1 的串:构造 DFA 接受偶数个 1 的串,构造 ,运行 判空。
- Turing-recognizable:枚举所有字符串 ,运行 判断 是否由 生成;若结果不同则接受。
- 若 T-recognizable 且 ,则 decidable:由归约 ,可 recognize ,故 与 都 recognizable。
- 判定 halts on empty input 不可判定:从 归约。给 ,构造 :在空输入上模拟 ,若 halt 则 halt,否则 loop。
7. Time Complexity 与 P
时间复杂度
TM 在时间 内运行:对所有长度 输入,最多 步内 halt。
即多项式时间可判定语言。
课件强调:
- 最坏情况复杂度是对长度 的所有输入取上界。
- reasonable encoding 很重要;图的 adjacency matrix/list 是合理编码,数字用 unary 通常不合理。
- 多带 TM 与单带 TM 在多项式意义下等价:多带 可由单带 模拟。
P 中的典型问题
- PATH :给有向图 ,从 做 BFS/marking,若标记到 则接受。
- RELPRIME :Euclidean algorithm:重复 ,交换 ,直到 。若 gcd 为 1 则接受。
- CFL :用 CYK/dynamic programming。转 CNF 后,对每个 substring 存能生成它的变量集合,总复杂度多项式。
- HAMPATH 与 PATH 的区别:PATH 只问是否有任意路径,BFS 可解;HAMPATH 要经过每个节点恰好一次,暴力路径数可达 ,是否在 P 是开放问题。
P 闭包
P 对并、连接、补封闭。
- Union:顺序运行两个多项式 decider,任一接受则接受。
- Concatenation:枚举 个 split ,运行两个 decider,某个 split 都接受则接受。
- Complement:运行 decider 并翻转结果。
CONNECTED :无向图从任意顶点 BFS,若所有顶点都被标记则接受。
:构造补 DFA,对补 DFA 从起点 BFS。若能到接受态,则原 DFA 不是 all。
:构造对称差 DFA,再用 的 BFS 判空。
8. NP、coNP、Polynomial Reducibility
NP 定义
等价定义:存在多项式时间 verifier 和多项式长度 certificate ,使得
重要定理:语言在 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 是 个顶点;检查每条边至少一个端点在集合中。
- TSP:certificate 是 tour;检查每个城市恰好一次且总权重 。
- MAX-CUT:certificate 是顶点划分 ;数 crossing edges 是否 。
- 3-COLORING:certificate 是每个顶点颜色;检查相邻顶点颜色不同。
- CLIQUE:certificate 是 个顶点;检查任意两点之间有边。
- SUBSET-SUM:certificate 是子集;检查和是否为目标 。
- COMPOSITES:certificate 是非平凡因子 ;检查 且 。
NP 闭包
NP 对 union、concatenation、star 封闭。
- Union:certificate 额外包含选择 bit,说明用 还是 。
- Concatenation:certificate 包含 split 位置 以及两个子证书 。
- Star:certificate 包含分割位置列表和每段证书;段数至多 ,总长度仍多项式。
P、NP、coNP 判断题
- :True,忽略 certificate,直接运行 P decider。
- 对补封闭:True。
- :True。
- 若 ,则 :True。
- :严格说是开放问题;若它在 P,则 。
2-COLOR 与 2-SAT
2-COLOR
- NP:certificate 是 2-coloring。
- P:BFS/DFS 检查二分图。未染色点染 0,邻居染 1,若遇到同色边则 reject。
2-SAT
- NP:certificate 是 assignment。
- P:构造 implication graph: 若某变量 与 在同一个 SCC,则不可满足;否则可满足。
9. NP-Completeness
定义与证明套路
语言 是 NP-complete iff:
- 对所有 ,
实际证明 NP-complete:
- 证明 。
- 从一个已知 NP-complete 问题 归约到 ,如 。
- 证明构造多项式时间。
- 证明 iff。
3SAT → CLIQUE
给 3CNF 。构造图 :
- 对每个 clause 中每个 literal occurrence 建一个顶点。
- 不同 clause 的两个顶点之间连边,当且仅当两个 literal 不矛盾。
- 设置 。
正确性:
- 若 satisfiable,从每个 clause 选一个 true literal。这些 literal 互不矛盾,对应顶点两两相连,形成 -clique。
- 若 有 -clique,因为同 clause 内没有边,clique 必定每个 clause 选一个顶点;两两相连说明 literal 互不矛盾,可扩展为满足赋值。
2SAT → CLIQUE
同样构造,每个 2-clause 建两个顶点,连接不同 clause 且不矛盾的 literal,令 。能说明 2SAT 实例可多项式变成 CLIQUE 实例;但由于 2SAT 在 P,这个归约不能证明 CLIQUE NP-hard。要证明 CLIQUE NP-hard 必须从 NP-complete 问题如 3SAT 归约。
Double-SAT NP-complete
Double-SAT:。
- 在 NP:certificate 是两个不同 assignment,验证二者不同且都满足 。
- 从 3SAT 归约:给 ,引入新变量 ,构造 。若 satisfiable,则任意满足赋值可扩展为 和 两个满足赋值。若 有至少两个满足赋值,则 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 ,构造 undirected 。对每个顶点 建 ,并加内部边 。对每条有向边 ,加无向边 。起点终点:。
关键: 度只连 ,所以 Hamiltonian path 必须连续穿过一个 gadget。路径从 开始会强制所有 gadget 都以 方向穿过;跨 gadget 的边只能对应原图有向边。
3SAT → VERTEX-COVER
给 3CNF ,变量数 ,clause 数 。
- 每个变量 :建两个顶点 ,加边 。
- 每个 clause :建三角形三个 clause 顶点。
- 每个 clause literal 顶点连到变量 gadget 中同名 literal 顶点。
- 设置 。
正确性:
- 满足赋值 → 每个变量 gadget 选 true literal 顶点;每个 clause 三角形中留下一个 true literal 顶点不选,选另两个。大小 。
- Vertex cover 大小 → 每个变量边至少选一个,共至少 ;每个三角形至少选两个,共至少 。因此必须恰好选这些数量。每个 clause 三角形有一个未选顶点,其连接边必须由变量 gadget 中同名顶点覆盖,令该 literal 为 true。
3COLOR NP-complete
在 NP:certificate 是 coloring,逐边检查端点颜色不同。
从 3SAT 归约:
- 建 palette 三角形 ,强制三种颜色。
- 每个变量建 ,二者互连,且都连到 。因此它们不能取 Neutral,且必须一真一假。
- 每个 clause 用两个 OR gadget:先算 ,再算 。
- gadget 的中间输出和最终输出连到 ,使其只能 True/False。
- 最终输出 还连到 ,强制 为 True。
正确性:clause 三个 literal 全 false 时 OR output 被迫 false,与连到 冲突;至少一个 true 时 gadget 可合法 3-color。
10. Cook-Levin 与 3SAT
Cook-Levin Theorem
证明结构:
- :certificate 是 truth assignment。
- 对任意 ,取多项式时间 NTM 决定 。给输入 ,构造公式 ,使 。
Tableau
若 在 时间内运行,构造 tableau,每行是一条 configuration。变量 表示 tableau 的第 行第 格内容是符号/状态 。
公式:
- :每个 cell 恰好一个符号。
- :第一行是 。
- :某处出现 。
- :每个 window 合法,保证相邻配置符合转移函数。
为什么用 window
设 ,,。考虑 window:
它非法,因为上方状态 实际扫描的是右侧 1,应产生 而不是 。但它的两个 子窗口都可分别出现在某个合法 window 中。因此只查 不够。
SAT → 3SAT
3SAT 是 NP-complete。长 clause 转 3CNF:
- 1 literal: 可写成 。
- 2 literals: 可写成 或用 padding。
- 3 literals:保持。
- literals: 替换为
注意原公式与新公式不必逻辑等价,只需 satisfiability 等价。
11. Space, PSPACE, NP-hardness, 近似
Space complexity
TM 在 space 内运行:对长度 输入,最多使用 个 tape cells。
Savitch theorem:
推论:。
课件关系:
且 ,所以这些包含中至少有一个是真包含,但不知道是哪一个。
NP-hardness
NP-hard 不要求问题在 NP 中,也可用于 search/optimization 问题。定义:对所有 ,。若某 NP-hard 问题有多项式算法,则 。
NP-complete = NP-hard + in NP。
近似与随机算法
Vertex Cover 2-approximation
算法:当图中还有边时,任选一条边 ,把 都加入 cover,并删除所有 incident edges。
证明:
- 输出 是 vertex cover,因为每条边在被处理或删除时都被选中端点覆盖。
- 选中的边彼此不共享端点,任意最优 cover 至少要为每条这样的边选一个端点。
- 算法每条选中边选两个端点,所以 。
Randomized MAX-3SAT expectation
每个变量独立以 取 true。一个 3-literal clause 不满足概率为 ,满足概率 。令 是第 个 clause 是否满足的 indicator,则
12. 快速总表
模型能力
| 模型 | 等价描述 | 语言类 |
|---|---|---|
| DFA | NFA, regex | Regular |
| PDA | CFG | CFL |
| TM decider | 总停机算法 | Decidable |
| TM recognizer | 接受时停机 | Turing-recognizable |
| Poly-time DTM | efficient decider | P |
| Poly-time NTM / verifier | short certificate | NP |
可判定/不可判定/可识别
| 问题 | 结论 |
|---|---|
| decidable | |
| decidable | |
| decidable | |
| recognizable, undecidable | |
| not recognizable | |
| undecidable | |
| undecidable, not recognizable | |
| recognizable | |
| undecidable, not recognizable | |
| recognizable |
常见 NP-complete 链
作业对应复习索引
| 作业 | 必会内容 |
|---|---|
| Assignment 1 | DFA 形式化、补集、乘积构造 |
| Assignment 2 | NFA 图、union/concat/star construction、single accept、subset construction |
| Assignment 3 | regex、Thompson、GNFA state elimination、reverse 正则性 |
| Assignment 4 | 正则 pumping lemma、闭包反证 |
| Assignment 5 | CFG、parse tree、PDA、CNF |
| Assignment 6 | CFG-PDA 等价、CFL closure、CFL pumping、CFL 非闭包、CFL regular |
| Assignment 7 | 2-PDA、TM 配置、TM 设计、left-reset、read-only/right-only 正则性 |
| Assignment 8 | DFA/RE/CFG 判定问题、 recognizer、 长度上界 |
| Assignment 9 | 对角线、可数性、TM 语法/行为判定、DFA 与偶数个 1 |
| Assignment 10 | co-recognizable、mapping reduction、Rice、CYK、P 闭包 |
| Assignment 11 | NP verifier、NP closure、2COLOR、2SAT、P/NP/coNP 判断 |
| Assignment 12 | 3SAT→CLIQUE、Double-SAT、3SAT→HAMPATH、3COLOR |
| Assignment 13 | Cook-Levin tableau、legal window、UHAMPATH、VERTEX-COVER |
13. 易错点 checklist
- 自动机题:先写”状态记录什么”,再写状态/转移/接受态。
- 构造证明题:必须给完整 tuple 或完整规则,不要只说”按闭包性”。
- Pumping 题:选择的串必须在语言中,且分解必须任意。
- 归约题:方向绝对不能反。从已知难问题归约到目标问题。
- NP-complete 题:先 in NP,再 NP-hard。
- Rice 题:先确认是 的非平凡语义性质,不是机器编码的语法性质。
- P/NP 题:注意”可验证”与”可求解”不同;HAMPATH 在 NP,但不知道是否在 P。
- DFA 乘积构造中接受态按目标布尔组合设置,不要混淆交集与并集。
- Subset construction 的 DFA 接受态是”包含旧接受态”,不是”全是旧接受态”。
- NFA 的 -closure 在子集构造中必须算入起始态和每次转移后的闭包。
- CFG 转 PDA 时,多符号右部压栈要倒序,保证最左推导顺序正确。
- PDA 转 CFG 前必须先规范化:单接受态、接受前栈空、每步只 push/pop 一个符号。
- CNF 推导长度为 的串需要 步。
- 证明非正则/非 CFL 只能用 Pumping Lemma 的否定,不能用它证明正则/CFL。
- 的方向: 难则 难; 易则 易。
- 复杂度分析时注意 reasonable encoding,unary 编码下的多项式时间不一定是真正多项式。
- 多带 TM 与单带 TM 在多项式意义下等价,但具体复杂度差一个平方。
Comments