跳转至

Review

FA

DFA

  • DFA 如何处理串
  • DFA 的记号:转移图、转移表(\(\rightarrow, *\)
  • 转移函数与扩展转移函数
  • DFA 的语言

DFA 例子

  • 同时有偶数个 0 和偶数个 1
  • 倒过来解释称二进制整数时被 5 整除的串的集合

Warning

  • 注意输入的特殊情况

NFA

  • NFA 的形式化描述
  • NFA 的扩展转移函数
  • NFA 的语言 \(L(A) = \lbrace w \mid \hat{\delta}(q_0, w) \cap F \neq \emptyset \rbrace\)
  • DFA 和 NFA 的等价性
  • NFA 转 DFA 状态指数增长的例子
    • \(L(N)\): 倒数第 \(n\) 个符号是 1 的集合
    • 鸽巢原理

Example

  • 以 01 结尾的串
  • 习题2.3.4:结尾数字在前面出现过、结尾数字在前面没有出现过

文本搜索

Question

  • 文本搜索的 NFA
  • 文本搜索的 DFA
  • 由文本搜索的 DFA 构造对应的 NFA

\(\epsilon-\) NFA

  • 新能力不会扩大 FA 接受的语言类
  • \(\epsilon-\)NFA 的扩展转移,根据扩展转移可以定义对应语言
  • 消去 \(\epsilon\) 转移:利用 \(\epsilon\) 闭包和子集构造

正则表达式与正则语言

  • 三种语言运算:并、连接、闭包
  • 注意闭包的定义
  • 优先级:星、点、加
  • 正则表达式的语言:采用归纳定义
  • DFA 到正则表达式:状态消除法
  • 正则表达式到 \(\epsilon-\)NFA
  • 正则表达式代数定律
    • 结合律、交换律、单位元、零元、分配律
    • \(\emptyset\):并运算的单位元、连接运算的零元
    • \(\epsilon\):连接运算的单位元
  • 检验正则表达式代数定律:把变量换成具体的符号(但是出现新运算可能失效)

Example

  • 交替的 0 和 1 的串的集合:两种写法
  • Ex 3.1.1,Ex 3.1.2

正则语言的性质

Pumping Lemma

Example

正则语言的封闭性

  • 并、交、补、差
  • 反转,闭包
  • 连接、同态、逆同态

Example

证明 \(M = \bar{L_{eq}}\) 不是正则的

正则语言的判定性质

自动机的等价性和最小化

CFG 与 CFL

  • 规约和推导
  • 最左推导和最右推导
    • 任何推导都有等价的最左推导和最右推导
  • 文法的语言:能从初始符号推导出的所有终结符串的集合
  • 句型:左句型、右句型
  • 左线性文法和右线性文法,与正则语言的关系
  • 语法分析树

Example

  • \(L_{pal}\) 回文串
    • \(\epsilon,0,1\)都是回文
  • Ex 5.1.1

PDA

基础概念

  • PDA 的图形表示:靠近栈底放在右边
  • PDA 的即使描述

Example

  • \(\{0^n1^n2^n \mid n \geq 1\}\)
  • \(L_{wwr}\)

PDA 的语言

  • 以终态方式接受 \(L(P)\)
  • 以空栈方式接受 \(N(P)\)
    • 输入消耗完的同时堆栈为空的输入串的集合
  • 两种接受方式之间的转化
    • 从空栈方式到终结方式
    • 新增一个栈底,增加终止状态
    • 从终结方式到空栈方式
    • 新增一个栈底,终结状态移动到一个新的状态用于清空栈
    • \(N(P_N) = L(P_F)\)

PDA 与 CFG

  • CFG 转 PDA
  • 构造一个以空栈方式接受的 PDA
  • \(P= (\{q\}, T, V\cup T, \delta, q, S)\)
  • \(\delta(q, \epsilon, A) = \{(q, \beta) \mid A \to \beta\}\)
  • \(\delta(q, a, a) = \{(q, \epsilon)\}\)

DPDA

  • DPDA 的定义
  • \(\delta(q, a, X)\) 至多有一个成员
  • \(\delta(q, a, X) \neq \emptyset \Rightarrow \delta(q, \epsilon, X) \neq \emptyset\)
  • DPDA 的语言
  • 位于正则语言和 CFL 之间
  • 前缀性质:不存在两个不同的串 \(x,y\) 使得 \(x\)\(y\) 的前缀
  • If \(L\) is regular, \(L = L(P)\) for some DPDA \(P\)
  • \(L = N(P)\) for some DPDA \(P\) \(\iff\) \(L = L(P')\) 且有前缀性质
  • \(RL \subsetneq L(P) \subsetneq CFL\), where \(P\) is a DPDA
  • DPDA 的语言都有无歧义文法,但是有无歧义文法的语言不一定有 DPDA 接受

Example

  • \(L_{wwr}\) 是 CFL 但是不是任何 DPDA 的 \(L(P)\)
  • \(L_{wwr}\) 有无歧义文法但是不被 DPDA 接受

Example

  • Ex 6.4.2
  • Ex 6.4.4 : 另一个不被任何 DPDA 接受的 CFL例子

CFL 的性质

CNF 的构造

Pumping Lemma

Example

  • \(\{0^n1^n2^n \mid n\geq 1\}\)
  • 不能比较三组符号是否相等
  • \(\{0^i1^j2^i3^j \mid i\geq 1 \ and \ j\geq 1\}\)
  • 不能比较两对符号的数目是否分别相等,假设它们交叉给出
  • \(L_{ww}\)
  • 无法匹配任意长度的两个串

上下文无关语言的封闭性

  • 并、闭包、连接、翻转
  • 同态、逆同态
  • \(L\) is CFL, \(R\) is RL, \(L \setminus R\) is CFL

CFG 的判定性质

  • 测试 CFL 的空性:给定一个 CFG,判断它时候能产生至少一个串
  • 测试 CFL 的成员性: CYK 算法

TM

TM 的语言

  • 递归可枚举语言
  • 对于一个给定的图灵机 \(M\),容易构造另一个新的图灵机 \(M'\),它们接受的语言相同,\(M'\) 一旦接受就一定会停机,但是对于 \(w \notin L(M)\),对于 \(w\)\(M\) 不一定能停机

TM 的设计

  • 多带图灵机
  • 多栈机

不可判定性

非递归可枚举语言

  • 枚举二进制串:\(1w\)
  • 图灵机编码
  • 对角化语言 \(L_d\)
  • 非递归可枚举语言

递归可枚举但不可判定的问题

  • 递归语言定义
  • 存在某个图灵机接受这个语言,并且无论接不接受都停机
  • 定理:递归语言的补一定是递归语言,进一步只有如下情况
    • \(L\)\(\bar{L}\) 都是递归的
    • \(L\)\(\bar{L}\) 都不是 RE
    • \(L\)\(\bar{L}\) 不是 RE,一个是RE 但不是递归

Example

  • \(L_u\) 是 RE 但不是递归的
  • \(L_ne\) 是递归可枚举的,但是不是递归的
  • \(L_e\) 是非 RE 的
  • Post对应问题是不可判定的

计算复杂性