【计算理论】非确定性有限自动机 ( NFA ) 转换成 确定性有限自动机 ( DFA )
文章目录
- 一、非确定性有限自动机 组成部分
- 二、确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 等价
- 三、非确定性有限自动机 ( NFA ) 转为 确定性有限自动机 ( DFA ) 示例
- 四、NFA 转 DFA ( 1 ) 开始状态 读取 aaa 字符 后继状态分析
- 五、NFA 转 DFA ( 2 ) 开始状态 读取 bbb 字符 后继状态分析
- 六、NFA 转 DFA ( 3 ) 选取第二个状态进行分析
- 七、NFA 转 DFA ( 4 ) 222 状态读取 aaa 字符后续状态分析
- 八、NFA 转 DFA ( 5 ) 222 状态读取 bbb 字符后续状态分析
- 九、NFA 转 DFA ( 6 ) 选取后续需要分析的状态
- 十、NFA 转 DFA ( 7 ) {2,3}\{2,3\}{2,3} 状态 读取 aaa 字符 后继状态分析
- 十一、NFA 转 DFA ( 8 ) {2,3}\{2,3\}{2,3} 状态 读取 bbb 字符 后继状态分析
- 十二、NFA 转 DFA ( 9 ) 选取后续需要分析的状态
- 十三、NFA 转 DFA ( 10 ) {3}\{3\}{3} 状态 读取 aaa 字符 后继状态分析
- 十四、NFA 转 DFA ( 11 ) {3}\{3\}{3} 状态 读取 bbb 字符 后继状态分析
- 十五、NFA 转 DFA ( 12 ) {1,2,3}\{1,2,3\}{1,2,3} 状态 读取 aaa 字符 后继状态分析
- 十六、NFA 转 DFA ( 13 ) {1,2,3}\{1,2,3\}{1,2,3} 状态 读取 bbb 字符 后继状态分析
- 十七、NFA 转 DFA ( 14 ) 结果分析
一、非确定性有限自动机 组成部分
非确定性有限自动机 : Nondeterministic Finite Automaton , NFA ;
① QQQ 状态集 : 有限个状态 ;
② Σ\SigmaΣ 字母表 : 有限个字符集 , 长度有限的字符串 ;
③ δ\deltaδ 转移函数 ( 指令集 ) : δ\deltaδ 称为转移函数 ; 基于当前的 自动机 的某个状态 , 将字符集 输入到自动机中 , 该自动机转换成一个或多个状态 , 这个转换就是通过 δ\deltaδ 转换函数进行的 , 使用公式描述 Q×Σε→2QQ \times \Sigma_{\varepsilon} \to 2^QQ×Σε→2Q ;
④ q0q_0q0 起始状态 : 是自动机的开始状态 ;
⑤ FFF 接受状态集 : FFF 是 可接受状态 , 是 QQQ 的子集 , 记做 F⊆QF \subseteq QF⊆Q , 与 FFF 可接受状态相对的是不可接受状态 ;
二、确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 等价
确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 之间是相互等价的 ;
确定性的有限自动机 ( DFA ) 可以 看作是非确定性有限自动机 ( NFA ) ;
确定性有限自动机 给定一个输入 , 其输出时唯一的 ;
非确定性有限自动机的定义 包含 确定性有限自动机的 定义中 ;
NFA 的后继状态 可以是 000 个 , 111 个 或 多个 , DFA 每个状态只能有 111 个后继状态 ;
确定性有限自动机 ( DFA ) 就是 特殊的 非确定性有限自动机 ( NFA ) ;
可以证明非确定性有限自动机 ( NFA ) , 必定有一个 确定性有限自动机 ( DFA ) 与其等价 ;
三、非确定性有限自动机 ( NFA ) 转为 确定性有限自动机 ( DFA ) 示例
正确的图片 :
下图绘制错误 , 暂时作废 , 看第一张图片 ;
上图绘制错误 , 暂时作废 , 看第一张图片 ;
字符集 : Σ={a,b}\Sigma = \{a, b\}Σ={a,b}
将上述 非确定性有限自动机 ( NFA ) 转换成 确定性有限自动机 ( DFA ) , 需要将非确定性消除 , 只剩下确定性因素 ;
转换过程 使用特定算法实现 , 下面会详细描述该算法 ;
表格 : 绘制一个表格 , 表格列分别是 a,ba, ba,b , 确定性有限自动机可以使用表格来表示 ;
开始状态分析 : 上述非确定性有限自动机开始状态 111 , 但是有一个 ε\varepsilonε 空字符 , 指向 333 状态 , 读取到空字符 ε\varepsilonε 后会无条件跳转到 后继状态 333 , 因此 该自动机有 222 个开始状态 ;
开始状态确定 : {1,3}\{1 , 3\}{1,3} , 将开始状态看做一个集合 , 将这两个状态组成的集合看做一个新的状态 ,
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} |
四、NFA 转 DFA ( 1 ) 开始状态 读取 aaa 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} |
表格 第 222 行 第 222 列 :
1 . 数值含义 : 该位置的含义是 {1,3}\{1 , 3\}{1,3} 开始状态下 , 读取 字符 aaa 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 111 状态下读取 aaa 字符后的后继状态 , 333 状态下读取 aaa 字符后的后继状态 ;
① 111 状态下读取 aaa 字符是空集 {∅}\{ \varnothing \}{∅} ;
② 333 状态下读取 aaa 字符后继状态是 111 , 此时 111 状态又可以无条件跳转到 333 状态 , 可以与 111 状态并列 , 此时 333 状态 读取 aaa 字符的后继状态是 {1,3}\{1, 3\}{1,3} ;
3 . 后继状态取并集 : 将上述的 两个 后继状态 {∅}\{ \varnothing \}{∅} 和 {1,3}\{1, 3\}{1,3} , 取并集 , 就是 {1,3}\{1 , 3\}{1,3} 状态下读取 aaa 字符的后继状态 , 取并集的结果是 {1,3}\{1, 3\}{1,3} ;
第 222 行 第 222 列 的 值是 {1,3}\{1, 3\}{1,3} , 代表 {1,3}\{1 , 3\}{1,3} 状态下读取 字符 aaa , 后继状态是 {1,3}\{1 , 3\}{1,3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} |
五、NFA 转 DFA ( 2 ) 开始状态 读取 bbb 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} |
表格 第 222 行 第 333 列 :
1 . 数值含义 : 该位置的含义是 {1,3}\{1 , 3\}{1,3} 开始状态下 , 读取 字符 bbb 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 111 状态下读取 bbb 字符后的后继状态 , 333 状态下读取 bbb 字符后的后继状态 ;
① 111 状态下读取 bbb 字符 后继状态是 {2}\{ 2 \}{2} ;
② 333 状态下读取 bbb 字符后继状态是 {∅}\{ \varnothing \}{∅} 空集 ;
3 . 后继状态取并集 : 将上述的 两个 后继状态 {2}\{2\}{2} 和 {∅}\{ \varnothing \}{∅} , 取并集 , 就是 {1,3}\{1 , 3\}{1,3} 状态下读取 bbb 字符的后继状态 , 取并集的结果是 {2}\{2\}{2} ;
第 222 行 第 333 列 的 值是 {2}\{2\}{2} , 代表 {1,3}\{1 , 3\}{1,3} 状态下读取 字符 bbb , 后继状态是 {2}\{2\}{2} 状态 ;
开始集合 {1,3}\{1, 3 \}{1,3} , 读取 aaa 字符 , 读取 bbb 字符的后继状态 , 分析完毕 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
六、NFA 转 DFA ( 3 ) 选取第二个状态进行分析
选取原则 : 没有出现过的状态 , 都要进行分析 ;
开始分析后续状态 , 第一个后继状态是 {1,3}\{1,3\}{1,3} 就是开始状态 , 已经分析过了 , 不再考虑 , 开始分析 {2}\{2\}{2} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} |
七、NFA 转 DFA ( 4 ) 222 状态读取 aaa 字符后续状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} |
表格 第 333 行 第 222 列 :
1 . 数值含义 : 该位置的含义是 {2}\{2\}{2} 开始状态下 , 读取 字符 aaa 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 {2}\{2\}{2} 状态下读取 aaa 字符后的后继状态 是 {2,3}\{2 , 3\}{2,3} ;
3 . 后继状态 : 第 333 行 第 222 列 的 值是 {2,3}\{2,3\}{2,3} , 代表 {2}\{2\}{2} 状态下读取 字符 aaa , 后继状态是 {2,3}\{2,3\}{2,3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} |
八、NFA 转 DFA ( 5 ) 222 状态读取 bbb 字符后续状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} |
表格 第 333 行 第 333 列 :
1 . 数值含义 : 该位置的含义是 {2}\{2\}{2} 开始状态下 , 读取 字符 bbb 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 {2}\{2\}{2} 状态下读取 bbb 字符后的后继状态 是 {3}\{ 3\}{3} ;
3 . 后继状态 : 第 333 行 第 333 列 的 值是 {3}\{3\}{3} , 代表 {2}\{2\}{2} 状态下读取 字符 bbb , 后继状态是 {3}\{3\}{3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
九、NFA 转 DFA ( 6 ) 选取后续需要分析的状态
选取原则 : 没有出现过的状态 , 都要进行分析 ;
{2,3}\{2,3\}{2,3} 和 {3}\{3\}{3} 状态都是分析 {2}\{2\}{2} 状态的后继状态时新出现的状态 , 因此将这两个状态加入表格中 , 进行分析 ;
加入两个状态后 , 最新表格如下 :
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | ||
{3}\{3\}{3} |
下面开始分析后续内容 ;
十、NFA 转 DFA ( 7 ) {2,3}\{2,3\}{2,3} 状态 读取 aaa 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | ||
{3}\{3\}{3} |
表格 第 444 行 第 222 列 :
1 . 数值含义 : 该位置的含义是 {2,3}\{2 , 3\}{2,3} 开始状态下 , 读取 字符 aaa 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 222 状态下读取 aaa 字符后的后继状态 , 333 状态下读取 aaa 字符后的后继状态 ;
① 222 状态下读取 aaa 字符 后继状态是 {2,3}\{ 2 , 3 \}{2,3} ;
② 333 状态下读取 aaa 字符后继状态是 {1,3}\{1 , 3\}{1,3} , 这里只要能到达状态 111 , 便需要无条件跳转到状态 333 , 因为 111 状态下读取空字符 ε\varepsilonε 即可转为 333 状态 , 因此 1,31,31,3 状态并列 ;
3 . 后继状态取并集 : 将上述的 两个 后继状态 {2,3}\{2, 3\}{2,3} 和 {1,3}\{ 1,3 \}{1,3} , 取并集 , 就是 {2,3}\{2 , 3\}{2,3} 状态下读取 aaa 字符的后继状态 , 取并集的结果是 {1,2,3}\{1,2,3\}{1,2,3} ;
第 444 行 第 222 列 的 值是 {1,2,3}\{1,2,3\}{1,2,3} , 代表 {2,3}\{2 , 3\}{2,3} 状态下读取 字符 aaa , 后继状态是 {1,2,3}\{1,2,3\}{1,2,3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | |
{3}\{3\}{3} |
十一、NFA 转 DFA ( 8 ) {2,3}\{2,3\}{2,3} 状态 读取 bbb 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | |
{3}\{3\}{3} |
表格 第 444 行 第 333 列 :
1 . 数值含义 : 该位置的含义是 {2,3}\{2 , 3\}{2,3} 开始状态下 , 读取 字符 bbb 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 222 状态下读取 bbb 字符后的后继状态 , 333 状态下读取 bbb 字符后的后继状态 ;
① 222 状态下读取 bbb 字符 后继状态是 {3}\{ 3 \}{3} ;
② 333 状态下读取 bbb 字符后继状态是 {∅}\{\varnothing\}{∅} ;
3 . 后继状态取并集 : 将上述的 两个 后继状态 {3}\{3\}{3} 和 {∅}\{ \varnothing \}{∅} , 取并集 , 就是 {2,3}\{2 , 3\}{2,3} 状态下读取 bbb 字符的后继状态 , 取并集的结果是 {3}\{3\}{3} ;
第 444 行 第 333 列 的 值是 {3}\{3\}{3} , 代表 {2,3}\{2 , 3\}{2,3} 状态下读取 字符 bbb , 后继状态是 {3}\{3\}{3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} |
十二、NFA 转 DFA ( 9 ) 选取后续需要分析的状态
选取原则 : 没有出现过的状态 , 都要进行分析 ;
{1,2,3}\{1 ,2,3\}{1,2,3} 是 新出现的状态 , 因此将这两个状态加入表格中 , 进行分析 ;
加入该状态后 , 最新表格如下 :
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | ||
{1,2,3}\{1,2,3\}{1,2,3} |
下面开始分析后续内容 ;
十三、NFA 转 DFA ( 10 ) {3}\{3\}{3} 状态 读取 aaa 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | ||
{1,2,3}\{1,2,3\}{1,2,3} |
表格 第 555 行 第 222 列 :
1 . 数值含义 : 该位置的含义是 {3}\{ 3\}{3} 开始状态下 , 读取 字符 aaa 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 333 状态下读取 aaa 字符后的后继状态 是 {1,3}\{1,3\}{1,3}
3 . 后继状态 : 第 555 行 第 222 列 的 值是 {1,3}\{1,3\}{1,3} , 代表 {3}\{3\}{3} 状态下读取 字符 aaa , 后继状态是 {1,3}\{1,3\}{1,3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | |
{1,2,3}\{1,2,3\}{1,2,3} |
十四、NFA 转 DFA ( 11 ) {3}\{3\}{3} 状态 读取 bbb 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | |
{1,2,3}\{1,2,3\}{1,2,3} |
表格 第 555 行 第 333 列 :
1 . 数值含义 : 该位置的含义是 {3}\{ 3\}{3} 开始状态下 , 读取 字符 bbb 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 333 状态下读取 bbb 字符后的后继状态 是 {∅}\{\varnothing \}{∅}
3 . 后继状态 : 第 555 行 第 333 列 的 值是 {∅}\{\varnothing \}{∅} , 代表 {3}\{3\}{3} 状态下读取 字符 bbb , 后继状态是 {∅}\{\varnothing \}{∅} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} |
十五、NFA 转 DFA ( 12 ) {1,2,3}\{1,2,3\}{1,2,3} 状态 读取 aaa 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} |
表格 第 666 行 第 222 列 :
1 . 数值含义 : 该位置的含义是 {1,2,3}\{1,2 , 3\}{1,2,3} 开始状态下 , 读取 字符 aaa 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 111 状态下读取 aaa 字符后的后继状态 , 222 状态下读取 aaa 字符后的后继状态 , 333 状态下读取 aaa 字符后的后继状态 ;
① 111 状态下读取 aaa 字符 后继状态是 {∅}\{ \varnothing \}{∅} ;
② 222 状态下读取 aaa 字符 后继状态是 {2,3}\{ 2 , 3 \}{2,3} ;
③ 333 状态下读取 aaa 字符后继状态是 {1,3}\{1 , 3\}{1,3} , 这里只要能到达状态 111 , 便需要无条件跳转到状态 333 , 因为 111 状态下读取空字符 ε\varepsilonε 即可转为 333 状态 , 因此 1,31,31,3 状态并列 ;
3 . 后继状态取并集 : 将上述的 333 个 后继状态 {∅}\{ \varnothing \}{∅} , {2,3}\{2, 3\}{2,3} 和 {1,3}\{ 1,3 \}{1,3} , 取并集 , 就是 {1,2,3}\{1 , 2 , 3\}{1,2,3} 状态下读取 aaa 字符的后继状态 , 取并集的结果是 {1,2,3}\{1,2,3\}{1,2,3} ;
第 666 行 第 222 列 的 值是 {1,2,3}\{1,2,3\}{1,2,3} , 代表 {1,2,3}\{1 , 2 , 3\}{1,2,3} 状态下读取 字符 aaa , 后继状态是 {1,2,3}\{1,2,3\}{1,2,3} 状态 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} | {1,2,3}\{1,2,3\}{1,2,3} |
十六、NFA 转 DFA ( 13 ) {1,2,3}\{1,2,3\}{1,2,3} 状态 读取 bbb 字符 后继状态分析
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} | {1,2,3}\{1,2,3\}{1,2,3} |
表格 第 666 行 第 333 列 :
1 . 数值含义 : 该位置的含义是 {1,2,3}\{1,2 , 3\}{1,2,3} 开始状态下 , 读取 字符 bbb 之后的后续状态集 ;
2 . 后继状态分析 : 分别考虑 111 状态下读取 bbb 字符后的后继状态 , 222 状态下读取 bbb 字符后的后继状态 , 333 状态下读取 bbb 字符后的后继状态 ;
① 111 状态下读取 bbb 字符 后继状态是 {2}\{ 2\}{2} ;
② 222 状态下读取 aaa 字符 后继状态是 {3}\{ 3 \}{3} ;
③ 333 状态下读取 aaa 字符后继状态是 {∅}\{\varnothing\}{∅} ;
3 . 后继状态取并集 : 将上述的 333 个 后继状态 {2}\{2\}{2} , {3}\{ 3 \}{3} 和 {∅}\{ \varnothing \}{∅} , 取并集 , 就是 {1,2,3}\{1 , 2 , 3\}{1,2,3} 状态下读取 bbb 字符的后继状态 , 取并集的结果是 {2,3}\{2,3\}{2,3} ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {2,3}\{2,3\}{2,3} |
十七、NFA 转 DFA ( 14 ) 结果分析
1 . 消除不确定性 : 下面的表格就是将 非确定性有限自动机 ( NFA ) 转为 确定性有限自动机 ( DFA ) 的结果 , 将状态集合当做一个新的状态 , 新状态由之前的 NFA 中的不同状态组合而来 , 由此消除不确定性 ;
aaa | bbb | |
---|---|---|
{1,3}\{1, 3 \}{1,3} | {1,3}\{1 , 3\}{1,3} | {2}\{2\}{2} |
{2}\{2\}{2} | {2,3}\{2,3\}{2,3} | {3}\{3\}{3} |
{2,3}\{2,3\}{2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {3}\{3\}{3} |
{3}\{3\}{3} | {1,3}\{1,3\}{1,3} | {∅}\{\varnothing \}{∅} |
{1,2,3}\{1,2,3\}{1,2,3} | {1,2,3}\{1,2,3\}{1,2,3} | {2,3}\{2,3\}{2,3} |
2 . 定义开始状态 : 将 {1,3}\{1, 3 \}{1,3} 定义成开始状态 ;
3 . 定义接收状态 : 原来的 非确定性有限自动机 ( NFA ) 中 111 是接受状态 , 在新的 确定性有限自动机 ( DFA ) 中 , 只要状态集合中包含 111 , 那么该状态集合就是 接受状态 , 因此这里 {1,3}\{1, 3 \}{1,3} 和 {1,2,3}\{1,2,3\}{1,2,3} 两个状态集 代表的 新状态 是接受状态 ;
【计算理论】非确定性有限自动机 ( NFA ) 转换成 确定性有限自动机 ( DFA )相关推荐
- 子集构造法NFA转换成DFA
教材<编译原理>(龙书)第2版 关于这部分,教材在P94页有说明,但是我觉得不容易理解,下面通过两个例题来理解一下. 目录 例题一: 例题二: PS: 评论区: 第一次: 第二次: 第三次 ...
- 【计算理论】计算复杂性 ( 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 )
文章目录 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 在上一篇博客 [计算理论]计算复杂性 ( 非确定性 ...
- jQuery 将本地时间转换成 UTC 时间,计算时差,将UTC时间转换成 本地 时间
//使用方式 let date = 'YYYY-MM-DD'; //你的时间格式(你的时间)//调用 FormatUtcDate(new Date( date + ' 00:00:00 ')) For ...
- NFA转换成DFA的方法——子集法
承接上文在上一篇文章中说了 DFA 是 NFA 的特例 对于每个NFA M 存在一个DFA M" 使得 L(M)=L(M") NFA缺点: 其不确定性使得识别单词符号的速度较慢 D ...
- 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★
文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...
- 【计算理论】计算复杂性 ( NP 类不同表述 | 团问题 | P 对 NP 问题 )
文章目录 一.NP 类不同表述 二.团问题 三.P 对 NP 问题 ( P vs NP ) 一.NP 类不同表述 NP\rm NPNP 对应的 确定性图灵机 表述 : NP\rm NPNP 类就是有 ...
- 将本地时间转换成 UTC 时间,0时区时间
// 将时间戳转换成日期格式: function timestampToTime(timestamp) { var date = new Date(timestamp);//时间戳为10位需*1000 ...
- 十六进制转换成字符串——CRC
继前天的,完成了计算阶乘,今天计算CRC32. 本来将数字转换成字符串直接使用sprintf就可以了,我在PC上也这样用,没问题.但我对DSP完全不熟悉,在DSP端的代码中使用如sprintf这些函数 ...
- 经纬度坐标转换成px_知道经纬度坐标如何转换成 X Y坐标
地理坐标定义规则:X轴(代表经度)向右递增,Y轴(纬度)向上递增,就好比小学学过的平面坐标.向左.向下的规则. 屏幕坐标定义规则:X轴向右递增,Y轴向下递增.可以看出,地理坐标和屏幕坐标的区别仅仅只是 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★
文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...
最新文章
- Asp.net实现在线截图(大图截取为小图)
- Matlab---傅里叶变换---通俗理解(一)
- c# 分类 机器学习_C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”...
- 神经网络与深度学习——TensorFlow2.0实战(笔记)(一)
- yum安装docker No package docker available
- 从有限状态机(FSM)到行为树(Behavior Tree)(1)
- coap协议详解 服务器,COAP协议解析和简单打包实现
- 爬虫日记(6):beautifulsoup的基本使用2
- 《孤独的青春创造不孤独的人生》
- 一个简洁的背单词、背短语python程序——英文背记系统(自用)
- python37.dll缺失是什么情况_修复python37.dll
- LiteOS通信模组教程04-深度剖析LiteOS的AT框架
- 并发编程之二:线程创建方法、运行原理、常见方法(sleep,join,interrupt,park,守护线程等)
- 计算机原理学习(序)
- 应届生年薪30万,把员工宠上天?测试员在快手工作究竟是什么样的体验?
- Factor_mimicking_portfolio(模仿因子的投资组合):EAP.fama_macbeth.Factor_mimicking_portfolio
- 爱了爱了!GitHub7200星,一个可以听全网无损音乐的神器
- “每天都被自己帅到睡不着” 用古文怎么说?
- ds5 debug arm64 模拟器
- Linux 虚拟化技术 KVM