11.2 有穷自动机
确定型有穷自动机 (DFA)
非确定型有穷自动机 (NFA)
带
转移的 NFA( -NFA)
确定型有穷自动机
定义 确定型有穷自动机 (DFA) 是一个有序 5 元组 M = Q,,,q0,F , 其中
(1) 状态集合 Q: 非空有穷集合
(2) 输入字母表 : 非空有穷集合 (3) 状态转移函数 :QΣ→Q
(4) 初始状态 q0Q (5) 终结状态集 FQ
控制器
an
… ai
… a2
a1
DFA 接受的语言
把 扩张到 Q* 上 *:Q*→Q, 递归定义如下
qQ, a 和 w* *(q,)=q
*(q,wa)= (*(q,w),a)
定义 w*, 如果 *(q0,w)F, 则称 M 接受 w.
M 接受的字符串的全体称作 M 接受的语言 , 记
作
L(M), 即
DFA 接受的语言 ( 续 )
例 1 M= {q0
, q
1},{a}, ,q
0,{q
1}
(q
0, a)=q
1, (q
1, a)=q
0
为偶数 为奇数
0 1
0 q , n
n , ) q
a , (q
δ n
为偶数 为奇数
1 0
1 q , n
n , ) q
a , (q
δ n
非确定型有穷自动机
定义 非确定型有穷自动机 (NFA) M = 〈 Q,,,q0,F 〉 ,
其中 Q,, q0, F 的定义与 DFA 的相同 , 而 : Q →P(Q)
实例
→q0 q1 *q2 q3 *q4 0
1
{q0 , q3} {q2} {q4} {q4} {q0 , q1} {q2} {q2} {q4} 例 2 一台 NFA
NFA 接受的语言
(q,w)( , )p
a p
*:Q*→Q 递归定义如下 : qQ, a 和 w* *(q,)={q}
*(q,wa)=
定义 w*, 如果 *(q0 ,w)∩F≠, 则称 M 接受 w. M 接受的字符串的全体称作 M 接受的语言 , 记作 L(M), 即
L(M)={ wΣ*| *(q0 ,w)∩F≠ }
例 2 ( 续 )
L(G) = { x00y, x11y | x,y{0,1}*} w δ*(q0 ,w)
1 10 101 1011 10110
{q0, q1} {q0, q3} {q0, q1} {q0, q1 , q2} {q0, q2 , q3}
DFA 与 NFA 的等价性
用 M=Q,, ,q0,F 模拟 M=Q,,,q0,F Q=P(Q), q0={q0}
F={ AQ | A∩F≠}
AQ 和 aΣ,
( A, a)
( p,a)定理 对每一个 NFA M 都存在 DFA M 使 得
L(M)=L(M )
模拟实例
NFA M DFA M
δ 0 1
→q0 q1
*q2
{q0, q1} {q0} {q2}
δ 0 1
→{q0} {q1}
*{q2} {q0,q1}
*{q0,q2}
*{q1,q2}
*{q0,q1,q2}
{q0, q1} {q0} {q2} {q0,q1,q2} {q0} {q0,q1} {q0} {q2} {q0,q1,q2} {q0}
模拟实例 ( 续 )
δ 0 1
→{q0} {q0,q1}
*{q0,q1,q
{q0, q1} {q0} {q0,q1,q2} {q0} {q0,q1,q2} {q0}
不可达状态 : 从初始状态出发永远不可能达到的状态 删去所有的不可达状态 , 不会改变 FA 接受的语言 . 如 M 中的 {q1},{q2},{q0,q2},{q1,q2} 和都是不可达状态 ,
删去这些状态得到 M
带 转移的非确定型有穷自动机
ε 转移 : 不读如何符号 , 自动转移状态 .
-NFA: :Q(∪{ })→P(Q)
定理 对每一个 -NFA M 都存在 DFA M 使得 L(M)=L(M)
DFA, NFA 和 -NFA 接受同一个语言类
用 DFA 模拟 -NFA
设 -NFA M=Q,,,q0,F , qQ
q 的 闭包 E(q): 从 q 出发 , 经过 转移能够到达的 所
有状态 , 递归定义如下 (1) E(q) 包含 q;
(2) 如果 pE(q), 则 (p, )E(q).
例 3 -NFA M 0 1
→q0 q1
{q1} {q2} {q2}
q E(q)
q0 q1
{q0,q2} {q1}
用 DFA 模拟 -NFA( 续 )
模拟的方法与用 DFA 模拟不带 的 NFA 的方法基本相同 , 只是要用 E(q) 代替 q.
用 DFA M=Q,, ,q0,F 模拟 -NFA M=Q,,,q0,F Q=P(Q), q0=E(q0)
F ={AQ | A∩F≠}
AQ 和 aΣ,
Aq
a p t
q E p
t p t
E r
a A
( , ) { ( ) | , ( ), ( , )}
使
构造 DFA M 时不需要对不可达状态进行计算 , 做法如下 : 从 q
0= E(q0) 开始 , 对每一个 a 计算 的值 , 然后对每一个新出
模拟实例——例 3( 续 )
0 1
→q0 q1
*q2
{q1} {q2} {q2} {q0}
0 1
→*{q0,q2} {q1}
{q1} {q0,q2}
-NFA M DFA M
ε ε
11.3 有穷自动机和正则文法 的等价性
用
-NFA
模拟右线性文法 用右线性文法模拟 DFA
有穷自动机和正则文法的等价性
定理 设 G 是右线性文法 , 则存在 -NFA M 使得
L(M)=L(G); 设 M 是 DFA, 则存在右线性文法 G 使
得 L(G)= L(M).
定理 下述命题是等价的 : (1) L 是正则语言 ;
(2) 语言 L 能由右线性文法生成 ;
(3) 语言 L 能由左线性文法生成 ;
(4) 语言 L 能被 DFA 接受 ; (5) 语言 L 能被 NFA 接受 ;
用 -NFA 模拟右线性文法
设右线性文法 G=V,T,S,P
-NFA M=Q,,, q0 , F 构造如下 : Q=V∪{qf }, q0={S}, F={qf },
={ T *-{ } | 存在 A→BP 或 A→P }
AV 和∪{},
若 A→BP, 则 (A, ) 中含有 B;
若 A→P, 则 (A, ) 中含有 qf;
∪{}, (qf ,)=
模拟实例
L(G)=L(M)={ (11)m0n | m1, n0} G=V,T,S,P
V={A,S}
T={0,1}
P: S→11S S→11A A→0A
A→
-NFA M=Q,,, S, {qf} Q ={A, S, qf}
Σ ={11, 0}
11 0
→S A
*qf
{S,A} {A} {qf}
用右线性文法模拟 DFA
设 DFA M=Q,,,q0,F
右线性文法 G=V,T,S,P 构造如下 : V=Q, T=Σ, S=q0
qQ 和 aΣ,
若 (q,a)=p, 则有产生式 q→ap 若 qF, 则有产生式 q→
模拟实例
0 1
→q0 q1
*q2
q1 q0 q2 q1 q0 q2
DFA M G =V,T,S,P
V={q0,q1,q2}, T={0,1}, S= q0 P: q0→0q1 q0→1q0
q1→0q2 q1→1q1 q2→0q0 q2→1q2 q2→
L(M)=L(G), 它们是所有含 3k+
2 (k0) 个 0 的 0,1 串组成的集