确定有限自动机DFA&非确定有限自动机NFA

Part 1_自动机介绍:

有穷自动机(finite state automata)是一个识别器,它对每个输入的字符做识别和判断,以确定其能到达的最终状态或状态集和路径,有穷自动机分为两类,即不确定的有穷自动机NFA和确定的有穷自动机DFA[1].

例子1:红绿灯系统: G(绿灯亮了的状态);R(红灯亮的状态);Y(黄灯亮的状态)

例子2:零售机(vending machine)。它接受五角和一块的硬币,但是要至少积累到3元才能按下选择,并且只有作出选择才会执行。所以从初始state开始,每一个状态之后都有两种选择:要么投5角,要么投1元;每次投完都会到达一个新的状态(目前投入硬币总数)。

Part 2_专用名词解释:

在介绍DFA和NFA之前,先介绍几个名词:

alphabet 字母表:符号的有限集合。 记作: Σ 例如:{a, b, ... , x, m}

strings 字符串: 通常我们用到建立在 Σ 上的字符串:有穷的符号序列。 例如:对于 Σ={a, b, c}, “ababc” 就是 Σ 上的一个字符串。

languages 语言:通常我们也只用建立在Σ上的语言,语言就是多个字符串的集合。例如 {ababc, ab, bc, ..}

sentences 句子:句子是语言集合中元素(字符串)的另一个称呼。

notation 符号:Σ* 是Σ上所有可能的字符串的集合。例如:Σ={a, b}, Σ* = { ε, a, b, ab, ba}

Part 3_DFA:

DFA: Deterministic Finite State 确定的有穷自动机

  1. 第一种计算模型:用来解决对一个已知字符串,看它是否能被某个自动机所接受。
  2. 一个DFA有有穷个状态(state),主要分为三种状态:
  • 初始状态(initial state):自动机开始的状态;
  • 终止状态(final state):一个DFA至少有一个终止状态;
  • 中间状态。

「状态间转换的公式: 状态 x 输入字符 --> 状态」

3. DFA的定义:(共5部分)

A = ( Σ, S, s0, F, N )

  • Σ: 输入字母表(alphabet),是一个输入字符的集合。
  • S:状态的集合
  • s0: 初始状态
  • F:终止状态集合 F ⊆ S
  • N:转换公式 N:S×Σ → S

4. 「“确定”意味着对于一个输入字符,只有唯一的可能状态」

5. 例子:


从上图我们可以得到一个转换公式表格:


单步表示: N (S0, 0): 是自动机从s0状态,读取符号0之后的状态。从表格中可以看出N (S0, 0) = S1.

多步表示: N (N (S0, 0), 1) = S2.

** 重要定理: 对S中所有的状态s,所有 Σ*中的字符串 α,β, 有:

N*(s, αβ) = N*(N*(s, α), β)。

6. 最终状态公式 (eventual state function):

从任意一个状态,经过一个string到达的最终状态的所有可能情况。

表达为: N* : S × Σ* → S

7. 如果一个字符串从一个DFA的初始状态出发,能在某一个终止状态结束,那这个字符串就被这个DFA所接受。所有的这种字符串的集合就是这个自动机的语言(language)。

8. 自动机等同:如果两个自动机接受相同的语言,就说这两个自动机相等。

9. 状态等同:如果对于所有的输入字符串 w, 有并且只有

N*(Sj,w) ∈ F 并且N*(Sk,w) ∈ F (F是final state的集合)

注意,一个非终止状态永远不可能与一个终止状态等同。

10. 状态消除

1)等同状态消除:如果两个状态等同,那么其中一个可以被消除,来简化自动机。

以上面9.为例,Sk可以被消除, 消除Sk之后的新的自动机A' = (Σ, S', s0, F', N' )

S' = S-Sk

F‘ = F-Sk

N‘(s,w)= (if N(s,w)=Sk then Sj

else N(s,w))

(注意这里有个前提,Sk不能是初始状态,因为初始状态不能被消除。)

2) 无法到达的状态消除:如果一个状态是无法从初始状态到达的,那么它可以被消除,例如下图的S3。


11. 这里有一个传统的分组算法,可以用来最简化自动机,这里不做详细介绍。

Part 4_NFA:

1. NFA(Non-Deeterministic Finite State Automata)不确定的有穷自动机: 对一个输入符号,有两种或两种以上可能对状态,所以是不确定的。

2. NFA可以转换成DFA,NFA和DFA的主要区别在于[1]:

1)DFA没有输入空串之上的转换动作;

2)对于DFA,一个特定的符号输入,有且只能得到一个状态,而NFA就有可能得到一个状态集;

3. NFA的定义:(共5部分)

A = ( Σ, S, s0, F, N ) (具体表示内容与DFA相同)

4. 对于输入字符串w,如果满足 ∃ s ∈F. R*(s0, w, s), 那么w是被自动机所接受的。 所有被该自动机接受的字符串就是这个自动机的语言

5. 定理:如果语言L被一个NFA所接受,那么一定存在一些DFA也接受这一语言L。

确定有限自动机DFA非确定有限自动机NFA相关推荐

  1. 【编译原理】确定有限自动机与非确定有限自动机

     

  2. 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

    文章目录 一.非确定性自动机 计算过程 ( 计算树 ) 二.判定 非确定性自动机 接受的字符串 三.自动机 设计要求 四.非确定性有限自动机设计 五.非确定性有限自动机 与 确定性 有限自动机 比较 ...

  3. 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★

    文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...

  4. 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA | 示例 ) ★★

    文章目录 一.正则表达式转为非确定性有限自动机 NFA 要点 二.正则表达式转为非确定性有限自动机 NFA 示例 1 三.正则表达式转为非确定性有限自动机 NFA 示例 2 四.正则表达式转为非确定性 ...

  5. 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★

    文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...

  6. 【计算理论】可判定性 ( 非确定性有限自动机的接受问题 | 证明 “非确定性有限自动机的接受问题“ 的可判定性 )

    文章目录 一.非确定性有限自动机的接受问题 二.证明 "非确定性有限自动机的接受问题" 可判定性 一.非确定性有限自动机的接受问题 非确定性有限自动机 的 接受问题 , 首先将 计 ...

  7. 【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )

    文章目录 一.推广型的非确定性有限自动机 ( GNFA ) 引入 二.推广型的非确定性有限自动机 ( GNFA ) 删除状态 三.确定性有限自动机 ( DFA ) 转为 正则表达式 四.确定性有限自动 ...

  8. 编译原理——非确定有限自动机(三)

    非确定有限自动机 一.非确定有限自动机的定义(NFA) NFA和DFA的区别: 接收的字符可以是空(即当前状态可以接收一个null字符然后转移到另一个状态):一个状态接收一个字符之后可以转换到多个状态 ...

  9. 【计算理论】上下文无关语法 ( 代数表达式 | 代数表达式示例 | 确定性有限自动机 DFA 转为 上下文无关语法 )

    文章目录 I . 代数表达式 语法 II . 代数表达式 语法 示例 III . 设计 上下文无关语法 IV . 确定性有限自动机 DFA 转为 上下文无关语法 I . 代数表达式 语法 1 . 代数 ...

  10. 确定与不确定有限自动机DFA与NFA及子集法互相转换

    编译原理正规式NFA与DFA及子集法 1.基础术语与概念: 语法描述基本概念 字母表:一个有穷字符集记为Σ 字母表中每个元素称为字符 Σ上的字(字符串)是指Σ中的字符所构成的一个有穷序列 不包含任何字 ...

最新文章

  1. 定义并调用函数输出 fibonacci 序列_科学网—Zmn-0351 薛问天:再谈数学概念的定义,评新华先生《0345》...
  2. java自定义一个方法,用于返回两个整数的和
  3. app素材模板|ui界面的导航设计实用干货
  4. 国内版Office 365和Azure AAD绑定的问题及解决方案
  5. android 渐变展示启动屏
  6. 合成未来宝宝照片_父母照片重叠是宝宝长相?关晓彤鹿晗颜值逆天,邓超孙俪……...
  7. Myeclipse自定义包自动加入
  8. java rt.jar的源代码的位置
  9. JAVA程序入门(✨详解✨)
  10. 基于SSM的志愿者管理系统
  11. 游戏加加:科学的算法+公平的引擎=最真实的BenchMark
  12. winform,鼠标移动到label标签时变成手的形状
  13. 【免费】Linux命令行与Shell脚本编程大全 第3版 PDF全本 21MB 百度网盘下载
  14. 电子邮票出售面临着两大困境
  15. TypeError: date.locale is not a function
  16. Visual Studio打开文件时出现“向程序发送命令时出现问题
  17. 解决IDEA JavaWeb项目启动运行后出现404错误
  18. 同步挤压s变换matlab,同步挤压广义S变换信号时频分解与重构方法与流程
  19. 索引,主键,唯一索引,联合索引 的区别
  20. 神州信息喜获信创服务15个软件著作权证书

热门文章

  1. android webview 文件下载,Android编程使用WebView实现文件下载功能的两种方法
  2. python isupper_Python中用于检查英文字母大写的isupper()方法
  3. POI 模板生成word PDF——牛X神器
  4. c# 使用正则表达式 提取章节小说正文全本篇
  5. 码龄10年工作6年的搬砖小哥,最常访问的学习网站都在这里了
  6. 小程序上传图片加水印
  7. Java邮箱验证码注册
  8. 8个问题看你是否真的懂 JS
  9. 如何正确的将拼多多的买家晒图采集并保存
  10. 英语问题,(有些答案不对,不对的请说一声)