有限自动机
形式:M=(S,Σ,δ,S0,Z)
S:有限集,每个元素为一个状态;
Σ:有穷字母表,每个元素为一个输入字符;
δ:转换函数,单值对照;
S0:属于S是唯一初态;
Z:一个终极态,可以空缺不写,一般图中双圈或者粗圈为终极态;
有限自动机可以用状态转换图表示
例:
设有限状态自动机:DFA=({S,A,B,C,f},{1,0},δ,S,{f}),
其中:δ(S,0)=B表示从元素S开始输入数字0可以到达元素B;δ(S,1)=A,δ(A,0)=f,δ(A,1)=C,δ(B,0)=C,δ(B,1)=f,δ(C,0)=f,δ(C,1)=f。
根据上述关系可得状态转换图如下:
例:
下图所示为一个有限自动机(其中,A是初态,C是终态),该自动机可以识别(C)。
A:0000 B:1111 C:0101 D:1010
该自动机可以识别的意思是,输入某串数字,可以从初态A到达终态C;
选项A:0000
含义是从初态A开始输入0000可以到达终态C,从初态A开始输入0到达B,再输入0在B循环,继续输入0还是在B循环,无法到达终态C,故排除A;
选项B:1111
含义是从初态A开始输入1111可以到达终态C,从初态A开始输入1在A循环,继续输入1还是在A循环、无法到达终态C,故排除B;
选项C:0101
含义是从初态A开始输入0101可以到达终态C,从初态A开始输入0到达B,再输入1从B到达C,继续输入0从C到达B,再输入1从B到达终态C,故选择C;
选项D:1010
含义是从初态A开始输入1010可以到达终态C,从初态A开始输入1循环A,再输入0到B,继续输入1到达C,最后输入0从C到达B,最终无法到达终态C,故排除D;
正规式
正规式是有限自动机的另外一种表达形式。
例:
下面文法G[S]它无法识别(空(1)选D),此文法对应的正规式为(空(2)选C)。
G[S]: S→aA|bB; A→bS|b; B→aS|a;
空(1)选项A:ababab 选项B:bababa 选项C:abbaab 选项D:babba
无法识别的意思是无法用上述推导式推导出来。
选项D无法得出。
空(2)选项A:(a|b)* 选项B:(ab)* 选项C:(ab|ba)* 选项D:(ab)*(ba)*
公式
(a|b):可以解析出a,也可以解析出b
(a|b)*: *代表循环多次,从0到∞,极限小值可以表达空串;中间可以表达多个或单个a、b的各种组合,例如a,aa,aaa...;b,bb,bbb;ababbabbaa...等无序组合。
(ab)*:表示空串、单个ab、或多个ababababab组合
(ab|ba)*:表示空串、单个ab或单个ba、多个ababab或多个bababa、或者单个或多个ab于ba的任意组合。
(ab)* (ba)*:表示空串、多个或单个ab,然后多个或单个ba,无论单个或者多个此时必须ab组合在前,ba组合在后
第(2)个空的意思是,以下选项哪些正规式可以表示文法G(S)的组合,一个文法的组合一般有多种,例如空(1)中已经出现3种;而文法对应的正规式可以将所有的组合表示出来,但是范围也不宜过大,合适为准。
首先使用排除法,看以下的正规式能否表示(1)中出现的三种组合 ababab、bababa、abbaab。
(2)选项A:
(a|b)* 可以表示空串;单个或多个a;单个或多个b,以及单个或多个abbbaabb任意组合,可以表示ababab、bababa、abbaab,甚至可以表示空(1)中的选项D,可以表示但是范围过于宽泛,暂且保留选项A看后续选项是否有更合适的。
(2)选项B:
(ab)*可以表示空串;单个或多个ab,只可以表示出ababab其他2个表示不出,故排除选项B。
(2)选项C:
(ab|ba)*可以表示空串;单个或多个ab;单个或多个ba;单个或多个ab于ba的任意组合,可以表示出ababab、bababa、abbaab且无法表示出空(1)中选项D,比上述空(2)中选项A的范围要小,更精准,故排除选项A选择选项C。
(2)选项D:
(ab)* (ba)*可以表示空串、单个或多个abba,例如ba空串只有ab可以表示ababab;ab空串只有ba时可以表示bababa,当二者均不空串时只能表示abbaba不能表示abbaab,故排除选项D。