本文主要是介绍形式语言与自动机——第二章 自动机,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 第二章 目录
- 【2.1】 有穷自动机(有限自动机)
- 【2.2】 不确定有穷自动机(NFA)
- 【2.3】 确定的有穷自动机
- 【2.4】 格局
- 【2.5】 DFA与NFA等效
- 【2.6】 有ε转换的不确定有限自动机
- 【2.7】 有ε转换NFA和无ε转换的NFA的等效
- 【复习】
- 【2.8】正规式和正规集
- 【2.8.1】正规式和正规集
- 【2.8.2】从右线性文法到正规式——联立方程
- 【2.9】右线性文法和正规集
- 【2.10】右线性文法与有限自动机
- 【2.10.1】右线性文法→有限自动机
- 【2.10.2】确定有限自动机→右线性文法
- 【2.11】右线性语言的性质
- 【2.11.1】DFA M的化简
- 【2.11.2】泵浦原理
- 【2.11.3】右线性语言的封闭性
- 【2.11.4】有限自动机的可解问题(判定问题)
- 【2.12】双向和有输出的有限自动机
- 【2.12.1】双向有限自动机
- 【2.12.2】有输出的FA
第二章 目录
【2.1】 有穷自动机(有限自动机)
我们来回顾一下文法与自动机的区别:
- 文法:对语言的有穷说明
- 识别器:有穷的说明无穷语言的一种方法,最简单的识别器就是有穷自动机
文法可以建模,但是文法不能有效地编程实现,因此引出了有穷自动机。
有穷自动机不能定义所有由文法定义的语言,它所能定义的语言是3型文法。
- 第一项:状态集
- 第二项:字母表,可以理解文自动机中的终结符集合
- 第三项:得儿塔,映射关系(要强调的是,如果是德尔塔’,代表输入的是一个字而不是一个字母)
- 第四项:s0起始状态、初态,是S的成员
- 第五项:终止状态集,F是S的子集
【2.2】 不确定有穷自动机(NFA)
它的特点是,对于一个状态Si,经过函数变换,它的结果是不确定的,有可能会变到Sj,也有可能变到Sk。
注意DFA和NFA的区别,因为NFA可能到达的终止状态有多个,因此是个集合,只要其中一个能满足终止条件即可
【2.3】 确定的有穷自动机
DFA:M = (S, Σ, δ, q0, F)
由于空字的转移不影响当前状态,因此可以省略上角标
【2.4】 格局
为描述FA的工作状态,可用两个信息表明:
- 当前时刻有限自动机所处的状态q
- 当前时刻等待输入的字符串ω
这两者构成一个瞬间描述,称为格局,用(q, ω)表示。
符号“|-”表示连接两个格局,从第一个格局变为第二个格局。
【2.5】 DFA与NFA等效
NFA简单明了,容易编程,但是很难编程实现特性,因为一旦走错(如上图),可能要进行大量回溯。但是DFA很难编程实现,所以我们希望通过NFA来转换为DFA。
DFA、NFA在没有公共转移时是等效的。
由于DFA是NFA的特例,所以DFA能接受的语言,NFA也一定能接受,相反,NFA接受的语言,则能找到一个等效的DFA接受语言。
**定理:**设L(Mn)是接受的语言,则存在DFA Md接受L(Md),满足L(Md) = L(Mn)。
【2.6】 有ε转换的不确定有限自动机
前面定义的NFA M,当有空串ε输入时,并不能进行状态转换,而且NFA也不能接受空串,除非NFA的初态也是终态,下面的NFA,在输入空串ε时,也能进行状态转换。
虽然经过之前的学习,我们知道了理论上是不允许出现空串的,但实际中,如果不允许空串的出现,会很难以实现。
引入概念“ε闭包,又写作ε-closure()”
简单来说q状态的ε闭包就是q经过零个、一个或多个空字符串所能达到的下态的集合。
定理:ε-closure({q1, q2}) = ε-closure(q1) + ε-closure(q2)
这里要注意Ia的定义,通俗讲是指经过弧a所能到达所有空字的转移的下态的集合
例:
【2.7】 有ε转换NFA和无ε转换的NFA的等效
其中,“当ε-closure(q0)含F的一个状态”,意思就是说,原自动机是否能识别空字ε。识别就是能不能从初态由ε到达终态。
例子:
【复习】
我们来看底下这张图,老师先讲了无空字转移的FA分为NFA和DFA,他们两者是可以转换的,我们的目的一般是要得到DFA。
但后面又讲到,在实际中是很难不使用空字的,因此我们的解决思路是,先把带空字的NFA转换为不带空字的NFA,然后再转换为DFA,我们今天要讲的就是:将带空字的NFA转换为带空字的DFA(也有可能是将带空字的NFA转换为不带空字转移的DFA,这里是老师画错了还是口误?)。
【2.8】正规式和正规集
【2.8.1】正规式和正规集
设G为正规式,则L(G)是它可以识别的正规集。
- 空字、空集是正规式(正规式是一个模型,可以识别正规集,相当于自动机),分别表示的正规集是{空字},空集。
- 任意一个字母表的成员α是正规式,表示的正规集是{α}
- 若A、B是正规式,则A、B的正规运算也是正规式,比如A或B,A连接B,A的闭包,B的闭包等。若A、B是正规式,表示的正规集是L(A)、L(B),且L(A)、L(B)的集合运算也是正规集。
一些运算
【2.8.2】从右线性文法到正规式——联立方程
什么是右线性文法?推导出的式子如果包含非终结符,只能有一个且一定在最右边。
右线性文法RG、正规式R。
【2.9】右线性文法和正规集
我们想要让右线性文法RG、自动机FA、正规式R三者之间相互转换。上一小节中,我们已经讨论了RG如何到R,使用的是联立方程法。
如果我们已知两个右线性文法所识别的对象(语言集),我们希望构造一个新的右线性文法,新右线性文法识别的对象(语言集)是这两个右线性文法识别的对象(语言集)的或。
我们采取先构造、再证明的方法。
如果,一个语言是正规集,那么它一定可以通过上图的方法构造一个闭包为右线性文法。
【2.10】右线性文法与有限自动机
【2.10.1】右线性文法→有限自动机
至此,我们已经知道了,右线性文法和正规集之间的互相转换。现在我们来讨论,右线性语言与有限自动机的关系,它们如何等价转换?因为自动机容易编程实现。
非终结符 - 状态 + {H},引入吸纳状态,H是新的终态表示,因为文法没有识别态的概念。
q0 = S
为了自动机能识别空字,我们引入“当S → e 包含于 P”。当文法能识别空字,F 要包含S,否则不包含。
反过来看最后两行,如果A接受a映射到B,则原式应该属于P。
如果非终结符A,接收小a,到达新终结态H,则原式应该属于P。
证明:
例1:
B输入a有两种可能。具有不确定性,推导式理应用属于符号,不应用等号,这里简写了。
【2.10.2】确定有限自动机→右线性文法
【2.11】右线性语言的性质
【2.11.1】DFA M的化简
找一个状态数比DFA M少的DFA M1,且满足L(M) = L(M1),称为对M的化简。
如何化简?
- 将M的Q,按终止态和非终止态分成两个子集。
- 将基本划分再不断细分
- 删去M1中不可达状态,得最小化的DFA
【2.11.2】泵浦原理
利用泵浦原理可以证明某个语言不是正规集。可以得出哪些问题不可以用正规集或文法或自动机来建模。
用途:泵引理给出一个语言是正规语言的必要条件。
泵引理:
- 如果L是Σ上的正规 语言,则存在一个正整数N(与L(句子长度)有关)。
- 略
【2.11.3】右线性语言的封闭性
之前我们用文法证明了xxxxx的各种运算也是封闭的,接下来就用自动机证明它们是封闭的,而且补集也是封闭的。
连接、或、闭包、补、交、差集。
【2.11.4】有限自动机的可解问题(判定问题)
【2.12】双向和有输出的有限自动机
ppt 第72页
- 双向有限自动机
- 有输出的FA
有限自动机的类型很多,下面介绍双向有限 自动机和有输出的自动机,因为它们有用。
【2.12.1】双向有限自动机
【2.12.2】有输出的FA
-
米兰机
输出与输入有关 -
摩尔机
输出只与状态有关
这篇关于形式语言与自动机——第二章 自动机的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!