形式语言与自动机 Part 3.有限自动机
课程名:形式语言与自动机
作者:Lupinus_Linn
许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享
- 署名(英语:Attribution,BY):您(用户)可以复制、发行、展览、表演、放映、广播或通过信息网络传播本作品;您必须按照作者或者许可人指定的方式对作品进行署名。
- 非商业性使用(英语:Noncommercial,NC):您可以自由复制、散布、展示及演出本作品;您不得为商业目的而使用本作品。
- 相同方式共享(英语:Sharealike,SA):您可以自由复制、散布、展示及演出本作品;若您改变、转变或更改本作品,仅在遵守与本作品相同的许可条款下,您才能散布由本作品产生的派生作品。(参见copyleft。)
引用:
- 本文中部分文字与图片引用自北京邮电大学计算机学院王柏教授的《形式语言与自动机》课程课件。
- 绪论中的证明方法部分引自清华大学王生原老师课件。
- 部分题目插图引用自北京邮电大学出版社《形式语言与自动机 第二版》教材。
在此一并表示感谢,并不做商业用途。
本笔记所有内容的传送门
Part.1绪论, Part.2 语言与文法
Part 3.有限自动机
Part.4 正则语言,2DFA,Mealy&Moore机
Part.5 上下文无关语言与下推自动机(PDA)
Part.6 图灵机
文章目录
- Part 3.有限自动机
- 3.1 五要素
- 3.2 一个DFA的定义
- 3.3 状态转移图
- 3.4 状态转移表
- 3.5 字符串转移函数 δ ′ \delta' δ′
- 3.6 DFA接受的语言
- 3.7 格局
- 3.8 有限自动机的设计
- 3.8.1 识别所有由奇数个a和奇数个b组成的字符串
- 3.8.2 识别包含000子串的语言
- 3.8.3 识别字符串代表的数字能被3整除的语言
- 3.8.4 长度为1-3 个字符且字母为首的语言
- 3.9 NFA的五要素
- 3.10 NFA的字符串转移函数 δ ′ \delta ' δ′
- 3.11 NFA接受的语言
- 3.12 NFA与DFA的等价性
- 3.13 子集构造法
- 3.14 ϵ − N F A \epsilon-NFA ϵ−NFA的五要素
- 3.15 ϵ − C L O S U R E \epsilon-CLOSURE ϵ−CLOSURE
- 3.16 ϵ − N F A \epsilon-NFA ϵ−NFA的字符串转移函数 δ ′ \delta' δ′
- 3.17 ϵ − N F A \epsilon-NFA ϵ−NFA与 N F A NFA NFA的等价性
- 3.18 ϵ − N F A \epsilon-NFA ϵ−NFA的消空
- 3.19 自动机的求补
Part 3.有限自动机
- 具有离散输入输出系统的一种数学模型 (可以没有输出,比较特殊的也可以没有输入).
- 有限的状态
- 状态+输入→状态转移
- 每次转换的后继状态都唯一 → DFA,每次转换的后继状态不唯一→NFA
3.1 五要素
- 有限状态集 Q Q Q
- 有限输入符号集 T T T
- 转移函数 δ : Q × T → Q \delta:Q×T \rarr Q δ:Q×T→Q:
- 一个开始状态 q 0 , q 0 ∈ Q q_0,q_0\in Q q0,q0∈Q
- 一个终态集合 F , F ⊆ Q F,F\subseteq Q F,F⊆Q
3.2 一个DFA的定义
- M = ( Q , T , δ , q 0 , F ) M= (Q, T, δ, q0 , F) M=(Q,T,δ,q0,F)
- Q = { q 0 , q 1 , q 2 , q 3 } Q = \{q0 , q1 , q2 , q3 \} Q={q0,q1,q2,q3}
- T = { 0 , 1 } T = \{0, 1 \} T={0,1}
- δ ( q 0 , 0 ) = q 2 , δ ( q 0 , 1 ) = q 1 \delta(q0 ,0) = q2 , \delta(q0 ,1) = q1 δ(q0,0)=q2,δ(q0,1)=q1
δ ( q 1 , 0 ) = q 3 , δ ( q 1 , 1 ) = q 0 \delta(q1 ,0) = q3 , \delta(q1 ,1) = q0 δ(q1,0)=q3,δ(q1,1)=q0
δ ( q 2 , 0 ) = q 0 , δ ( q 2 , 1 ) = q 3 \delta(q2 ,0) = q0 , \delta(q2 ,1) = q3 δ(q2,0)=q0,δ(q2,1)=q3
δ ( q 3 , 0 ) = q 1 , δ ( q 3 , 1 ) = q 2 \delta(q3 ,0) = q1 , \delta(q3 ,1) = q2 δ(q3,0)=q1,δ(q3,1)=q2 - q 0 q0 q0
- F = { q 0 , q 3 } F = \{q0 , q3 \} F={q0,q3}
3.3 状态转移图
3.4 状态转移表
3.5 字符串转移函数 δ ′ \delta' δ′
δ ′ : Q × T ∗ → Q \delta' :Q\times T^*\rarr Q δ′:Q×T∗→Q
对于任何 q ∈ Q q\in Q q∈Q,定义
- δ ′ ( q , ϵ ) = q \delta'(q,\epsilon)=q δ′(q,ϵ)=q。即空串转移到本状态。
- 如果 ω ∈ T ∗ , a ∈ T \omega \in T^*,a\in T ω∈T∗,a∈T,定义 δ ′ ( q , ω a ) = δ ( δ ′ ( q , ω ) , a ) \delta'(q,\omega a)=\delta(\delta'(q,\omega),a) δ′(q,ωa)=δ(δ′(q,ω),a)。即非空字符串 ω a ∣ \omega a| ωa∣可以看作是其前长度为 ∣ ω ∣ |\omega| ∣ω∣的前缀$\omega $和长度为 1 1 1的字符 a a a组成。
对于DFA,单个字符使用 δ \delta δ或者 δ ′ \delta' δ′进行转移的结果相同。
3.6 DFA接受的语言
被DFA接收的字符串: 输入结束后使DFA的状态到达终 止状态。否则该字符串不能被DFA接收.
DFA接收的语言: 被DFA接收的字符串的集合. L ( M ) = { ω ∣ δ ′ ( q 0 , ω ) ∈ F } L(M) = \{ ω | \delta'( q0 , ω) \in F \} L(M)={ω∣δ′(q0,ω)∈F}
3.7 格局
- 有限自动机工作过程的瞬时描述,由当前状态q,待输入字符串ω构成的二元组(q,ω)表示,称为格局。
- 初始格局:(q0, ω)
- 终止格局: (q,ε), q∈F
- 用格局描述的推导序列:(q0,001010)┝ (q2,01010) ┝ (q0,1010) ┝ (q1,010) ┝ (q3,10) ┝ (q2,0) ┝ (q0,ε)
- 格局数量是无限的。
- 有限状态自动机是无记忆的,其跳转到的状态只与当前状态和输入的字符有关,和以前输入的字符无关。
3.8 有限自动机的设计
3.8.1 识别所有由奇数个a和奇数个b组成的字符串
- 不需要记住所看到的整个字符串,只需记住至此所看到 的a、b个数是偶数还是奇数。
3.8.2 识别包含000子串的语言
DFA
NFA
3.8.3 识别字符串代表的数字能被3整除的语言
- 一个十进制数除以3,余数只能为0、1、2。将其设计为状态。
- 状态q0表示已读入的数字和除3余0
- 状态q1表示已读入的数字和除3余1
- 状态q2表示已读入的数字和除3余2
3.8.4 长度为1-3 个字符且字母为首的语言
D F A DFA DFA
ϵ − N F A \epsilon-NFA ϵ−NFA
3.9 NFA的五要素
- NFA是一个五元组, M = ( Q , T , δ , q 0 , F ) M=(Q,T,δ,q0,F) M=(Q,T,δ,q0,F). 其中 δ : Q × T → 2 Q δ:Q×T\rarr2^Q δ:Q×T→2Q,其余与DFA相同.
- NFA的一个状态接受一个字符后转移到一个状态集合,DFA仅仅转移到单个状态。
- 如果接收一个字符串后NFA进入一个状态集, 而此集合中包含一个以上F中的状态, 则称NFA接收该字符串.
3.10 NFA的字符串转移函数 δ ′ \delta ' δ′
δ ′ : Q × T → 2 Q \delta':Q\times T\rarr 2^Q δ′:Q×T→2Q
- δ ′ ( q , ϵ ) = { q } \delta'(q,\epsilon)=\{q\} δ′(q,ϵ)={q},不允许空转移到别的状态。
- δ ′ ( q , ω a ) = P , P = { p ∣ ∃ r ∈ δ ′ ( q , ω ) ∧ δ ( r , a ) } \delta'(q,\omega a)=P,P=\{p | \exists r\in \delta'(q,\omega)∧ \delta(r,a)\} δ′(q,ωa)=P,P={p∣∃r∈δ′(q,ω)∧δ(r,a)},即先接受 ω \omega ω进行转移,得到一个集合,然后将该集合内的状态再接受 a a a进行转移,将所得状态集并起来。
3.11 NFA接受的语言
- L ( A ) = { ω ∣ δ ′ ( q 0 , ω ) ∩ F ≠ ∅ } L(A)=\{\omega | \delta'(q_0,\omega)\cap F\ne \empty\} L(A)={ω∣δ′(q0,ω)∩F=∅}
- 即NFA接受字符串后转移到的状态集合包含F中的状态。
3.12 NFA与DFA的等价性
等价性:接受的语言相相同
- DFA与NFA等价:显然,因为DFA⊂NFA
- NFA于NFA等价:使用子集构造法
3.13 子集构造法
精髓:将NFA的状态集合看做DFA的单个状态
方法:设 L 是某个 N F A N = ( Q N , T , δ N , q 0 , F N ) NFA\ N = (Q_N, T, \delta_N , q_0 , F_N) NFA N=(QN,T,δN,q0,FN) 的语言, 则 存在一个 D F A M = ( Q D , T , δ D , { q 0 } , F D ) DFA\ M =(Q_D, T, \delta_D , \{q0 \}, F_D ) DFA M=(QD,T,δD,{q0},FD), 满足 L ( M ) = L ( N ) = L L(M) = L(N) = L L(M)=L(N)=L.
其中
- Q D = 2 Q N = { R ∣ R ⊆ Q N } Q_D=2^{Q_N}=\{R|R\subseteq Q_N\} QD=2QN={R∣R⊆QN},即DFA的状态集合是NFA的状态的幂集(可以去掉无用状态)。
- δ D ( R , a ) = ∪ q ∈ R δ N ( q , a ) \delta_D(R,a)=\cup_{q\in R}\ \delta_N(q,a) δD(R,a)=∪q∈R δN(q,a),即DFA的转移是NFA转移的并集。
- F D = { R ∣ R ⊆ Q N ∧ R ∩ F N ≠ ∅ } F_D=\{R|R\subseteq Q_N ∧ R\cap F_N\ne \empty\} FD={R∣R⊆QN∧R∩FN=∅},即新的DFA的可接受状态集是包含至少一个NFA可接受状态的集合的集合。
例子:
3.14 ϵ − N F A \epsilon-NFA ϵ−NFA的五要素
ϵ − N F A \epsilon-NFA ϵ−NFA是一个五元组 A = ( Q , T , δ , q 0 , F ) A=(Q,T,δ,q0,F) A=(Q,T,δ,q0,F)
- 与NFA的区别: δ : Q × ( T ∪ { ϵ } ) → 2 Q \delta:Q\times(T\cup \{\epsilon\})\rarr 2^Q δ:Q×(T∪{ϵ})→2Q,即可以使用空串转移。
3.15 ϵ − C L O S U R E \epsilon-CLOSURE ϵ−CLOSURE
状态 q 的ε - 闭包,记为 ε - CLOSURE 或 ECLOSE ,定义为从q 经所有的ε路径可以到达 的状态(包括q自身)。
即从q开始,经过零次或多次空转移可以到达的状态集合。
3.16 ϵ − N F A \epsilon-NFA ϵ−NFA的字符串转移函数 δ ′ \delta' δ′
δ ′ : Q × ( T × { ϵ } → 2 Q ) \delta':Q\times (T\times\{\epsilon\}\rarr 2^Q) δ′:Q×(T×{ϵ}→2Q)
- δ ′ ( q , ϵ ) = ϵ − C L O S U R E ( q ) \delta'(q,\epsilon)=\epsilon-CLOSURE(q) δ′(q,ϵ)=ϵ−CLOSURE(q),允许空转移到一个状态集合
- δ ′ ( q , ω a ) = ϵ − C L O S U R E ( δ ( δ ′ ( q 0 , ω ) , a ) \delta'(q,\omega a)=\epsilon-CLOSURE(\delta(\delta'(q_0,\omega),a) δ′(q,ωa)=ϵ−CLOSURE(δ(δ′(q0,ω),a),即先按接受 ω \omega ω进行 δ ′ \delta' δ′转移,得到一个集合,然后将该集合内的状态再接受字符 a a a进行转移,将所得状态集并起来,再求其空闭包.
3.17 ϵ − N F A \epsilon-NFA ϵ−NFA与 N F A NFA NFA的等价性
- NFA与ε-NFA等价:显然,因为NFA⊂ε-NFA
- ϵ − N F A \epsilon-NFA ϵ−NFA于NFA等价:消空
3.18 ϵ − N F A \epsilon-NFA ϵ−NFA的消空
精髓:把 q x q_x qx接受由字符 a a a和若干个空串ε能转移到的所有状态找出来,视为 q x q_x qx接受 a a a转移到这些状态的集合。此时空转移是冗余的,可以全部删掉。
方法:遍历原 ϵ − N F A \epsilon-NFA ϵ−NFA的非空转移( q x q_x qx接收字符 a a a转移到某个状态集合),做以下操作:(实际上在求 δ ϵ − N F A ′ ( q x , a ) \delta_{\epsilon-NFA}'(q_x,a) δϵ−NFA′(qx,a))
- 求 q x q_x qx的空闭包 ϵ − C L O S U R E ( q x ) \epsilon-CLOSURE(q_x) ϵ−CLOSURE(qx)。
- 遍历 ϵ − C L O S U R E ( q x ) \epsilon-CLOSURE(q_x) ϵ−CLOSURE(qx)的每个状态 q i q_i qi,找出 q i q_i qi接收字符 a a a(不含空转移)后所能到达的状态集合。遍历完成后,将得到的状态集合取并集。
- 寻找取并集后的集合的空闭包,认为 q x q_x qx接受 a a a后直接到达该空闭包代表的集合,删去所有用到的空转移。
最后,还要对接受状态集合进行修改
F N F A = { F ϵ − N F A ∪ { q 0 } , ϵ − C L O S U R E ( q 0 ) ∩ F ≠ ∅ F ϵ − N F A , o t h e r w i s e F_{NFA}=\begin{cases}\ F_{\epsilon-NFA}\cup \{q_0\},\epsilon-CLOSURE(q_0)\cap F\ne \empty\\F_{\epsilon-NFA},otherwise\end{cases} FNFA={ Fϵ−NFA∪{q0},ϵ−CLOSURE(q0)∩F=∅Fϵ−NFA,otherwise
例子:
3.19 自动机的求补
精髓:自动机求补其实是语言求补,有的语言正面设计自动机比较麻烦,可以考虑其补语言后,再对该自动机求补。
方法:对于 L 1 L_1 L1,构造 L ˉ \bar L Lˉ的自动机 M = ( Q , T , δ , q 0 , F ) M=(Q,T,\delta,q_0,F) M=(Q,T,δ,q0,F)的步骤如下
Q = Q 1 ∪ { γ } Q=Q_1\cup \{\gamma\} Q=Q1∪{γ}, γ \gamma γ用于使得原先自动机中会被卡住的转移在求补后被接受。
δ \delta δ:
- 继承已有转移。
- 被卡死的转移,现在转到 γ \gamma γ状态被接受。
- γ \gamma γ状态接受任何字符都在原地转圈。
δ 1 ( q , a ) = δ ( q , a ) δ 1 ( q , a ) = ∅ → δ ( q , a ) = γ δ ( γ , T ) = γ \delta_1(q,a)=\delta(q,a)\\ \delta_1(q,a)=\empty\to\delta(q,a)=\gamma\\ \delta(\gamma,T)=\gamma δ1(q,a)=δ(q,a)δ1(q,a)=∅→δ(q,a)=γδ(γ,T)=γ
F = ( Q 1 − F 1 ) ∪ { γ } F=(Q_1-F_1)\cup \{\gamma\} F=(Q1−F1)∪{γ}。原自动机不被接受的状态被接收,增加 γ \gamma γ被接受。
例子: T = { a , b } T=\{a,b\} T={a,b},L中的任意三个连续符号中最多包含2个a,设计接受它的自动机。
分析:
可以先构造L的补语言 L ˉ \bar L Lˉ的自动机。
L ˉ \bar L Lˉ的描述是:存在连续的三个字符,其包含大于2个a。
这句话可以转述为:存在aaa子串。
L ˉ \bar L Lˉ的自动机很容易画出。
(注:区分连续的字符和累积的字符:连续的字符失败后要回到开始,累积的字符失败后在原地转圈。如果是后缀匹配的话,要找到最长后缀匹配的上一个状态。)
L ˉ \bar L Lˉ的自动机
再对其求补,得 L L L的自动机为
形式语言与自动机 Part 3.有限自动机相关推荐
- 【第三章 有限自动机与右线性文法】形式语言与自动机第三章个人总结复习笔记分享!(含文件、持续更新...)
目录 前言 一.总览 二.章节展示 3.1 [有限自动机] 3.2 [不确定的有限自动机] 3.3 [DFA和NFA的等效] 3.4 [有ε转换的不确定的有限自动机] 3.5 [正则集与正则式] 3. ...
- 形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.5 上下文无关语言与下推自动机(PDA)
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.6 图灵机
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 形式语言与自动机 Part.1绪论, Part.2 语言与文法
课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...
- 计算机语言学翁富良,形式语言与自动机的关系.doc
形式语言与自动机的关系 形式语言与自动机的关系研究 新疆师范大学数理信息学院数学03-6班 摘要: 形式语言的直观意义,自动机的直观意义,形式语言的定义,形式语言的特征,语法的分类,自动机的定义,自动 ...
- 形式语言与自动机及其在NLP中的应用
摘要 形式语言与自动机是计算机科学的理论基础,对于计算机科学与技术专业人才的计算思维能力培养极其重要.本文首先从Chomsky谱系出发,对形式语言的概念和类别进行了阐述,然后按照形式文法与自动机之间的 ...
- 计算理论 形式语言与自动机_下推式自动机(PDA)| 计算理论
计算理论 形式语言与自动机 Pushdown Automaton (PDA) is a kind of Automaton which comes under the theory of Comput ...
- 【形式语言与自动机】图灵机
[形式语言与自动机]图灵机 一.图灵机 在经过有限状态机的介绍之后,再来看一种功能更强大的机器. 图灵机基本结构 〉 一条分格的无限长的纸带,每格可容纳一个字符 〉 一个读写头,可以在纸带上移动(可以 ...
最新文章
- 使用CURL构建爬虫,抓取百度百科内容
- UltraEdit v18及注册
- Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset
- Postgresql多线程hashjoin(inner join)
- sql SET DATEFORMAT对日期处理的影响
- Java Vector setElementAt()方法与示例
- go int 转切片_一文掌握GO语言实战技能(二)
- 如何保护 .NET 应用的安全?
- iOS_03_关键字、标识符、注释
- Graph Embedding:word2vec更进一步?
- 计算机算法设计与分析 大整数乘法
- left join 最后一条_一条Mysql查询语句的西天取经之路,你真的了解吗?
- 无线网卡的Master,Managed,ad-hoc,monitor模式
- java treeset 删除_删除Java TreeSet中的最低元素
- SQL获取数据表最新一条记录
- 利用哈夫曼编码英文字母表
- java g.drawline_菜鸟求教:关于Graphics g中的g.drawLine问题
- [转] 花6小时整理的网上最全的系统服务,想PF降到50以下的进,经典中的经典
- ArduinoUNO实战-第十三章-步进电机驱动实验
- 赤喀高铁正式通车,日立电梯助力赤峰西站开通运营