基本定义
NFA,也称不确定的有穷自动机,是由一个五元式定义的数学模型,特点是它的不确定性,即在当前状态下,读入同一个字符,可能有多个下一状态。
DFA,也称确定的有穷自动机,也是由一个五元式定义的数学模型,相对的特点是它的确定性,即在当前状态下,读入同一个字符,最多有一个后继状态。
NFA与DFA的矩阵表示
一个NFA或者DFA还可以用一个矩阵[5]表示,矩阵也可以说是状态转换表,它的优点是可以快速访问给定的状态在给定的输入字符时能转换到的状态集。矩阵,每个状态一行,每个输入符号和ε(如果有需要的)各占一列,表的第i行中与输入符号a对应的表项是一个状态集合,表示NFA或者DFA在状态i输入a时所能到达的状态集合(DFA的集合唯一),即天津游玩攻略δ(i,a)[6]。 (7)
如图可用表表示:
NFA状态转换表
输入 状态 | 0 | 1 |
|
S | {P} | {S,Z} |
P | {} | {Z} |
Z | {P} | {P} |
| | |
DFA状态转换表
NFA向DFA的转换的思路
从NFA的矩阵表示中可以看出,表项通常是一状态的集合,而在DFA的矩阵表示中,表项是一个状态,NFA到相应的DFA的构造的基本思路是:DFA的每一个状态对应NFA的一组状态DFA使用它的状态记录在NFA读入一个输入符号后可能达到的所有状态[4]。
NFA和DFA之间的联系
在非确定的有限自动机NFA中,由于某些状态的转移需从若干个可能的后续状态中进行选择,故一个NFA对符号串的识别就必然是一个试探的过程。这种不确定性给识别过程带来的反复,无疑会影响到FA的工作效率。而DFA则是确定的,将NFA转化为DFA将大大提高工作效率,因此将NFA转化为DFA是有其一定必要的。
子集构造法
已证明:非确定的有限自动机与确定的有限自动机从功能上来说是等价的,也就是说,我们能够从:
NFA M’DFA M
使得 L(M)=L(M’)
为了使得NFA确定化,我们首先给出两个定义:
定义1:集合I的ε-闭包:
令I是一个状态集的子集,定义ε-closure(I)为:
1)若s∈I,则s∈ε-closure(I);
2)若s∈I,则从s出发经过任意条ε弧能够到达的任何
状态都属于ε-closure(I)。
状态集ε-closure灵敏度单位(I)称为I的ε-闭包
定义2:令I是NFA M’的状态集的一个子集, a∈Σ
定义: Ia=ε-closure(J)
其中J = ∪δ(s,a)
——J是从状态子集I中的每个状态出发,经过标记为a的弧而达到的状态集合。
——Ia是状态子集,其元素为J中的状态,加上从J中每一个状态出发通过ε弧到达的状态。
具体的转换过程
为了说明跟清晰,我们使用实例说明,构造正规式101(0|1)*011的DFA?
解:首先构造相应的NFA,如图4.2.1所示:
开卷有益意思将其写成M五元式则为:
M=({0,1,2,3,4,5,6,7,8},{0,1},δ,0,{8})
其中δ为:
δ(0,1)=1
δ(1,0)=2
δ(2,1)=3
δ(3,ε)=4
δ(4,ε)=5 δ(4,0)=4 δ(4,1)=4
δ(5,0)=6
δ(6,1)=7
δ(7,1)=8
它所对应的状态转换矩阵如表1:
表1
状态 | 0 | 1 | ε |
0 | ε | 1 | ε |
1 | 2 | ε | ε |
2 | ε | 3 | ε |
3 | ε | 龙门温泉ε | 4 |
4 | 4 红糖红枣姜茶 | 4 | 5 |
5 | 6 | ε | ε |
6 | ε | 7 | ε |
7 | ε | 8 | ε |
8 | ε | ε | ε |
| | | |
根据NFA转化为DFA的子集法转换法进行转换,对应的状态转换矩阵见表2:
表2
I | I0 | I1 |
{0} | {ε} | {1} |
{1} | {2} | {ε} |
{2} | {ε} | {3,4,5} |
{3,4,5} | {4,5,6} | {4,5} |
{4,5,6} | {4,5,6} | {4,5,7} 古诗池上 |
{4,5} | {4,5,6} | {4,5} |
{4,5,7} | {4,5,6} | {4,5,8} |
{4,5,8} | {4,5,6} | {4,5} |
| | | 三年级美术画
对上表重新命名后的状态转换矩阵见表3:
表3
I | I0 | I1 |
0 | ε | 1 |
1 | 2 | ε |
2 | ε | 3 |
3 | 4 | 5 |
4 | 4 | 6 |
5 | 4 | 5 |
6 | 4 | 7 |
7 | 4 | 5 |
| | |
将其写成M五元式则为:
M=({0,1,2,3,4,5,6,7},{0,1},δ,0,{5})
其中δ为:
δ(0,1)=1
δ(1,0)=2
δ(2,1)=3
δ(3,0)=4 δ(3,1)=5
δ(4,0)=4 δ(4,1)=6
δ(5,0)=4 δ(5,1)=5
δ(6,0)=4 δ(6,1)=7
δ(7,0)=4 δ(7,1)=5
与表3对应的状态转换图如图4.2.2所示:
这样就完成了从正规表达式101(0|1)*011到DFA的转化。
我们好好爱歌词