2.2.1 确定的有穷自动机
→一个读头
→一个有穷控制器(Finite Control)
→一条输入带
2.2.2 有穷自动机的识别
在扫描输入的字符串之前, 读头在输入串的第一个字符下面, 然后从左向右, 一次一个单元格的读入字符, 移动读头, 并修改状态, 然后自动的循环这个过程, 直到扫描完整 个字符串之后, 通过有穷控制器中的当前状态, 对这个字符串进行判断, 回答有两种: 接受或 拒绝.
2.2.3 确定的有穷自动机 Deterministic Finite Automaton
A = (Q,Σ,δ,q0,F)
Q:有穷状态集
Σ:有穷输入符号集或字母表
δ:Q×Σ → Q, 状态转移函数
q0 ∈ Q:初始状态
F∈ Q:终结状态集或接受状态集
若输入串全部读入 后, 处于接受状态, 那么自动机接受这个输入串, 否则拒绝该串
2.2.4 DFA的表示
1)A五元组
2)状态转移图
3)状态转移表
状态转移图
状态转移表
5. 每个状态 q 对应一行, 每个字符 a 对应一列;
6. 若有 δ(q,a) = p, 用第 q 行第 a 列中填入的 p 表示;
7. 开始状态 q0 前, 标记箭头 → 表示;
8. 接受状态 q ∈ F 前, 标记星号 ∗ 表示
注意:不要忘记接受状态前标星号!
状态转移图使用更多
2.2.5 扩展转移函数
δ 是 Q×Σ 上的函数,所以只能处理 Σ 中的字符。
其中 a ∈ Σ, w,x ∈ Σ∗
2.2.6 DFA 的语言与正则语言
定义
若 D = (Q,Σ,δ,q0,F) 是一个 DFA, 则D 接受的语言为 L(D) = {w ∈ Σ∗ | ˆ δ(q0,w) ∈ F}.
定义
如果语言 L 是某个 DFA D 的语言, 即 L = L(D), 则称 L 是正则语言
• ∅, {ε} 都是正则语言
• 若 Σ 是字母表, Σ∗, Σn 都是 Σ 上的正则语言
状态的非确定转移
• 同一个状态在相同的输入下, 可以有多个转移状态
• 自动机可以处在多个当前状态
• 使自动机的设计更容易
对 FA 的模型稍加修改, 使之对同一输入符号, 从一个状态可以有零个、一个或多个的转移,这种新模型, 称为非确定有穷自动机. 非确定的有穷自动机具有同 时处在几个状态的能力, 在处理输入串时, 几个当前状态能“并行的”跳转到下一个状态.
定义
非确定有穷自动机 (NFA, Nondeterministic Finite Automaton) A 为五元组
A = (Q,Σ,δ,q0,F)
2.3.3 NFA 接受的语言
定义
若 N = (Q,Σ,δ,q0,F) 是一个 NFA, 则N 接受的语言为 L(N) = {w ∈ Σ∗ | ˆ δ(q0,w)∩F 不等于 ∅}.
2.3.4 DFA 与 NFA 的等价性
每个 DFA 都是一个 NFA;
显然, NFA 接受的语言包含正则语言。下面的定理给出, NFA 也仅接受正则语言;
证明的关键表明 DFA 能够模拟 NFA, 即, 对每个 NFA, 能够构造一个等 价的 DFA. 使用一个 DFA 模拟一个 NFA 的方法是让 DFA 的状态对应于 NFA 的状态集合。
定理一
如果语言 L 被 NFA 接受, 当且仅当 L 被 DFA 接受
• 允许状态因空串 ε 而转移, 即不消耗输入字符就发生状态的改变
• 使自动机的设计更容易
2.4.1 形式定义
带空转移非确定有穷自动机的形式定义
定义
带空转移非确定有穷自动机 (ε-NFA) A 为五元组——A = (Q,Σ,δ,q0,F)
注意:此后, 不再明确区分 ε-NFA 和 NFA, 而认为它们都是 NFA
2.4.2 ε-闭包
状态的 ε-闭包
定义.
状态 q 的ε-闭包 (ε-Closure), 记为 Eclose(q), 表示从 q 经过 ε 序列可达的全部状态集 合, 递归定义为:
状态集合的 ε-闭包
2.4.3 扩展转移函数
2.4.4 ε-NFA 的语言
定义
2.4.5 ε-NFA 与 DFA 等价性
**定理 2. **
如果语言 L 被 ε-NFA 接受, 当且仅当 L 被 DFA 接受