承接上文在上一篇文章中说了
DFA 是 NFA 的特例
对于每个NFA
M
存在一个DFA
M”
使得
L(M)=L(M”)
NFA缺点:
其不确定性使得识别单词符号的速度较慢
DFA缺点:
占用空间太大
NFA到DFA的变换
子集构造法
DFA的一个状态是NFA的一个状态集合
子集法相关的三个运算
(1)
状态
q
的
ε
闭包:
ε-closure(q)
从状态
q
出发,只经
ε
转换能到
达的所有状态的集合
(a) q
∈
ε-closure(q)
;
(b)
从
q
出发经任意条
ε
弧而能到达的任何状态
q‟
∈
ε-
closure(q)
(2)
状态集合
I
的
ε
闭包:
ε-closure(I)
{q‟|q‟
∈
ε-closure(q)
&
q
∈
I}
(3) I
a
=ε-closure(J)
a
∈
∑
,其中
J
为从
I
中任一状态出发经
输入符号
a(
可先经过
ε)
所能到达状态结点的全体。
Ia是
状态集I
的
a
弧转换
ε
闭包 J=
Move(I,a)
例子:
取
I
0
=ε-closure({0})={0,1,2,4,7}
标记
I
0
:ε-closure(Move(I
0
,a))=ε-closure({3,8})={1,2,3,4,6,7,8}=I
1
ε-closure(Move(I
0
,b))=ε-closure({5})={1,2,4,5,6,7}=I
2
标记
I
1
:ε-closure(Move(I
1
,a))={1,2,3,4,6,7,8}=I
1
ε-closure(Move(I
1
,b))={1,2,4,5,6,7,9}=I
3
标记
I
2
:ε-closure(Move(I
2
,a))={1,2,3,4,6,7,8}=I
1
ε-closure(Move(I
2
,b))={1,2,4,5,6,7}=I
2
标记
I
3
:ε-closure(Move(I
3
,a))={1,2,3,4,6,7,8}=I
1
ε-closure(Move(I
3
,b))={1,2,4,5,6,7,10}=I
4
标记
I
4
:ε-closure(Move(I
4
,a))={1,2,3,4,6,7,8}=I
1
ε-closure(Move(I
4
,b))={1,2,4,5,6,7}=I
2
最后得到的状态矩阵矩阵:
确定化后的DFA图
: