编译原理(二) NFA的确定化及DFA的最小化
来源:互联网 发布:golang mgo.v2 编辑:程序博客网 时间:2024/05/29 05:52
1. NFA的确定化
1.1. 明确NFA的定义
一个非确定的有穷自动机(NFA)M是一个五元式:
M=(S,∑,δ,S0,F) S是一个有限集,它额每个元素称为一个状态。 ∑是一个有穷字母表,它的每个元素称为一个输入字符 δ是一个从S×∑∗至S子集额单值映射。即:δ:S×∑∗→2⋅S S0⊆S,是一个非空的初态集 F⊂ S , 是一个终态集(可空)
1.2. 定义运算
定义对状态集合I的几个有关运算:
- 状态集合I的
ε -闭包,表示为ε -closure(I),定义为一状态集,是状态集I中的任何状态s经任意条ε 弧而能到达的状态的集合。状态集合I的任何状态s都属于ε -closure(I)。 - 状态集合I的a弧转换,表示为move(I,a)定义为状态集合J,其中J是所有那些可从I的某一状态经过一条a弧而到达的状态的全体。
定义Ia =ε -closure(move(I,a))
1.3. 算法描述
- 每次从队头取出一个集合,(开始队列内只有初态集合I的
ε -闭包(I) ),然后得到它对于任意一个字符a的Ia=ε−closure(move(I,a)) - 然后如果当前状态之前没有出现过,那么当前状态作为一个新的状态I,放入队列。
- 一直做如上操作,直到队列为空
2. DFA的最小化
2.1. 明确DFA的定义
一个确定的有穷自动机(DFA)M是一个五元式:
- M=(S, ∑, δ, s0, F)其中
- S是一个有限集,它的每个元素称为一个状态。
- ∑是一个有穷字母表,它的每个元素称为一个输入字符
-δ是一个从S×∑至S的单值映射。δ(s,a)=s’意味着:当现行状态-为s、输入字符为a时,将转换到下一个状态s’。我们称s’为s的一个后继状态。 s0 ∈S,是唯一的初态。- F
⊂ S,是一个终态集(可空)
2.2 算法描述
- DFA M =(K,∑,f, k0,, kt),最小状态DFA M’
- 1.构造状态的初始划分
∏0 :终态kt 和非终态K- kt两组 - 2.对∏施用传播性原则 构造新划分
∏new - 3.如
∏new=∏ ,则令∏new=∏ 并继续步骤4,否则∏:=∏new 重复2 - 4.为
∏final 中的每一组选一代表,这些代表构成M’的状态。若k是一代表且f(k,a)=t,令r是t组的代表,则M’中有一转换f’(k,a)=r M’ 的开始状态是含有K0的那组的代表 M’的终态是含有Kt的那组的代表 - 5.去掉M’中的死状态.
- 1.构造状态的初始划分
阅读全文
0 0
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现
- 编译原理(二) NFA的确定化及DFA的最小化的算法及C++实现
- 编译原理(二) NFA的确定化及DFA的最小化
- <编译原理>NFA转化DFA 及 DFA的化简
- NFA的确定化
- NFA转DFA 《编译原理》
- 编译原理NFA到DFA
- 【编译原理】:NFA转变为DFA的子集构造法
- 【编译原理】:NFA转变为DFA的子集构造法
- 编译原理实验2——自动机的确定化和最小化
- 编译原理词法分析之NFA与自动机的最小化
- 实验三 NFA确定化和DFA最小化
- 编译原理与编译构造 由NFA变为DFA
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- 编译原理中正则表达式直接构造DFA,DFA的最小化算法
- 编译原理实验——将NFA转化为DFA
- 编译原理中的正则表达式、NFA和DFA
- 编译原理中的正则表达式、NFA和DFA
- 【luoguP1337】[JSOI2004]平衡点
- ActiveX 相关总结(持续更新中...)
- scrapy指定item输出项顺序到csv
- POJ 1279 Art Gallery [半平面交]
- Oracle笔记三:Scott用户表结构
- 编译原理(二) NFA的确定化及DFA的最小化
- "Whoops, looks like something went wrong"如何解决?
- 编译原理 (预处理>编译>汇编>链接)(转)
- 将图片存储到mysql数据库
- C++中的this
- 显卡里的cuda真正做到并行运算的机制和线程个数,主要关于SM、warp等概念。
- Hive为什么适合做数据仓库
- 设计模式之原型模式
- 国庆清北刷题冲刺班 Day2 上午