自动机理论与应用

说明

本文主要关注正则语言和上下文无关语言
正则表达式教程

绘图软件(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.下推自动机在交,差,补下不闭合

posted @ 2021-09-26 15:05  XDU18清欢  阅读(565)  评论(0)    收藏  举报