课程名:形式语言与自动机

作者: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,定义

  1. δ ′ ( q , ϵ ) = q \delta'(q,\epsilon)=q δ′(q,ϵ)=q。即空串转移到本状态。
  2. 如果 ω ∈ 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

  1. δ ′ ( q , ϵ ) = { q } \delta'(q,\epsilon)=\{q\} δ′(q,ϵ)={q},不允许空转移到别的状态。
  2. δ ′ ( 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的等价性

等价性:接受的语言相相同

  1. DFA与NFA等价:显然,因为DFA⊂NFA
  2. 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)

  1. δ ′ ( q , ϵ ) = ϵ − C L O S U R E ( q ) \delta'(q,\epsilon)=\epsilon-CLOSURE(q) δ′(q,ϵ)=ϵ−CLOSURE(q),允许空转移到一个状态集合
  2. δ ′ ( 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的等价性

  1. NFA与ε-NFA等价:显然,因为NFA⊂ε-NFA
  2. ϵ − 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))

  1. 求 q x q_x qx​的空闭包 ϵ − C L O S U R E ( q x ) \epsilon-CLOSURE(q_x) ϵ−CLOSURE(qx​)。
  2. 遍历 ϵ − 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(不含空转移)后所能到达的状态集合。遍历完成后,将得到的状态集合取并集。
  3. 寻找取并集后的集合的空闭包,认为 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)的步骤如下

  1. Q = Q 1 ∪ { γ } Q=Q_1\cup \{\gamma\} Q=Q1​∪{γ}, γ \gamma γ用于使得原先自动机中会被卡住的转移在求补后被接受。

  2. δ \delta δ:

    1. 继承已有转移。
    2. 被卡死的转移,现在转到 γ \gamma γ状态被接受。
    3. γ \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)=γ

  3. 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ˉ的自动机

b
a
a
a
a,b
q1
q2
q3
q4

再对其求补,得 L L L的自动机为

b
a
b
a
b
a
a,b
q1
q2
q3
q4
γ

形式语言与自动机 Part 3.有限自动机相关推荐

  1. 【第三章 有限自动机与右线性文法】形式语言与自动机第三章个人总结复习笔记分享!(含文件、持续更新...)

    目录 前言 一.总览 二.章节展示 3.1 [有限自动机] 3.2 [不确定的有限自动机] 3.3 [DFA和NFA的等效] 3.4 [有ε转换的不确定的有限自动机] 3.5 [正则集与正则式] 3. ...

  2. 形式语言与自动机 Part.4 正则语言,2DFA,MealyMoore机

    课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...

  3. 形式语言与自动机 Part.5 上下文无关语言与下推自动机(PDA)

    课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...

  4. 形式语言与自动机 Part.6 图灵机

    课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...

  5. 形式语言与自动机 Part.1绪论, Part.2 语言与文法

    课程名:形式语言与自动机 作者:Lupinus_Linn 许可证:CC-BY-NC-SA 3.0 创作共用-署名-非商业性-相同方式共享 署名(英语:Attribution,BY):您(用户)可以复制 ...

  6. 计算机语言学翁富良,形式语言与自动机的关系.doc

    形式语言与自动机的关系 形式语言与自动机的关系研究 新疆师范大学数理信息学院数学03-6班 摘要: 形式语言的直观意义,自动机的直观意义,形式语言的定义,形式语言的特征,语法的分类,自动机的定义,自动 ...

  7. 形式语言与自动机及其在NLP中的应用

    摘要 形式语言与自动机是计算机科学的理论基础,对于计算机科学与技术专业人才的计算思维能力培养极其重要.本文首先从Chomsky谱系出发,对形式语言的概念和类别进行了阐述,然后按照形式文法与自动机之间的 ...

  8. 计算理论 形式语言与自动机_下推式自动机(PDA)| 计算理论

    计算理论 形式语言与自动机 Pushdown Automaton (PDA) is a kind of Automaton which comes under the theory of Comput ...

  9. 【形式语言与自动机】图灵机

    [形式语言与自动机]图灵机 一.图灵机 在经过有限状态机的介绍之后,再来看一种功能更强大的机器. 图灵机基本结构 〉 一条分格的无限长的纸带,每格可容纳一个字符 〉 一个读写头,可以在纸带上移动(可以 ...

最新文章

  1. 使用CURL构建爬虫,抓取百度百科内容
  2. UltraEdit v18及注册
  3. Bzoj 2453: 维护队列 Bzoj 2120: 数颜色 分块,bitset
  4. Postgresql多线程hashjoin(inner join)
  5. sql SET DATEFORMAT对日期处理的影响
  6. Java Vector setElementAt()方法与示例
  7. go int 转切片_一文掌握GO语言实战技能(二)
  8. 如何保护 .NET 应用的安全?
  9. iOS_03_关键字、标识符、注释
  10. Graph Embedding:word2vec更进一步?
  11. 计算机算法设计与分析 大整数乘法
  12. left join 最后一条_一条Mysql查询语句的西天取经之路,你真的了解吗?
  13. 无线网卡的Master,Managed,ad-hoc,monitor模式
  14. java treeset 删除_删除Java TreeSet中的最低元素
  15. SQL获取数据表最新一条记录
  16. 利用哈夫曼编码英文字母表
  17. java g.drawline_菜鸟求教:关于Graphics g中的g.drawLine问题
  18. [转] 花6小时整理的网上最全的系统服务,想PF降到50以下的进,经典中的经典
  19. ArduinoUNO实战-第十三章-步进电机驱动实验
  20. 赤喀高铁正式通车,日立电梯助力赤峰西站开通运营

热门文章

  1. 保险渠道的两极之路——保险新渠道(一)
  2. mysql杀掉sql语句,Mysql使用kill命令解决死锁问题(杀死某条正在执行的sql语句)
  3. Webstorm 2019激活码(有效期至2020年6月)
  4. 数据结构--堆Heap
  5. 攻防世界RE练习区题目总结(1-10)
  6. MindManager21简体中文永久版思维导图
  7. 穴位模型,blender 文件 分享,我免费分享了
  8. 销售人员激励机制怎么定?
  9. MSDC 4.3 接口规范(21)
  10. 企业级网络性能优化 课内8 vlanif2in1