编译原理——确定有穷自动机的化简-分割法
文章目录
- 3.4.4 确定有穷自动机的化简
- 1.化简的有穷自动机的定义
- 2.分割法
- 3.The End
3.4.4 确定有穷自动机的化简
1.化简的有穷自动机的定义
一个没有多余状态并且没有两个状态是等价的有穷自动机。
多余状态(无用状态):从该自动机的开始状态出发,任何输入串也不能到达的那个状态
等价状态:
- 两个状态必须同时为可接受状态(终态)或者不可接受状态(非终态)——一致性条件
- 对于所有的输入符号,两个状态接受相同的符号必须转换到等价的状态——蔓延性条件
2.分割法
我们首先将其分为终态和非终态
P 0 P_0 P0 = ({1, 2, 3, 4}, {5, 6, 7})
接下来我们尝试先对{1, 2, 3, 4}这个子集进行划分
1 ⟶ a 6 1\stackrel{a}{\longrightarrow}6 1⟶a6; 1 ⟶ b 3 1\stackrel{b}{\longrightarrow}3 1⟶b3
2 ⟶ a 7 2\stackrel{a}{\longrightarrow}7 2⟶a7; 2 ⟶ b 3 2\stackrel{b}{\longrightarrow}3 2⟶b3
3 ⟶ a 1 3\stackrel{a}{\longrightarrow}1 3⟶a1; 3 ⟶ b 5 3\stackrel{b}{\longrightarrow}5 3⟶b5
4 ⟶ a 4 4\stackrel{a}{\longrightarrow}4 4⟶a4; 4 ⟶ b 6 4\stackrel{b}{\longrightarrow}6 4⟶b6
首先我们看如果输入a的话,1和2的输出为{5,6,7}这个集合中的元素,而3和4则仍是本集合的元素,所以根据等价状态的第二性质,我们可以将1、2 与3、4分割开。
P 1 P_1 P1 = ({1, 2}, {3, 4}, {5, 6, 7})
对于目前这个新的集合来说,我们继续划分每个子集。首先从{1,2}开始
1 ⟶ a 6 1\stackrel{a}{\longrightarrow}6 1⟶a6; 1 ⟶ b 3 1\stackrel{b}{\longrightarrow}3 1⟶b3
2 ⟶ a 7 2\stackrel{a}{\longrightarrow}7 2⟶a7; 2 ⟶ b 3 2\stackrel{b}{\longrightarrow}3 2⟶b3
我们无论是对1,2输入a还是输入b,它们的输出都属于同一个集合——6、7属于{5,6,7}这个终态集合,3属于{3,4}这个集合,所以{1,2}这个集合很完美,无法划分(即状态无法区分),它俩好得跟一个人似的。
那么我们继续看{3,4}
3 ⟶ a 1 3\stackrel{a}{\longrightarrow}1 3⟶a1; 3 ⟶ b 5 3\stackrel{b}{\longrightarrow}5 3⟶b5
4 ⟶ a 4 4\stackrel{a}{\longrightarrow}4 4⟶a4; 4 ⟶ b 6 4\stackrel{b}{\longrightarrow}6 4⟶b6
哦,我们看到,当输入a的时候,3输出的是1,属于{1,2}集合;4则输出的是4,属于{3,4}集合,所以3和4的状态可区分。
那么更新我们的状态图
更新P
P 2 P_2 P2 = ({1,2}, {3}, {4}, {5, 6, 7})
很明显我们的故事还没结束,还有{5,6,7}这个集合
5 ⟶ a 7 5\stackrel{a}{\longrightarrow}7 5⟶a7; 5 ⟶ b 3 5\stackrel{b}{\longrightarrow}3 5⟶b3
6 ⟶ a 4 6\stackrel{a}{\longrightarrow}4 6⟶a4; 6 ⟶ b 1 6\stackrel{b}{\longrightarrow}1 6⟶b1
7 ⟶ a 4 7\stackrel{a}{\longrightarrow}4 7⟶a4; 7 ⟶ b 2 7\stackrel{b}{\longrightarrow}2 7⟶b2
很明显,在输入a的时候,5的输出为7即{5,6,7} 本集合内的,而6、7则是输出的同一个集合。二话不说,分家!
P 3 P_3 P3 = ({1,2}, {3}, {4}, {5}, {6, 7})
这时候,还剩{6,7},如果你上面看明白了,那么到这里你也就懂了,6、7是不可区分的状态。
分割法到此结束……
……不还有最后一步,把所有的不可区分状态统统用其中一个状态来表示就行。
比如1、2,我们直接用1来代替就行,把2所有的输入和输出的压力都放到1身上
( 1 ⟶ b 3 1\stackrel{b}{\longrightarrow}3 1⟶b3, 2 ⟶ b 3 2\stackrel{b}{\longrightarrow}3 2⟶b3 所以这两个线用一个就行)
然后我们发现6、7可以直接用6代替
把虚线收拾干净再看看
3.The End
编译原理——确定有穷自动机的化简-分割法相关推荐
- 【编译原理】— 求最小化DFA
(编译原理) 求最小化DFA(写出所有过程) 解题过程如下: 1.根据状态转换图写出状态转换表 2.写出DFA表 I Ia Ib A B C B B D C B C D B E E B C 3.画出D ...
- 编译原理中词法分析的递归下降分析法实例--能被5整除的二进制数---c语言实现
一.前言 又到了一周一度的编译原理实验课,一次实验课上完了,又是大学生必备技能-写实验报告.行了,废话不多说,我直接展现,如何实现编译原理中词法分析的递归下降分析法实例–能被5整除的二进制数的思路.作 ...
- lr1分析器c语言实验报告怎么写,编译原理课程的设计构造LR分析法语法分析器.doc...
编译原理课程的设计构造LR分析法语法分析器 太 原 学 院 课程设计报告书 课程名称 设计题目 构造LR(0)分析法语法分析器 专业班级 学 号 姓 名 指导教师 2016年 12 月 15日 目 录 ...
- DFA确定性有穷自动机及其化简
DFA:deterministic finite automator 介绍 概念: 有穷自动机的每一步操作都是确定的,因此可称为确定型有穷自动机.确定有穷自动机就是说当一个状态面对一个输入符号的时候, ...
- QQ浏览器HD iOS 动态化/热修复方案QBDF解释器-语法制导翻译与递归子程序设计(编译原理)(5)简书被冻结-搬运】
原作时间:2019-2021年 此次共享,腾讯内网 / 外网同步发布. 内部代码地址:https://git.code.oa.com/fatboyli/QBDF 外部代码地址:GitHub - ven ...
- 计数原理,组合的化简
组合的化简: 性 质 一 : C n m = C n n − m {\color{red}性质一: C_{n}^{m}=C_{n}^{n-m}} 性质一:Cnm=Cnn−m 例: C 5 2 = ...
- 【编译原理】FIRST集和FOLLOW集构造法速学
编译原理速成大法 FIRST集和FOLLOW集构造法速成 FIRST FOLLOW FIRST集和FOLLOW集构造法速成 例:对于文法G(E) 首先像E,T,E',F这样的就是非终结符 +,*, ε ...
- 【编译原理】 实验三 LL(1)分析法(LL1分析表的自动生成)
写在前面 由于代码较长,csdn对文章总长度有字数限制,想只看完整代码的请移步另一篇博客. https://blog.csdn.net/qq_46640863/article/details/1257 ...
- 【编译原理】【实验】利用子集法构造DFA
利用子集法构造DFA 一.实验目的 二.实验要求.内容 三.实验设备 四.实验原理(或程序框图)及步骤 五.程序源代码 六.实验数据.结果分析 七.存在的问题与体会 附录 一.实验目的 掌握将非确定有 ...
最新文章
- 多媒体音量条显示异常跳动
- lvs调整hash表大小
- Perfect service(树形dp)
- 用MyEclipse自动生成hibernate映射文件和实体类
- kafka 配置及常用命令
- gui linux 桌面应用,吃掉Linux开发者,WSL支持GUI应用
- .NET 并行(多核)编程系列之六 Task基础部分完结篇
- python文件地址拼接
- C语言-输入十进制数转换为二进制数
- nlp-tutorial代码注释笔记
- 禅道 mysql 远程连接_远程访问禅道开源版数据库(基于docker)
- 探索 OpenStack 之(15):oslo.messaging 和 Cinder 中 MessageQueue 消息的发送和接收
- CCF201409-2 画图(100分)
- Python优化算法06——人工鱼群算法
- 机械专业向机器人工程专业转型的可行性与前景分析
- 银行核心业务系统性能测试
- 关于手心输入法配置完整自然码辅码
- coldfusion_Coldfusion数据结构简介第IV部分–查询
- 【解决】如何线上申请电子版的招商银行卡 | 在线申请招商银行的一网通账户
- 散粉在哪个步骤用_【散粉怎么用】正确的散粉用法_方法步骤顺序-她时代-女性时尚生活宝典...