NFA到DFA实例
下面图使用NFA表示的状态转换图,

使用子集构造法,有如下过程,
ε-closure(0) = {0, 1, 2, 3, 4, 6, 7}
初始值,令为A
A = {0, 1, 2, 3, 4, 6, 7}
标记A
move(A, a) = {3, 8}
Dtran[A, a] = {1, 2, 3, 4, 6, 7, 8}
不重复,令为B
B = {1, 2, 3, 4, 6, 7, 8}
转换关系为A->a->B
move(A, b) = {5}
Dtran[A, b] = {1, 2, 4, 5, 6, 7}
不重复,令为C
C = {1, 2, 4, 5, 6, 7}
转换关系为A->b->C
标记B
move(B, a) = {3, 8}
由上可得
Dtran[B, a] = B
转换关系B->a->B
move(B, b) = {5, 9}
Dtran[B, b] = {1, 2, 4, 5, 6, 7, 9}
不重复,令为D
D = {1, 2, 4, 5, 6, 7, 9}
转换关系B->b->D
标记C
move(C, a) = {3, 8}
Dtran[C, a] = B
转换关系为C->a->B
move(C, b) = {5}
Dtran[C, b] = C
转换关系为C->b->C
标记D
move(D, a) = {3, 8}
Dtran[D, a] = B
转换关系为D->a->B
move(D, b) = {5}
Dtran[D, b] = C
转换关系D->b->C
最后得到下列状态转换表,
--------------------------------------------------------
NFA DFA a b
--------------------------------------------------------
{0, 1, 2, 3, 4, 6, 7} A B C
--------------------------------------------------------
{1, 2, 3, 4, 6, 7, 8} B B D
--------------------------------------------------------
{1, 2, 4, 5, 6, 7} C B C
--------------------------------------------------------
{1, 2, 4, 5, 6, 7, 9} D B C
--------------------------------------------------------
注意:
对于状态s,s属于ε-closure(s),因为路径可以不包含边,所以状态s可以从自身出发经过标号ε(不包含边)到达自身。
Dtran[S, c] = ε-closure(move(S, c))。
NFA到DFA实例的更多相关文章
- NFA转DFA - json数字识别
json的主页上,提供了number类型的符号识别过程,如下: 图片引用:http://www.json.org/json-zh.html 实际上这张图片表示的是一个状态机,只是状态没有标出来.因为这 ...
- 求子串-KPM模式匹配-NFA/DFA
求子串 数据结构中对串的5种最小操作子集:串赋值,串比较,求串长,串连接,求子串,其他操作均可在该子集上实现 数据结构中串的模式匹配 KPM模式匹配算法 基本的模式匹配算法 //求字串subStrin ...
- nfa转dfa,正式完成
为了加速转换的处理,我压缩了符号表.具体算法参考任何一本与编译或者自动机相关的书籍. 这里的核心问题是处理传递性闭包,transitive closure,这个我目前采取的是最简单的warshall算 ...
- NFA和DFA区别
一个数据块的访问时间等于寻道时间.旋转延迟时间和数据传输时间三者之和: NFA和DFA区别: 一个状态如A,遇0可以转换到下一个状态B或C,因为选择多所以不确定,因此为不确定的有限自动机: 一个状态还 ...
- 利用子集构造法实现NFA到DFA的转换
概述 NFA非有穷自动机,即当前状态识别某个转换条件后到达的后继状态不唯一,这种自动机不便机械实现,而DFA是确定有限状态的自动机,它的状态转换的条件是确定的,且状态数目往往少于NFA,所以DFA能够 ...
- 计算理论:NFA转DFA的两种方法
本文将以两种方法实现NFA转DFA,并利用C语言实现. 方法二已利用HNU OJ系统验证,方法一迷之WA,但思路应该是对的,自试方案,测试均通过. (主要是思路,AC均浮云,大概又有什么奇怪的Case ...
- NFA与DFA
正则表达式匹配,包含两个东西,一个是表达式,一个文本. NFA(Nondeterministic Finite Automaton),不确定有穷自动机,表达式主导,NFA去吃文本,贪婪算法吃下去,如果 ...
- [编译原理代码][NFA转DFA并最小化DFA并使用DFA进行词法分析]
#include <iostream> #include <vector> #include <cstring> #include "stack" ...
- 编译原理-NFA构造DFA
本题摘自北邮的编译原理与技术. 首先,根据此图构造状态转换表 表中第一列第一行表示从第一个符号B通过任意个空转换能到达的节点,Ia表示由此行的状态数组({B,5,1}可以看作0状态)经过一个a可以到达 ...
随机推荐
- MODULE_DEVICE_TABLE的理解【转】
本文转载自:http://blog.csdn.net/sidely/article/details/39666471 在Linux IIC驱动中看到一段代码: static struct platfo ...
- 【线程安全】—— 单例类双重检查加锁(double-checked locking)
1. 三个版本单例类的实现 版本1:经典版 public class Singleton { public static Singleton getInstance() { if (instance ...
- bzoj3662
数学 其实我们发现不用每个数都去试一下,只要确定每个数字有几个就可以确定这个数.所以我们先搜索一下,然后检验. 但是这样太慢了,所以我们打表. 打出1-30的结果,然后取模. 打表的程序好像弄丢了.. ...
- PCB genesis 大孔扩孔(不用G84命令)实现方法
PCB钻孔时,当钻刀>6.3mm时,超出钻孔范围,钻孔工序是没有这么大的钻刀,当这种情况,工程CAM会都采用G84命令用小孔扩孔的方式制作, 在这里介绍一种如果不用G84命令,用程序实现将大孔生 ...
- [Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)
创建临时配置文件以在设备上运行您的应用程序而无需Xcode.在开始之前,您需要一个App ID,一个分发证书和多个注册设备. 有关完整的临时配置文件工作流程,请转到Xcode帮助中的分发到已注册设备( ...
- vue tab 点击请求方法
页面: <Tabs value="name1" style="width: 100%;height: 900px;" @on-click="ge ...
- RHEL6.5设置行号,安装GCC
vim ~/.vimrc set nu set cindent set tabstop=4 set shiftwidth=4 syntax on 安装gcc,g++编译器 ...
- composer 下载安装
linux/mac os curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/compos ...
- cobbler+kickstart安装笔记
cobbler+kickstart安装笔记 本文参考老男孩配置:https://blog.oldboyedu.com/autoinstall-cobbler/ centos7:开机如果不启动网卡,需要 ...
- .Net application,Session,Cache简单比较
Application 对象用于存储和访问来自任何页面的变量,类似于 session 对象.不同之处在于,所有的用户分享一个 Application 对象,而 session 对象和用户的关系是一一对 ...