自动机理论与应用
说明
本文主要关注正则语言和上下文无关语言
正则表达式教程
绘图软件(JFLAP)
这东西是某个大学开发出来的自动机教学软件,很实用,各种自动机专业户
JFLAP官网
1.java环境 需要自己配置JAVA环境变量
2.百度云盘 JFLAP.jar 提取码 : u63e
正则语言
可被有限状态自动机、正则表达式、正则文法表示,三种描述方法等价
在并、接合、Kleene星号、补、交、差、逆、字母替换运算下闭合
有限状态自动机
每个正则语言有唯一最简DFSM
1.如何最小化DFSM
Moore算法(子集划分法)
记n为状态数量,\(|\sum|\)为字符集大小
最坏复杂度\(O(n^2|\sum|)\),期望复杂度\(O(nlog(n)|\sum|)\),log(n)意味着平均条件下,迭代的深度只有log(n),单次迭代的复杂度是\(O(n|\sum|)\)
把状态划分为终态和非终态集合
不停的划分集合 :如果同一集合中的状态s1,s2,move(s1,ch)、move(s2,ch)不在同一组,那么它们就是可区分的
分裂该集合,继续循环,直到所有集合无法区分,划分即完毕
然后按照原转移关系,在新DFSM上画出转移边即可
Hopcroft算法
看不懂论文,这算法是Moore算法的一个改进,优化了复杂度
有一说一网上基本没有Hopcroft算法的实现,需要在论文里面找
Brzozowski算法
一句话:先反着做一遍NFA转DFA, 然后再正着做一遍NFA转DFA
一遍消除冗余前缀,一遍消除冗余后缀
因为你一般都先构造NFA,再转化到DFA,做两次就能最小化...这个办法其实很方便
Brzozowski (1963) 注意到,将DFA的边反转将产生一个原语言反序的NFA。再将这个NFA用标准的幂集构造法(只构造转换后DFA的可达状态)转换为DFA,就会产生原语言反序的最小DFA。重复反转操作,就可以得到原语言的最小DFA。Brzozowski算法在最坏情况下的复杂度是指数的,因为存在这样的正则语言,其反序的最小DFA的规模是原语言DFA规模的指数大。但通常来说这个算法比最坏情况表现得要好
2.NDFSM如何转DFSM
首先定义ε-closure({states})为,集合中的状态通过若干ε边能抵达的所有转态集合
记 T0 = ε-closure(初始状态) = {0,1,2,4,7}
move(T0,a) = {3,8}
ε-closure({3,8}) = {1,2,3,4,6,7,8} = T1
状态 | ε-closure(move(Ti,a)) | ε-closure(move(Ti,b)) |
---|---|---|
T0 = | T1 | T2 |
T1 = | T1 | T3 |
T2 = | T1 | T2 |
T3 = | T1 | T4 |
T4 = | T1 | T2 |
T0就是起始状态,包含原终态的就是,新终态 |
3.正则表达式和NDFSM的转换
正则表达式转NDFSM
这比较简单
NDFSM转正则表达式
过程可能很复杂,比如
的正则表达式是
((aa+ab(bb)*ba)*(b+ab(bb)*a)(a(bb)*a)*(b+a(bb)*ba))*(aa+ab(bb)*ba)*(b+ab(bb)*a)(a(bb)*a)*
4.正则文法和DFSM的转换
5.有限状态自动机的一些操作
求补:把终态变为非终态,非终态变为终态即可
反串:把终态变为非终态,同时反向所有边
正则文法
很少用,因为限制很多,只允许形如
\(S\rightarrow a,S\rightarrow ε,T \rightarrow aS\)
的文法
上下文无关语言
上下文无关文法
S -> aSb
S -> ab
上下文有关文法
aSb -> aaSbb
S -> ab
如何简化上下文无关文法
1.寻找和删除不生产的变量
2.寻找和删除不可达的变量
如何消除歧义性
歧义性指存在一个字符串,可以生成多颗分析树
存在固有歧义性
1.消除ϵ规则
如\(S \rightarrow ϵ\)
2.消除堆成规则
如\(E \rightarrow E + E\)
3.导致歧义性连接两个可选后缀的规则集
比如悬垂else
范式
下推自动机
有很多定义,本质上多种定义都等价
拥有两个栈或者一个队列的下推自动机等价于图灵机
一种定义
允许一次压入或者弹出多个或者0个字符
当且仅当,到达终态并且栈为空的时候,接受该串
常见的变形定义:允许栈不为空时接受,或者在栈为空时直接接受,或者每次可以压入弹出一个/多个字符
基本定理
1.不能确定一个下推自动机是不是最简的,
2.非确定性下推自动机不能并行模拟
3.不能把一个非确定性下推自动机转换为确定性下推自动机
4.每个下推自动机对应一个等价上下文无关文法
5.下推自动机在并,接合,Kleene星号,逆,字母替换时闭合
6.下推自动机在交,差,补下不闭合
本文来自博客园,作者:XDU18清欢,转载请注明原文链接:https://www.cnblogs.com/XDU-mzb/p/15338200.html