文章目录

  • 一、非确定性有限自动机 组成部分
  • 二、确定性有限自动机 ( 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 )相关推荐

  1. 子集构造法NFA转换成DFA

    教材<编译原理>(龙书)第2版 关于这部分,教材在P94页有说明,但是我觉得不容易理解,下面通过两个例题来理解一下. 目录 例题一: 例题二: PS: 评论区: 第一次: 第二次: 第三次 ...

  2. 【计算理论】计算复杂性 ( 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 )

    文章目录 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 在上一篇博客 [计算理论]计算复杂性 ( 非确定性 ...

  3. jQuery 将本地时间转换成 UTC 时间,计算时差,将UTC时间转换成 本地 时间

    //使用方式 let date = 'YYYY-MM-DD'; //你的时间格式(你的时间)//调用 FormatUtcDate(new Date( date + ' 00:00:00 ')) For ...

  4. NFA转换成DFA的方法——子集法

    承接上文在上一篇文章中说了 DFA 是 NFA 的特例 对于每个NFA M 存在一个DFA M" 使得 L(M)=L(M") NFA缺点: 其不确定性使得识别单词符号的速度较慢 D ...

  5. 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★

    文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...

  6. 【计算理论】计算复杂性 ( NP 类不同表述 | 团问题 | P 对 NP 问题 )

    文章目录 一.NP 类不同表述 二.团问题 三.P 对 NP 问题 ( P vs NP ) 一.NP 类不同表述 NP\rm NPNP 对应的 确定性图灵机 表述 : NP\rm NPNP 类就是有 ...

  7. 将本地时间转换成 UTC 时间,0时区时间

    // 将时间戳转换成日期格式: function timestampToTime(timestamp) { var date = new Date(timestamp);//时间戳为10位需*1000 ...

  8. 十六进制转换成字符串——CRC

    继前天的,完成了计算阶乘,今天计算CRC32. 本来将数字转换成字符串直接使用sprintf就可以了,我在PC上也这样用,没问题.但我对DSP完全不熟悉,在DSP端的代码中使用如sprintf这些函数 ...

  9. 经纬度坐标转换成px_知道经纬度坐标如何转换成 X Y坐标

    地理坐标定义规则:X轴(代表经度)向右递增,Y轴(纬度)向上递增,就好比小学学过的平面坐标.向左.向下的规则. 屏幕坐标定义规则:X轴向右递增,Y轴向下递增.可以看出,地理坐标和屏幕坐标的区别仅仅只是 ...

  10. 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★

    文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...

最新文章

  1. Asp.net实现在线截图(大图截取为小图)
  2. Matlab---傅里叶变换---通俗理解(一)
  3. c# 分类 机器学习_C#也能做机器学习?基于.NET的AI智能应用市场还是一片“处女地”...
  4. 神经网络与深度学习——TensorFlow2.0实战(笔记)(一)
  5. yum安装docker No package docker available
  6. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  7. coap协议详解 服务器,COAP协议解析和简单打包实现
  8. 爬虫日记(6):beautifulsoup的基本使用2
  9. 《孤独的青春创造不孤独的人生》
  10. 一个简洁的背单词、背短语python程序——英文背记系统(自用)
  11. python37.dll缺失是什么情况_修复python37.dll
  12. LiteOS通信模组教程04-深度剖析LiteOS的AT框架
  13. 并发编程之二:线程创建方法、运行原理、常见方法(sleep,join,interrupt,park,守护线程等)
  14. 计算机原理学习(序)
  15. 应届生年薪30万,把员工宠上天?测试员在快手工作究竟是什么样的体验?
  16. Factor_mimicking_portfolio(模仿因子的投资组合):EAP.fama_macbeth.Factor_mimicking_portfolio
  17. 爱了爱了!GitHub7200星,一个可以听全网无损音乐的神器
  18. “每天都被自己帅到睡不着” 用古文怎么说?
  19. ds5 debug arm64 模拟器
  20. Linux 虚拟化技术 KVM

热门文章

  1. 201671030111 词频统计软件项目报告
  2. 虚拟机安装后找不到操作系统
  3. 大学生职业生涯规划计划与路径_大学生职业生涯的规划路径
  4. 计算机删除文件的原理,三个简单步骤,马上恢复被永久删除的文件
  5. HTML中img路径问题
  6. 2022年互联网寒冬,裁员消息频出,软件测试人员该如何破局?
  7. 微信小程序优惠券制作方法
  8. 介绍一种超大文件高速传输解决方案
  9. SI24R1引脚及软硬件中文开发资料
  10. Tomcat 修改网站旁边的小图标