【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )
文章目录
- 一、推广型的非确定性有限自动机 ( GNFA ) 引入
- 二、推广型的非确定性有限自动机 ( GNFA ) 删除状态
- 三、确定性有限自动机 ( DFA ) 转为 正则表达式
- 四、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 1 ) 添加开始状态 SSS 和结束状态 TTT
- 五、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 删除方法
- 六、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 信息梳理
- 七、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 : 111 -> 222 -> 333 生成信息 111 -> 333
- 八、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 : 333 -> 222 -> 333 生成信息 333 -> 333
- 九、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 阶段性结果
- 十、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 信息梳理
- 十一、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 : 333 -> 111 -> 333 生成信息 333 -> 333
- 十二、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 : SSS -> 111 -> 333 生成信息 SSS -> 333
- 十三、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 2,12 , 12,1 阶段性结果
- 十四、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 4 ) 删除 状态 333 信息梳理
- 十五、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 4 ) 删除 状态 333 : SSS -> 333 -> TTT 生成信息 SSS -> TTT
- 十六、确定性有限自动机 ( DFA ) 转为 正则表达式 总结
一、推广型的非确定性有限自动机 ( GNFA ) 引入
1 . 给定一个自动机 , 必有一个正则表达式可以表示其所识别的语言 ;
2 . 引入 推广型的非确定性有限自动机 ( GNFA ) : 首先要构造一个推广的一般型的非确定性有限自动机 , 每次消除一个状态 , 最后只剩下两个状态 , 此时箭头上的正则表达式就是最终的正则表达式 ;
上述自动机是一个 推广型的非确定性有限自动机 ( GNFA ) , 箭头上 不是单个字符 或 空字符 , 而是 正则表达式 ;
3 . 推广型的非确定性有限自动机 ( GNFA ) 中的推广的体现 :
① 非确定性有限自动机 ( NFA ) : 箭头上 只能出现 字符 , 空字符串 , 222 种输入 , 不能出现其它输入内容 ;
② 推广型的非确定性有限自动机 ( GNFA ) : 箭头上 可以出现 字符 , 空字符串 , 空集 , 正则表达式 , 444 种输入 ;
4 . 推广型的非确定性有限自动机 ( GNFA ) 与 非确定性有限自动机 ( NFA ) 是等价的 ;
二、推广型的非确定性有限自动机 ( GNFA ) 删除状态
给定一个 推广型的非确定性有限自动机 ( GNFA ) , 找到一个正则表达式 , 代表给定自动机的语言 ;
1 . 需求描述 : 上述自动机中 , R1,R2,R3,R4R_1 , R_2, R_3, R_4R1,R2,R3,R4 都是正则表达式 ;
删除 q0q_0q0 状态 : 目前希望能删除 自动机中的 q0q_0q0 状态 , 删除 q0q_0q0 之后 , 会省略一部分语言 , 这里 省略了 R1,R2,R3R_1 , R_2 , R_3R1,R2,R3 ;
语言要求 : 将 q0q_0q0 状态删除后 , 不影响整个自动机所接受的语言 , 那么需要将省略的部分语言 , 补充到 R4R_4R4 中 ;
2 . R1,R2,R3R_1 , R_2 , R_3R1,R2,R3 关系分析 :
① R2R_2R2 星运算 : R2R_2R2 是一个循环 , q0q_0q0 接受 R2R_2R2 后 , 仍然保持 q0q_0q0 状态 , 这里的该循环的正则表达式表示为 (R2)∗(R_2)^*(R2)∗ ;
② R1R_1R1 与 (R2)∗(R_2)^*(R2)∗ 串联运算 : R1R_1R1 与 (R2)∗(R_2)^*(R2)∗ 是串联关系 , 表示为 R1(R2)∗R_1 (R_2)^*R1(R2)∗
③ 与 R3R_3R3 的串联运算 : R1(R2)∗R_1 (R_2)^*R1(R2)∗ 与 R3R_3R3 是串联关系 , 表示为 R1(R2)∗R3R_1 (R_2)^* R_3R1(R2)∗R3 ;
3 . 并运算 : R1(R2)∗R3R_1 (R_2)^* R_3R1(R2)∗R3 与 R4R_4R4 是并集关系 , 都是 qiq_iqi 到 qjq_jqj 的输入的正则表达式 ;
4 . 两个正则表达式并运算表示为 : (R1(R2)∗R3)∪R4( R_1 (R_2)^* R_3 ) \cup R_4(R1(R2)∗R3)∪R4
三、确定性有限自动机 ( DFA ) 转为 正则表达式
上图中的自动机是一个 333 个状态的 确定性有限自动机 ( DFA ) ;
将上述 确定性有限自动机 ( DFA ) 转为正则表达式 ;
四、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 1 ) 添加开始状态 SSS 和结束状态 TTT
1 . 添加开始和结束状态 :
① 添加开始状态 : 添加新的开始状态 SSS , 使用 ε\varepsilonε 箭头指向当前 确定性有限自动机 ( DFA ) 的 开始状态 ;
② 添加结束状态 : 再次添加一个 接受状态 , 从 确定性有限自动机 ( DFA ) 的接受状态 指向该新的结束状态 , 该新添加的结束状态 是 接受状态 ;
2 . 确定性有限自动机 ( DFA ) 转为 正则表达式 思想 : 逐步删除 1,2,31,2,31,2,3 状态 , 每次删除一个状态 , 生成新的正则表达式 , 最后就剩下 开始状态 SSS , 和结束状态 TTT , 最后剩下的就是 SSS 到 TTT 状态的正则表达式 , 也是自动机的正则表达式 ;
五、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 删除方法
1 . 删除 222 状态 :
① 信息抽取转移 : 找到 与 222 状态 所有的相关的信息 , 添加到其它的箭头上 , 如果没有创建一个新的箭头 ;
② 222 状态的输入和输出 : 哪些状态 有箭头 输入到 222 状态 , 222 状态 有哪些箭头 输出到了其它状态 ;
③ 信息转移 : 将每个输入 和 每个输出的信息全部转移 , 一条信息也不能遗漏 ;
④ 222 状态的输入输出统计 : 有 333 条输入 , 222 条输出 ; 其中有 一条输入输出是从 222 状态输出指向 它自己 , 共有 444 个箭头信
息 ; 外部输入有 2 条 , 外部输出 有 111 条 , 需要生成的箭头信息个数是 外部输入条数×外部输出条数外部输入条数 \times 外部输出条数外部输入条数×外部输出条数 ;
2 . 222 状态的循环 ( 111 输入 111 输出 ) : 222 状态下读取 bbb , 仍然回到 222 状态 ; 这 111 个输入 , 111 个输出 , 是从 222 状态输出到 222 状态 , 这是一个 星计算 ; 使用 b∗b^*b∗ 表示 ;
六、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 信息梳理
状态 222 信息梳理如下 ;
1 . 222 状态信息输入 :
SSS 状态 读取 ε\varepsilonε 跳转到 111 状态 ;
333 状态 读取 aaa 跳转到 111 状态 ;
2 . 222 状态信息输出 :
111 状态读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 正则表达式 跳转到 333 状态 ;
3 . 箭头信息生成个数 : 外部输入有 2 条 , 外部输出 有 111 条 , 需要生成的箭头信息条数 :
外部输入条数×外部输出条数=2×1=2外部输入条数 \times 外部输出条数 = 2 \times 1 = 2外部输入条数×外部输出条数=2×1=2
七、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 : 111 -> 222 -> 333 生成信息 111 -> 333
1 . 111 -> 222 -> 333 状态跳转 :
111 状态读取 aaa 跳转到 222 状态 : 这里是状态 222 的一条输入 , 使用 aaa 表示 ;
222 状态读取 bbb 跳转到 222 状态 : 这是无限的星计算 , 使用 b∗b^*b∗ 表示 ;
222 状态读取 aaa 跳转到 333 状态 : 这里是状态 222 的一条输出 , 使用 aaa 表示 ;
2 . 333 个正则表达式是串联关系 ;
中间经历的过程是 111 状态输入 aaa 跳转到 222 状态 , 222 本身可以有无限个星计算 , 222 状态输入 aaa 跳转到 333 状态 ;
使用正则表达式表示为 ab∗aab^*aab∗a ;
4 . 生成箭头信息 :
111 状态下 , 读取 ab∗aab^*aab∗a 正则表达式 , 可以跳转到 333 状态 ;
将 ab∗aab^*aab∗a 正则表达式 与 111 到 333 跳转箭头上的 bbb 进行并计算 , 得到
(ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b
这是 111 跳转到 333 的正则表达式 ;
八、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 : 333 -> 222 -> 333 生成信息 333 -> 333
1 . 333 -> 222 -> 333 状态跳转 :
333 状态读取 bbb 跳转到 222 状态 : 这里是状态 222 的一条输入 , 使用 bbb 表示 ;
222 状态读取 bbb 跳转到 222 状态 : 这是无限的星计算 , 使用 b∗b^*b∗ 表示 ;
222 状态读取 aaa 跳转到 333 状态 : 这里是状态 222 的一条输出 , 使用 aaa 表示 ;
2 . 333 个正则表达式是串联关系 ;
中间经历的过程是 333 状态输入 bbb 跳转到 222 状态 , 222 本身可以有无限个星计算 , 222 状态输入 aaa 跳转到 333 状态 ;
三者串联关系 , 使用正则表达式表示为 bb∗abb^*abb∗a ;
即 333 状态下 , 读取 bb∗abb^*abb∗a 正则表达式 , 可以跳转到 333 状态 ;
3 . 生成箭头信息 :
给 333 状态添加一个箭头指向它自身 , 箭头的接收的正则表达式是
bb∗abb^*abb∗a
这是 111 跳转到 333 的正则表达式 ; 表示 333 状态下接收 bb∗abb^*abb∗a 正则表达式 , 仍然跳转到 333 状态 ;
九、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 222 阶段性结果
删除 222 状态结果 :
十、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 信息梳理
状态 111 信息梳理如下 ;
1 . 111 状态信息输入 :
SSS 状态 读取 ε\varepsilonε 跳转到 111 状态 ;
333 状态 读取 aaa 跳转到 111 状态 ;
2 . 111 状态信息输出 :
111 状态读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 正则表达式 跳转到 333 状态 ;
3 . 箭头信息生成个数 : 外部输入有 2 条 , 外部输出 有 111 条 , 需要生成的箭头信息条数 :
外部输入条数×外部输出条数=2×1=2外部输入条数 \times 外部输出条数 = 2 \times 1 = 2外部输入条数×外部输出条数=2×1=2
十一、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 : 333 -> 111 -> 333 生成信息 333 -> 333
1 . 333 -> 111 -> 333 状态跳转 :
333 状态 读取 aaa 跳转到 111 状态 , 正则表达式 表示为 aaa ;
111 状态 读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 正则表达式 跳转到 333 , 正则表达式 表示为 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b ;
2 . 正则表达式 : 上述两个正则表达式是串联关系 , 正则表达式表示为 a((ab∗a)∪b)a ( (ab^*a) \cup b )a((ab∗a)∪b)
3 . 生成新的箭头信息 :
新增加的 333 状态下读取 a((ab∗a)∪b)a ( (ab^*a) \cup b )a((ab∗a)∪b) 跳转到 333 ;
与原来的 333 读取 bb∗abb^*abb∗a 跳转到 333 是并联关系 ,
最终的 333 读取一个正则表达手 跳转到 333 状态 , 的正则表达式为
(a((ab∗a)∪b))∪(bb∗a)( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a )(a((ab∗a)∪b))∪(bb∗a)
十二、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 3 ) 删除 状态 111 : SSS -> 111 -> 333 生成信息 SSS -> 333
1 . SSS -> 111 -> 333 状态跳转 :
SSS 状态 读取 ε\varepsilonε 跳转到 111 状态 , 正则表达式 表示为 ε\varepsilonε ;
111 状态 读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 正则表达式 跳转到 333 , 正则表达式 表示为 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b ;
上述两个正则表达式是串联关系 , 正则表达式表示为 ε∪((ab∗a)∪b)\varepsilon \cup ( (ab^*a) \cup b )ε∪((ab∗a)∪b) , 其中 ε\varepsilonε 可以省略 , 最终表示为 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b
2 . 新增加 SSS 状态 到 333 状态之间的跳转 : SSS 状态下读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 正则表达式 , 跳转到 333 状态 ;
十三、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 2 ) 删除 状态 2,12 , 12,1 阶段性结果
十四、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 4 ) 删除 状态 333 信息梳理
状态 333 信息梳理 :
1 . 333 状态信息输入 :
SSS 状态 读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 跳转到 333 状态 ;
333 状态 读取 (a((ab∗a)∪b))∪(bb∗a)( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a )(a((ab∗a)∪b))∪(bb∗a) 跳转到 333 状态 ;
2 . 333 状态信息输出 :
333 状态 读取 (a((ab∗a)∪b))∪(bb∗a)( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a )(a((ab∗a)∪b))∪(bb∗a) 跳转到 333 状态 ;
333 状态读取 ε\varepsilonε 正则表达式 跳转到 TTT 状态 ;
3 . 箭头信息生成个数 : 自身循环有一个 , 从 333 状态 自身输出到输入 , 外部输入有 1 条 , 外部输出 有 111 条 , 需要生成的箭头信息条数 :
外部输入条数×外部输出条数=1×1=1外部输入条数 \times 外部输出条数 = 1 \times 1 = 1外部输入条数×外部输出条数=1×1=1
十五、确定性有限自动机 ( DFA ) 转为 正则表达式 ( 4 ) 删除 状态 333 : SSS -> 333 -> TTT 生成信息 SSS -> TTT
1 . SSS -> 333 -> TTT 状态跳转 :
SSS 状态 读取 (ab∗a)∪b(ab^*a) \cup b(ab∗a)∪b 跳转到 333 状态 ;
333 状态 读取 (a((ab∗a)∪b))∪(bb∗a)( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a )(a((ab∗a)∪b))∪(bb∗a) 跳转到 333 状态 , 星计算 , 表示成 (a((ab∗a)∪b))∪(bb∗a)∗( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a )^*(a((ab∗a)∪b))∪(bb∗a)∗
333 状态读取 ε\varepsilonε 正则表达式 跳转到 TTT 状态 ;
上述 333 个正则表达式是串联关系 , 正则表达式表示为 :
((ab∗a)∪b)∘((a((ab∗a)∪b))∪(bb∗a))∗( (ab^*a) \cup b ) \circ ( \quad ( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a ) \quad )^*((ab∗a)∪b)∘((a((ab∗a)∪b))∪(bb∗a))∗
2 . 新增加 SSS 状态 到 TTT 状态之间的跳转 : SSS 状态下读取 ((ab∗a)∪b)∘((a((ab∗a)∪b))∪(bb∗a))∗( (ab^*a) \cup b ) \circ ( \quad ( \quad a \; ( \; (ab^*a) \cup b \; ) \quad ) \cup ( bb^*a ) \quad )^*((ab∗a)∪b)∘((a((ab∗a)∪b))∪(bb∗a))∗ 正则表达式 , 跳转到 TTT 状态 ;
十六、确定性有限自动机 ( DFA ) 转为 正则表达式 总结
由上述示例可知 , 任何 确定性有限自动机 都可以转为 正则表达式 , 非确定性有限自动机 与 确定性有限自动机 又是等价的 , 因此 有限自动机 都可以转为 正则表达式 ;
【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )相关推荐
- 计算理论——正则语言,上下文无关文法,图灵机,可判定性,可规约性
目录 第一章 正则语言 状态图 自动机的形式化定义 非确定性 正则表达式 泵引理 使用泵引理证明某个语言非正则的方法 第二章 上下文无关文法 上下文无关文法概述 1.上下文无关文法形式化定义 2.上下 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★
文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...
- 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★
文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...
- 【计算理论】可判定性 ( 非确定性有限自动机的接受问题 | 证明 “非确定性有限自动机的接受问题“ 的可判定性 )
文章目录 一.非确定性有限自动机的接受问题 二.证明 "非确定性有限自动机的接受问题" 可判定性 一.非确定性有限自动机的接受问题 非确定性有限自动机 的 接受问题 , 首先将 计 ...
- 【计算理论】图灵机 ( 非确定性图灵机 与 计算树 | 非确定性 | 非确定性图灵机 与 确定性图灵机 相互模仿 | 非确定性图灵机 -> 确定性图灵机 )
文章目录 一.非确定性图灵机 与 计算树 二.非确定性 三.非确定性图灵机 与 确定性图灵机 相互模仿 四.非确定性图灵机 -> 确定性图灵机 一.非确定性图灵机 与 计算树 非确定性图灵机体现 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA | 示例 ) ★★
文章目录 一.正则表达式转为非确定性有限自动机 NFA 要点 二.正则表达式转为非确定性有限自动机 NFA 示例 1 三.正则表达式转为非确定性有限自动机 NFA 示例 2 四.正则表达式转为非确定性 ...
- 【计算理论】自动机设计 ( 设计自动机 | 确定性自动机设计示例 | 确定性与非确定性 | 自动机中的不确定性 )
文章目录 一. 设计自动机 ( 语言要求 ) 二. 设计自动机 ( 1 ) 开始状态 三. 设计自动机 ( 2 ) 状态 SSS 状态类型确定 四. 设计自动机 ( 3 ) 状态 SSS 输入输出分析 ...
- 【计算理论】计算复杂性 ( 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 )
文章目录 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 证明 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 在上一篇博客 [计算理论]计算复杂性 ( 非确定性 ...
- 【计算理论】计算复杂性 ( 非确定性图灵机的时间复杂度 | 非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的关系 )
文章目录 一.非确定性图灵机的时间复杂度 二.非确定性图灵机 与 确定性图灵机 的时间复杂度 之间的指数关系 一.非确定性图灵机的时间复杂度 给定一个非确定性图灵机 , 该图灵机是 判定机 , 在所有 ...
最新文章
- 查缺补漏 | Python自定义函数
- Thinkphp5 开发 OA 办公系统 - 数据库设计
- 使用Nginx的proxy_cache缓存功能取代Squid[原创]
- docker数据卷备份恢复以及配置桥接网络
- 2020年特斯拉是在中国获得补贴最多的电动汽车制造商
- 图解 Java 中的数据结构及原理,傻瓜也能看懂!
- android ble 发送指令,Android – 如何通过蓝牙低能耗(BLE)链接发送数据?
- Java 检测字符是否存在手机号或返回该手机号
- 微信小程序实现语音播报
- anvyiew java版_细说Anyview阅读器背后的故事
- 八数码问题BFS算法
- 小打卡软件测试,考勤打卡软件大测评,这款打卡软件你有在用吗?
- Linux环境变量PSI指什么,psi是什么单位(pSI指标应用原则)
- 计算机图形学实战——Bresenham直线光栅化算法绘制旋转线
- 【APICloud系列|15】上架ios应用到苹果应用市场总结
- 图说三极管,太容易懂了!(史上最详细版本)
- 百度、阿里、腾讯、有道各平台翻译API申请教程
- 有滞后单容对象MATLAB仿真,自动化生产线实训实验报告
- 【Go语言学习之路 1】下载,安装,环境变量,IDE
- vue 微信公众号支付接口_vue页面在微信公众号调用支付接口