编译原理 正则表达式_确定有穷自动机(DFA)_化简(最小化)
1. 编译原理-确定有穷自动机(DFA)化简(最小化)
预备
最简化的DFA:这个DFA没有多余状态、也没有两个相互等价的状态。一个DFA可以通过消除无用状态、合并等价状态而转换成一个与之等价的最小状态的有穷自动机。
无用状态:从自动机开始状态出发,任何输入串也发到达的那个状态,或者这个状态没有通路可达终态。
等价转态:两个状态,识别相同的串,结果都同为正确或错误,这两个状态就是等价的。
区别状态:不是等价状态。
化简DFA
分割法:
把一个DFA(不含多余状态)的状态分割成一些不相交的子集,并且任意两个子集之间的状态都是可区别状态,同一子集内部的状态都是等价状态。
步骤(按分割法)
- I0 = 非状态元素构成的集合,I1 = 终态元素构成的集合
- 经过多次划分后,要保证,任意一个Ik中的元素通过move(Ik,某个字符)的结果都同属于一个Iz,这时候划分完成。否则把状态不同的单独划分出去。
- 重复上一步,直至没有新的I子集增加。
- 从子集中任选一个代替整体,画出最简DFA。
例1. 将下图DFA M最小化
分割成I0,I1
I0 = {1,2,3,4} ; 非终态I1 = {5,6,7} ; 终态
检验I0中元素的等价性,不等价就分割
move(1,a) = 6 ∈I1move(1,b) = 3 ∈I0move(2,a) = 7 ∈I1move(2,b) = 3 ∈I0move(3,a) = 1 ∈I0move(3,b) = 5 ∈I1move(4,a) = 4 ∈I0move(4,b) = 6 ∈I1可以发现,{1,2}是等价的,{3,4}是等价的
所以现在分割成了:I2 = {1,2}, I1 = {5,6,7}, I3 = {3,4}
检测I2中元素的等价性,不等价就分割
move(1,a) = 6 ∈I1move(1,b) = 3 ∈I3move(2,a) = 7 ∈I1move(2,b) = 3 ∈I3可以发现,是等价的,不用分割
检测I3中元素的等价性,不等价就分割
move(3,a) = 1 ∈I2move(3,b) = 5 ∈I1move(4,a) = 4 ∈I3move(4,b) = 6 ∈I1
可以发现,不是等价的,分割成{3},{4}
所以现在分割成了:I2 = {1,2}, I1 = {5,6,7}, I4 = {3}, I5 = {4}
检测I1中元素的等价性,不等价就分割
move(5,a) = 7 ∈ I1
move(5,b) = 3 ∈ I4move(6,a) = 4 ∈ I5
move(6,b) = 1 ∈ I2move(7,a) = 4 ∈ I5
move(7,b) = 2 ∈ I2可以发现,不是等价的,分割成{6,7}, {5}
所以现在分割成了:I2 = {1,2}, I4 = {3}, I5 = {4}, I6 = {5},I7 = {6,7}
检测后发现,不可再分割,所以最终分割结果就是:I2 = {1,2}, I4 = {3}, I5 = {4}, I6 = {5},I7 = {6,7}
画转态转换图:从集合中选取一个代表就可以
例题2 编译原理作业题
构造一个DFA,它接受Σ = {0,1}上能被5整除的二进制数。另老师还要求写出能被5整除的二进制串的正规式。
解析:
首先分析题目可知,一个数除以5,其余数(十进制)只能是0,1,2,3,4五种,因此我们以0,1,2,3,4分别表示这五种状态。因为要求得能被5整除的数,0 mod 5=0满足要求,故状态0既为初始状态,又为终结状态。
接着,考虑二进制数在其串后增添0或1时,状态的转化情况。在二进制串后添1位,即可理解为将先前的串值乘以二再加上所添的数值。那么,串尾添数后新的数值模5的余数便可以计算出来。即可以得到添0或1后的新的状态。
下面根据分析列出状态转换表:
状态 | 添0 | 添1 |
---|---|---|
0 | 0 | 1 |
1 | 2 | 3 |
2 | 4 | 0 |
3 | 1 | 2 |
4 | 3 | 4 |
根据状态转换表,可以绘制出DFA如下图所示:
再根据上面的DFA可以得出正规式如下:
{1 [ ((00|1)(01)*01*0)* (0|11) (01)* ] 1}* 0*
编译原理 正则表达式_确定有穷自动机(DFA)_化简(最小化)相关推荐
- 【最新合集】编译原理习题(含答案)_答案全集_MOOC慕课 哈工大陈鄞
[最新合集]编译原理习题(含答案)_1 绪论_MOOC慕课 哈工大陈鄞 [最新合集]编译原理习题(含答案)_2程序设计语言及其文法_MOOC慕课 哈工大陈鄞 [最新合集]编译原理习题(含答案)_3词法 ...
- 编译原理——java 词法分析【有穷自动机实现】
编译原理--实验1 实验要求 1) 基于词法规则设计词法分析器(20分) 画出确定的有穷自动机(确定化),并提供必要的文字说明.提交状态转换图.doc 2) 词法分析程序的编程实现(80分) (1) ...
- 【编译原理】:NFA转变为DFA的子集构造法
整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小 ...
- 【编译原理】 NFA转变为DFA的子集构造法
整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小 ...
- DFA确定化和最小化
从正规式开始 一.先将正规式转换成NFA 通过下面的对应法则将正规式转换成NFA 例如: 二.再将NFA转成DFA(子集法) 运用子集法的3个概念: (1 )状态集的ε-闭包: 状态集I中的任何状态s ...
- [编译原理]词法分析实验之基于 DFA 的单词识别
Spring-_-Bear 的 CSDN 博客导航 问题描述: 基于 DFA 的单词识别问题的一种描述是:编写一个程序,输入一个确定的有穷自动机(DFA),使用该 DFA 识别单词. 基本要求: 设置 ...
- [系列][编译原理]正则表达式
关于正则表达式,作为软件工程师应该比较熟悉了.所谓正则表达式,就是表示字符串的格式.正则表达式r完全由它所匹配的串集来定义.这个集合称为由正则表达式生成的语言,写作L(r).此处的语言只是表示&quo ...
- 差分隐私 机器学习_满足差分隐私的经验误差最小化方法
手上的东西有点进行不下去,滚过来写专栏作下回顾.上次聊了聊差分隐私的定义,那么现在我们要在差分隐私的框架上实现机器学习任务. 关于差分隐私机器学习这个方向,Kamalika Chaudhuri 在ni ...
- python 窗口最小化_有没有办法通过Python 3最小化Windows 7中的窗口?
我正在运行一个内置Python解释器的程序.我希望该程序能够"全屏"或最小化. 这将在Windows 7上运行. 我想知道是否有办法在Python中执行此操作(以便我可以从我的程序 ...
- 两个分数化简比怎么化_两个分数的比化简怎么化急用
1.先找出中主分线,确定分子部分和分母部分,然后这两部分分别进行计算,每部分的计算结果能约分的要约分,最后改成"分子部分/分母部分"的形式,再求出结果. 2.根据分数的基本性质,经 ...
最新文章
- portlet 与 servlet 的关系
- UA MATH571A QE练习 R语言 单因子试验的回归分析
- 微信支付 php编程,PHP编程:微信支付开发交易通知实例
- 拥抱.NET Core,如何开发一个跨平台类库
- 蓝桥杯基础模块4_3:矩阵按键
- STL 源代码剖析 算法 stl_algo.h -- search
- 2016项目经验总结
- pc临时调起QQ临时会话
- 51单片机8位数码管计时器(汇编语言)
- AlertDialog点击确定必定会dismiss问题
- 中国半导体工业测试设备市场深度研究分析报告
- 【解决方案】Error response from daemon: Conflict. The container name /mongo is already in use by contain
- 学成在线项目(HTML+CSS)
- 2018年哪些畅销书和新书值得关注?答案就在这里
- UDS之浅谈10服务
- Pure-ftpd + Mysql + Pureftpd php manager架设FTP 傻子的执著
- 印度人撮合办公室恋情
- Android 银联控件支付开发流程
- 高一计算机专业班主任工作总结,计算机班主任工作总结
- ACME_Pan-specific_peptide-MHC_class_I_binding_pred
热门文章
- 墨者mysql注入_墨者靶场:SQL注入漏洞测试(参数加密) 使用sqlmap进行注入
- 各大IT公司往届校招笔试面试题汇总
- 感性负载,容性负载,阻性负载
- 如何应对硬盘无法识别通电异响等那些七七八八的物理故障
- HTTP 412状态码
- 记账小程序 微信小程序 源码 uniapp vue3
- Obsidian流程图
- MoleBox PRO build 2.3.054,, Latest , Private Member Build Edition
- 春晚红包互动:中国云计算的成长史
- 冲激脉冲抽样定理matlab,信号抽样及抽样定理分析.doc