整体的步骤是三步: 
一,先把正规式转换为NFA(非确定有穷自动机), 
二,在把NFA通过“子集构造法”转化为DFA, 
三,在把DFA通过“分割法”进行最小化。

一步很简单,就是反复运用下图的规则,图1 

这样就能转换到NFA了。

给出一个例题,来自Google book。本文主要根据这个例题来讲,图2

二.子集构造法。 
同样的例题,把转换好的NFA确定化,图3 

这个表是从NFA到DFA的时候必须要用到的。第一列第一行I的意思是从NFA的起始节点经过任意个ε所能到达的结点集合。Ia表示从该集合开始经过一个a所能到达的集合,经过一个a的意思是可以略过前后的ε。同样Ib也就是经过一个b,可以略过前后任意个ε。 
至于第二行以及后面的I是怎么确定的。我参考了一些题目才明白,原来就是看上面的Ia和Ib哪个还没出现在I列,就拿下来进行运算,该列对应的Ia和Ib就是前面我说的那样推导。

如果还不太明白,看图就是了。你会发现I中的几个项目都在Ia和Ib中出现了。而且是完全出现

这步做完以后,为了画出最后的DFA,那么肯定得标出一些号来,比如1.2.3.。或者A。 B。c,我一般标的方法是先把I列全部标上1.2.3.递增。然后看1表示的集合和Ia和Ib中的哪个集合一样,就把那个集合也表示为1.继续向下做。最后会得到这样一个表格。图4

至此,就可以表示出DFA了。就对照上面那个表,从0节点开始经过a到1.经过b到2,就这样画就行了。。

最后的DFA如下图,图5

双圈的表示终态,这个是怎么来的呢。去看看图4,会发现有些项之前有双圈标志,这个是因为在NFA图2中,9为终态, ,改成1.2.3.。。方便画节点后就需要把这些点作为终态了。。

三.最小化,分割法。

FA的最小化就是寻求最小状态DFA

最小状态DFA的含义: 
1.没有多余状态(死状态)

除多余状态 
什么是多余状态? 
从这个状态没有通路到达终态;S1 
从开始状态出发,任何输入串也不能到达的那个状态。S2 
如何消除多余状态? 
删除

2. 没有两个状态是互相等价(不可区别) 
两个状态s和t等价的条件: 
兼容性(一致性)条件——同是终态或同是非终态 
传播性(蔓延性)条件——对于所有输入符号,状态s和状态t必须转换到等价的状态里。。

DFA的最小化—例子,第一步都是固定的。分成终态和非终态

1.将M的状态分为两个子集一个由终态k1={C,D,E,F}组成,一个由非终态k2={S,A,B}组成,

2.考察{S,A,B}是否可分.

因为A经过a到达C属于k1.而S经过a到达A属于k2.B经过a到达A属于k2,所以K2继续划分为{S,B},{A},

3.考察{S,B}是否可再分:

B经过b到达D属于k1.S经过b到达B属于k2,所以S,B可以划分。划分为{S},{B}

4.考察{C,D,E,F}是否可再分: 
因为C,D,E,F经过a和b到达的状态都属于{C,D,E,F}=k1所以相同,所以不可再分:

5.{C,D,E,F}以{D}来代替则,因为CDEF相同,你也可以用C来代替。无所谓的最小化的DFA如图,: 

转自:http://blog.csdn.net/qq_23100787/article/details/50402643

【编译原理】:NFA转变为DFA的子集构造法相关推荐

  1. 【编译原理】 NFA转变为DFA的子集构造法

    整体的步骤是三步:  一,先把正规式转换为NFA(非确定有穷自动机),  二,在把NFA通过"子集构造法"转化为DFA,  三,在把DFA通过"分割法"进行最小 ...

  2. NFA转变为DFA的子集构造法

    整体的步骤是三步: 一,先把正规式转换为NFA(非确定有穷自动机), 二,在把NFA通过"子集构造法"转化为DFA, 三,在把DFA通过"分割法"进行最小化. ...

  3. 【编译原理】NFA转DFA(子集构造法)

    前文回顾 [编译原理]正则表达式转NFA 算法 来自龙书第二版 C++实现 #include<iostream> #include<string> #include<cs ...

  4. NFA到DFA的子集构造法

    摘录博客:https://blog.csdn.net/qq_23100787/article/details/50402643 整体的步骤是三步:  一,先把正规式转换为NFA(非确定有穷自动机),  ...

  5. 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA)

    编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 文章目录 编译原理: Subset Construction 子集构造法(幂集构造)(NFA转DFA) 简 ...

  6. 【编译原理】【实验】利用子集法构造DFA

    利用子集法构造DFA 一.实验目的 二.实验要求.内容 三.实验设备 四.实验原理(或程序框图)及步骤 五.程序源代码 六.实验数据.结果分析 七.存在的问题与体会 附录 一.实验目的 掌握将非确定有 ...

  7. 编译原理——正规式转DFA算法概述

    一.概念概述 给定一个单词,判断该单词是否满足我们给定的单词描述规则,需要用到编译原理中词法分析的相关知识,其中涉及到的两个很重要的概念就是正规式(Regular Expression)和有穷自动机( ...

  8. 利用子集构造法实现NFA到DFA的转换

    概述 NFA非有穷自动机,即当前状态识别某个转换条件后到达的后继状态不唯一,这种自动机不便机械实现,而DFA是确定有限状态的自动机,它的状态转换的条件是确定的,且状态数目往往少于NFA,所以DFA能够 ...

  9. 子集构造法和含有空串的子集构造法

    子集构造法 子集构造法很简单. 消除空转移子集构造法  Design 闭包是自己+接受空串能到达的状态. DFA的开始状态时NFA的闭包 3.识别的语言:(a+c+e)(a+c+e)b+(a+c+e) ...

最新文章

  1. linux python fcntl模块 程序加锁 简介
  2. redis如何解决秒杀超卖java_Spring Boot + redis解决商品秒杀库存超卖,看这篇文章就够了...
  3. 学习手机游戏原画设计需要多长时间?难学吗?
  4. 有钱了该不该提前还清房贷?
  5. 统计abacbacdadbc中的每个字母出现的次数,输出格式是:a(4)b(3)c(3)d(2)
  6. jtessboxeditorfx 界面显示不出来_华为Mate40 Pro开箱简评,有点不开心
  7. 如何切底卸载Oracle
  8. APPCAN学习笔记006_创建第一个APPCAN应用
  9. Mysql触发器与动态完整性
  10. Linux Shell 中 ()、(())、[]、[[]]、{} 的作用
  11. 台式计算机找不到无线连接,台式机如何连接wifi_台式机找不到无线网络
  12. IntelliJ IDEA 配置svn及使用
  13. 高斯光束的简单matlab仿真
  14. 从自走棋代码分析游戏机制--棋池、回蓝、目标判断、掉落概率与新英雄
  15. html有序列表标签圆点,什么是无序列表、有序列表、定义列表?html列表标签学习笔记...
  16. 大脑神经网络记忆原理图,记忆力机制的神经网络
  17. 集五福主题的微信图文排版攻略已到!
  18. Python 优雅地利用两点经纬度计算地理空间距离
  19. 阿里云网盘开始内测资格申请!
  20. html5游戏开发_HTML5游戏开发–第9课

热门文章

  1. 国内程序员加班严重!听听外国网友怎么说。
  2. 02-第二章 基本类型
  3. 有知其下落者的nanshan
  4. ykcchf 2013 v2.1101 最新版下载
  5. 飞鸽传书2011什么时候更新?
  6. 获取和保存当前屏幕的截图 实现的C++代码如下
  7. 【绿色版】飞鸽传书2011绿色版
  8. PE格式学习讨论群:3214720
  9. transition属性详细讲解
  10. centos java mvn_Linux(centos7)安装JDK1.8与maven