(4)一个状态对于某个字符,可能有多条输出边,即状态的后继不唯一
确定有限自动机DFA:
定义:DFA是一个五元组,M=(S,Σ,δ,s0,F)
特点:
(1) 初态唯一
(2) 输入字符不包括
(3) 有向边上只有一个字符
(4) 一个状态对于某个字符,最多只有一条出边
NFA与DFA
DFA的一个状态是NFA的一个状态集合
子集构造法
1、相关准备
2.子集法
输入符号a所能到达状态结点的全体。
通俗理解:
(1)概念理解
I0 初态经过任意条ε弧所到达的状态的状态集
对move(I0,a)中 a的理解: a为状态转换图中可以推导出的每一个字母,子集构造法中需要对每一个子集都进行move操作,move时只看该状态后的一个状态。
取空操作:对move后得到的状态集中的每一个状态都进行取空操作。结果集为自身加上ε弧可以走到的所有状态。ε弧为能到达的任意多条
(2)子集构造法
(1)初态和终态的添加: 当初态和终态不唯一的时候添加新的初态和终态,边上的元素为ε,唯一时没有添加的必要。
(2)对初态进行取空操作,得到I0。
(3)从I0开始对每个元素进行move操作后再取空操作,对比取空后的结果集是否已经加入到状态集中。若没有加入,添加为新的状态集。
(4)反复对新加入的状态集进行move和取空操作。直到所有的状态集都判断完成为止。
(5)构造DFA,所有的状态集中的状态即为DFA的顶点。move加取空后得到的状态集所指向的状态即为该状态的出边以及出边上的元素。
再放上一个例子:下次看到的时候能让自己立刻明白过程:
子集构造法过程:
I0=ε-closure({X})={X,5,1}
ε-closure(Move(I0,a))=ε-closure({5,3})={5,3,1}=I1
ε-closure(Move(I0,b))=ε-closure({5,4})={5,4,1}=I2
ε-closure(Move(I1,a))=ε-closure({5,2,3})={5,2,3,1,6,Y}=I3
ε-closure(Move(I1,b))=ε-closure({5,4})={5,4,1}=I2
ε-closure(Move(I2,a))=ε-closure({5,3})={5,3,1}=I1
ε-closure(Move(I2,b))=ε-closure({5,2,4})={5,2,4,1,6,Y}=I4
ε-closure(Move(I3,a))=ε-closure({5,2,3,6})={5,2,3,1,6,Y}=I3
ε-closure(Move(I3,b))=ε-closure({5,4,6})={5,4,6,1,Y}=I5
ε-closure(Move(I4,a))=ε-closure({5,3,6})={5,3,1,6,Y}=I6
ε-closure(Move(I4,b))=ε-closure({5,2,4,6})={5,2,4,6,1,Y}=I4
ε-closure(Move(I5,a))={5,3,1,6,Y}=I6
ε-closure(Move(I5,b))={5,2,4,6,1,Y}=I4
ε-closure(Move(I6,a))={5,3,1,2,6,Y}=I3
ε-closure(Move(I6,b))={5,4,6,1,Y}=I5
确定有限自动机的化简—合并等价的状态:
最小化的思路:
(1)将M的状态集合分成一些不相交的子集,
使任何不同的两个子集的状态都是可区别的,
而同一子集中的任何两个状态都是等价的。
(2)最后,在每个子集选出一个代表,同时消去其他等价状态。