2.3有限自动机
NFA:是不确定的有限自动机。DFA:确定的有限自动机。
S是有限状态集合。S代表的是状态,比如说0状态,1状态,a状态等等。
∑是字母表,它的每一个元素都是输入字符。比如说从1状态到a状态,输入k字符可以转换状态,那么k就是输入字符。
f是一个函数,当前状态是S,输入一个a之后状态转换为S'.S'是S的后继状态.
S0是一个初态.最开始的状态。唯一的初态。确定的有限自动机中只有一个初态。
Z是S的子集。Z不只一个元素,可以有多个元素。Z代表终态。Z是终态集,可以有多个状态都是终态。
{S,A,B,C,f}是有限状态集。{1,0}是字符集。F是函数。S是初态。{f}是终态集。终态集只包含了一个元素f。终态用双圈标注。理解构造DFA的过程。
下面是不确定的有限自动机NFA。
不确定的有限自动机中S0是一个集合。NFA可以有多个初态。DFA是有确定的初态,NFA是有不确定的初态,初态可能有多个。
NFA转化为DFA.
子集法将其变为确定的DFA.
S是初态,Z是终态。ε是空,不需要输入任何字符就可以从S到1状态。1、2、3也可以是初态。S、1、2、3都是初态。ε也是NFA的一大特色。NFA允许出现ε.3输入0之后可以到5也可以到终态Z.产生了不确定因素,从一个状态输入一个值转到了其他几个状态去了。
表要结合图来看。I是当前状态,I0是当I输入0之后得到的状态。I1代表当前状态输入1之后得到的状态。I应该是从初态集开始的。初态集是S、1、2、3.从3输入0可以到4、5、Z。第一步得到了两个结果集{1,3,4,5,Z},{2,3}.第二步从结果集{1,3,4,5,Z}出发,T1={1,3,4,5,Z,6},所以T1不包含的状态是S、2.T3状态是{1,3,4,5,Z}这一个集合在输入1之后能够到达的状态.Z是终态,输入值也不能到任何状态了.所以T3是空集,不含任何元素。
T2求解比较困难。{1,3,4,5,Z}是初态集I输入0之后得到的集合,{2,3}是初态集I输入1之后得到的集合。{S,1,2,3}编号为0,{1,3,4,5,Z}编号为1,{2,3}编号为2.只要是和初态集I不一样就可以将集合编号为1,只要是和编号为1的集合不同就可以将集合编号为2,以此类推。到了第二行找前面编过号的集合哪些没有出现在最左列,0出现在最左列了.1和2都没有.所以选编号为1的集合放在最左列又得到了两个结果集T1和T3.接下来再选编号为2的集合放在最左列,以此类推下去。T2位置原本是T1,但是看到第五行最左边选到了T1.所以T2位置这里不应该是T1,每一个新产生的集合在最左列只能出现一次.但是我们其实还是有办法可以求得T2的.
在最左列出现的集合肯定都是经过推导得到的新的集合.比如说{4,5,Z}是一个新的集合,我们也要给它编号的.{1,3,4,5,6,Z}这个就是T1,{5,Z}也是要给它编号的.然后{6}也是要给它编号的,就这么一些集合.然而{6},{5,Z},{2,3}以及T1都在左边出现了,那么T2就只有唯一的选择{4,5,Z}.就可以确定T2={4,5,Z}.
如何把NFA转换为DFA呢?
把NFA的很多元素归类成了集合,比如说初态S,1,2,3归纳成了一个新的集合I0={S,1,2,3}和新的集合I1={1,3,4,5,Z}.当我们把所有的集合按顺序编号之后,比如说{4,5,Z}编号为3,{6}编号为4,{5,Z}编号为5,T1编号为6.然后就把编号0、1、2、3、4、5、6这些节点画出来.T3是null就不给它定义节点因为它元素是null没有节点.
就这样根据编号的元素构造出一个新的DFA出来.把表中得到的每一个集合看成一个元素,并且给它编号编成一个状态,然后重新来绘制这个图就得到了DFA。
这就是DFA转DFA的过程。
正确答案:
填完整的表格,对这些集合进行编号编成新的状态然后把图画出来。
正规式ab是一种串行关系,所以新添一个状态S3,S1首先到S3再到S2。
正规式a|b是一种并行关系。串行关系ab是有先后次序的关系,并行关系是两条路径随便走一条,因为它是或关系。
正规式a*是任意多个a的串,增加节点S3并且节点到自身有一个自循环。S3输入a之后又还原到原本的位置。S3->S2是ε,到了S3状态相当于到了终态S2,就是随时可以终结它。
不管有多么复杂的正规式都是由这三种正规式组合而构成的。
例题:
(_|a)(_|a|d)*;a代表的并不是一个真正的字符a,它代表的其实也是一个集合。a代表的是字母集,d代表的是数字集.