将不确定的有限自动机转换为确定的自动机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
不确定的有限自动机转为确定的自动机
可以识别语言(a|b)*ab 的NFA 的 转换图如图示。
识别(a|b)*ab 的NFA
转换表:每个状态一行,每个输入符号和 (如果需要的话)各占一列,表的第i 行中符号a 的条目是一个状态集合(说得更实际一些,是状态集合的指针),这是NFA 在输入为a 时,状态i 所到达的状态集合。下图是对应的NFA 的转换表。
转换表的优点是可以快速访问给定状态和字符的状态集,缺点是,当输入字母表较大,并且大多数转换是空集时,会占用大量的空间。
转换
例子
识别(a|b)*ab的NFA
这里输入字母表是{a,b},令A={0,1,2,4,7},ε-closure(move(A,a)),在A中,只有2和7有a 转换,分别转到3和8,因此move(A,a)={3,8},故ε-closure(move(A,a))= ε-closure({3,8})
={1,2,3,4,6,7,8},这是因为ε-closure(3)={1,2,3,4,6,7},并且ε-closure(8)={8},记
B={1,2,3,4,6,7,8}。于是,B
)
(δ。
,
A=
a
从图中可看出,在A={0,1,2,4,7}中,只有状态4含b转换到5,故该DFA状态A的b转换到达ε-closure(move(A,b))= ε-closure({5})={1,2,4,5,6,7},记C={1,2,4,5,6,7}。
用新的没有标记的的集合B和C继续这个过程,最终会达到这样:所有的集合(即
DFA的所有状态)都已标记,因为10个状态的集合的不同子集只有102个,一个集合一旦标记就永远是标记的,所以到终止是肯定的。
对于状态B={1,2,3,4,6,7,8},只有2和7有有a转换,分别到3和8,ε-closure(move(B,a))= ε-closure({3,8})={1,2,3,4,6,7,8}.
同样,对状态B={1,2,3,4,6,7,8},只有状态4和8有b转换,分别转到5和9,故
ε-closure(move(B,b))= ε-closure({5,9})={1,2,4,5,6,7,9},记D={1,2,4,5,6,7,9}.
对C={1,2,4,5,6,7},有2和7有a转换,分别转到3和8,因此move(C,a)={3,8},故ε-closure(move(C,a))= ε-closure({3,8})={1,2,3,4,6,7,8}=B.
对C={1,2,4,5,6,7},只有状态4含b转换到5, 故
ε-closure(move(C,b))= ε-closure({5})={1,2,4,5,6,7}=C.
对D={1,2,4,5,6,7,9},只有2和7有a转换,分别转到3和8,因此move(D,a)={3,8},故ε-closure(move(D,a))= ε-closure({3,8})={1,2,3,4,6,7,8}=B.
对D={1,2,4,5,6,7,9},只有状态4含b转换到5, 故ε-closure(move(D,b))= ε-closure({5})={1,2,4,5,6,7}=C.
对本例,可实际构造出4个不同状态的集合是:
A={0,1,2,4,7}
B={1,2,3,4,6,7,8}
C={1,2,4,5,6,7}
D={1,2,4,5,6,7,9}
状态A是开始状态,状态D是仅有的接受状态,完整的转换表如下表:
NFA的转换表
对应的DFA的转换图为: