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

简介: 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA ) ★★

文章目录

一、非确定性有限自动机 ( NFA ) 转为 确定性有限自动机 ( DFA )

二、转换方法与要点





一、非确定性有限自动机 ( NFA ) 转为 确定性有限自动机 ( DFA )


确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 之间是相互等价的 ;


确定性的有限自动机 ( DFA ) 可以 看作是非确定性有限自动机 ( NFA ) ;



确定性有限自动机 给定一个输入 , 其输出时唯一的 ;


非确定性有限自动机的定义 包含 确定性有限自动机的 定义中 ;



NFA 的后继状态 可以是 0 00 个 , 1 11 个 或 多个 , DFA 每个状态只能有 1 11 个后继状态 ;


确定性有限自动机 ( DFA ) 就是 特殊的 非确定性有限自动机 ( NFA ) ;


可以证明非确定性有限自动机 ( NFA ) , 必定有一个 确定性有限自动机 ( DFA ) 与其等价 ;




参考博客 :


【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

【计算理论】非确定性有限自动机 ( NFA ) 转换成 确定性有限自动机 ( DFA )





二、转换方法与要点


1. 转换方法 :


从 起始状态 开始推演运行 ,


列出所有的 分支步骤 ,


注意 计算分叉节点 , 会产生多个后续状态 ,


此时就生成了 新的状态 ,


这些新的状态就是非确定性有限自动机 转换成的 确定性有限自动机的 新状态 ;



2. 转换要点 :


① 新状态生成时机 : 有两种情况会出现计算分支 ,


情况一 : 状态有 ε \rm \varepsilonε 无条件跳转 , 如下图的 1 11 状态 , 会无条件跳转到 3 33 状态 , 此时就会出现两个后续状态 { 1 , 3 } \rm \{ 1, 3 \}{1,3} ,


情况二 : 读取同样的字符 , 有两个后继状态 , 如 2 22 状态下读取 a \rm aa 字符 , 会跳转到 2 22 状态和 3 33 状态 , 因此其后继状态是 { 2 , 3 } \rm \{ 2, 3 \}{2,3} ,


情况三 : 计算出现新状态后 , 新状态的后继状态 , 一般也是一个集合 , 当计算 { 1 , 3 } \rm \{ 1, 3 \}{1,3} 的后续状态时 , 会分别计算集合中的两个状态分别读取 a \rm aa 字符的后继状态 , 取并集 ;

image.png



② 新状态的计算机制 : 如果生成了一个新的状态 , { 1 , 3 } \rm \{ 1, 3 \}{1,3} , 如果要计算其后继状态时 , 就需要分别计算 1 11 和 3 33 的后继状态, 然后取并集 ;


③ 空集 : 在推演计算时 , 有可能会出现空集 , 如 { 3 } \rm \{ 3 \}{3} 状态读取 b \rm bb 字符的后继状态没有 , 就是空集 ;



3. 接受状态 : 如果最终的 DFA 的新状态集合中 , 包含 NFA 的接受状态 , 那么该新状态就是接受状态 ;



4. 空集 : 如果其中有空集 , 那么将空集也当做一个状态 , 空集状态下读取任何字符都是空集 ;



5 . 后继状态有 ε \rm \varepsilonε 无条件跳转 : 如果读取字符后跳转的 后继状态有 ε \rm \varepsilonε 无条件跳转 , 则该后继状态会是两个状态的集合 , 如 : { 3 } \rm \{ 3 \}{3} 状态读取 a \rm aa 字符跳转到 1 11 状态 , 而 1 11 状态无条件跳转到 3 33 状态 , 则后继状态是 { 1 , 3 } \rm \{1, 3\}{1,3} ;




参考博客 :


【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )

【计算理论】非确定性有限自动机 ( NFA ) 转换成 确定性有限自动机 ( DFA )


目录
相关文章
|
Rust 算法 安全
【密码学】一文读懂MurMurHash2
上次我们聊过了一代的MurMurHash算法,是的,我又来水文章了,今天呢,接着来聊一下二代的MurMurHash算法,二代算法的整体结构实际上和一代算法差不太多,只是对于每一轮数据的处理过程当中的运算有一些差异,算法的来源依然是来自于Google官网给提供的源码,对着源码看的结构,对于这个算法呢,有两个版本,一个是32位的,一个是64位的,对于32位的算法和64位的算法,区别在于两个初始的魔数不同,整体运算过程还是十分相似的。
2712 0
【密码学】一文读懂MurMurHash2
|
网络协议 Unix Linux
`AF_INET`
`AF_INET`
467 3
|
应用服务中间件 Shell Linux
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
教你如何在云服务器上安装并配置web服务器(这里以nginx服务器为例,操作系统linux)
|
对象存储
如何设置对象存储OSS跨域(CORS)?
CORS的中文名是跨域资源共享,是HTML5提供的标准跨域解决方案。跨域访问,也叫JavaScript跨域访问问题,是浏览器出于安全考虑而设置的一个限制,即同源策略。当来自于A网站的页面中的JavaScript代码希望访问B网站的时候,浏览器会拒绝该访问,因为A、B两个网站是属于不同的域。
9444 0
|
算法 安全 API
淘宝获得淘口令真实URL接口的技术解析
淘口令是淘宝的加密链接,用于商品推广。官方未提供直接解密API,但第三方工具或API能模拟解析。示例代码展示了如何通过第三方接口(需替换为真实接口)获取淘口令所对应的URL、标题和图片信息,但使用时需注意安全风险。
718 2
|
Web App开发 搜索推荐 测试技术
网站速度测试
【4月更文挑战第8天】网站速度测试
1094 2
|
前端开发 JavaScript 异构计算
简述浏览器的渲染原理
浏览器渲染原理主要包括以下步骤:1)解析HTML文档生成DOM树;2)解析CSS生成CSSOM树;3)结合DOM与CSSOM生成渲染树;4)布局计算(回流)确定元素大小和位置;5)绘制(Paint)将节点转为图形内容;6)合成(Composite)多层图像。整个过程从文档解析到最终输出完整网页,并通过优化技术提升性能。
|
12月前
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
676 5
|
数据采集 算法 物联网
【算法精讲系列】阿里云百炼SFT微调实践分享
本内容为您提供了百炼平台SFT微调的实践案例,帮助您方便并快速借助模型微调定制化您自己的专属模型。
3354 14
|
监控 数据挖掘 数据安全/隐私保护
ERP系统中的预算管理与控制
【7月更文挑战第25天】 ERP系统中的预算管理与控制
878 3