热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

不确定性有限自动机

对比确定性有限自动机(DFA)DFA:当给定了当前所在状态,在遇到一个字符之后,我们就可以确定要向哪一个状态转移。打个比方,就是在我们当前位置没有岔路口,没有给我们多选的机会。NF
对比确定性有限自动机(DFA)

DFA:当给定了当前所在状态,在遇到一个字符之后,我们就可以确定要向哪一个状态转移。打个比方,就是在我们当前位置没有岔路口,没有给我们多选的机会。
NFA:NFA即不确定性有限自动机(nondeterminism finite automaton),它允许我们在遇到一个状态时可以有多条转移路径可以选择。特殊的是,它允许我们不读入任何字符就进行状态转移(此操作称为 ϵmove ϵ − m o v e )。
能力: 令人惊讶的是,DFA和NFA的能力相同。也就是说,DFA和NFA都只能识别正则语言。所以,现在一种语言是正则的当且仅当它可以被某个DFA或NFA识别。此结论在之后的文章中将会证明。

NFA的正式定义

NFA的正式定义和DFA差不多,但是因为NFA可以同时向多个状态转移,所以它的转移函数的值域应该是状态集 Q Q 幂集(一个幂集是这个集合的所有子集的集合),记作 P(Q) P ( Q ) 。除此之外,由于NFA还有 ϵmove ϵ − m o v e ,所以它的转移函数应该是 Q×ϵP(Q) Q × ∑ ϵ → P ( Q ) ,其中 ϵ={ ϵ} ∑ ϵ = ∑ ∪ { ϵ } 。因此我们可以继续用5元组 (Q,,δ,q0,F) ( Q , ∑ , δ , q 0 , F ) 定义NFA。
1. Q Q 是有限状态集。
2. 是有限字符表。
3. δ δ 是转移函数: Q×ϵP(Q) Q × ∑ ϵ → P ( Q )
4. q0 q 0 是开始状态,它是 Q Q 中的元素。
5. F F 是接受状态集合, 它是 Q Q 的子集。

例子

《不确定性有限自动机》
对于 N1=(Q,,δ,q1,F) N 1 = ( Q , ∑ , δ , q 1 , F ) ,其中
1. Q={  q1,q2,q3,q4} Q = {   q 1 , q 2 , q 3 , q 4 }
2. ={  0,1} ∑ = {   0 , 1 }
3. δ δ 是:

q1q2q3q40{ q1}{ q3}{ q4}1{  q1,q2}{ q4}{ q4}ϵ{ q3} 0 1 ϵ q 1 { q 1 } {   q 1 , q 2 } ∅ q 2 { q 3 } ∅ { q 3 } q 3 ∅ { q 4 } ∅ q 4 { q 4 } { q 4 } ∅ ,

4.

q1 q 1 是开始状态,

5.

F={ q4} F = { q 4 }

某个NFA N N accepts字符串 w w 的定义

我们假定 N=(Q,,δ,q0,F) N = ( Q , ∑ , δ , q 0 , F ) , w=y1y2...ym w = y 1 y 2 . . . y m ,其中 yiϵ y i ∈ ∑ ϵ ,如果存在一序列状态 r0,r1,...,rmQ r 0 , r 1 , . . . , r m ∈ Q 使得以下3个条件成立,骂我们就说 Nacceptsw N a c c e p t s w :
1. r0=q0 r 0 = q 0 ,
2. ri+1δ(ri,yi+1),i=0,...,m1 r i + 1 ∈ δ ( r i , y i + 1 ) , 其 中 i = 0 , . . . , m − 1 ,
3. rmF r m ∈ F

解释:上述第一个条件是指明NFA从开始状态出发;条件二表示当机器处于状态 ri r i 时,它读到 w w 中的字符时是可以转移到下一个状态的;条件三表明最后的转移状态 rm r m 要属于接受集合。


推荐阅读
  • 本文介绍了如何使用Visual Studio Code、Sublime Text等编辑器批量删除MATLAB代码中的注释和空行,同时提供了一些高级技巧以确保代码的整洁。 ... [详细]
  • HBase Java API 进阶:过滤器详解与应用实例
    本文详细探讨了HBase 1.2.6版本中Java API的高级应用,重点介绍了过滤器的使用方法和实际案例。首先,文章对几种常见的HBase过滤器进行了概述,包括列前缀过滤器(ColumnPrefixFilter)和时间戳过滤器(TimestampsFilter)。此外,还详细讲解了分页过滤器(PageFilter)的实现原理及其在大数据查询中的应用场景。通过具体的代码示例,读者可以更好地理解和掌握这些过滤器的使用技巧,从而提高数据处理的效率和灵活性。 ... [详细]
  • 本文记录了 JavaScript 中正则表达式的使用方法和常见操作,包括匹配、替换、搜索等。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 该大学网站采用PHP和MySQL技术,在校内可免费访问某些外部收费资料数据库。为了方便学生校外访问,建议通过学校账号登录实现免费访问。具体方案可包括利用学校服务器作为代理,结合身份验证机制,确保合法用户在校外也能享受免费资源。 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 《统计学习方法》第一章:基础概念与理论框架综述
    第一章介绍了统计学习方法的基础概念与理论框架。1.2节详细讨论了两种模型类型:一种直接输出具体的数值结果,另一种则输出概率分布。条件概率分布描述了在给定输入 \( x \) 的情况下,多个可能输出 \( y \) 的概率分布情况,而直接输出数值的模型则为每个输入 \( x \) 提供一个确定的输出值。这一部分还探讨了这些模型在实际应用中的重要性和应用场景。 ... [详细]
  • 在日常开发中,正则表达式是处理字符串时不可或缺的工具。本文汇总了常用的正则表达式,帮助开发者高效解决常见问题。例如,验证数字:`1$`;验证n位数字:`^\d{n}$`;验证至少n位数字:`^\d{n,}$`;验证m到n位数字:`^\d{m,n}$`。此外,还涵盖了验证零和非零数字、邮箱地址、手机号码等多种场景,建议关注并收藏以备不时之需。 ... [详细]
  • Python默认字符解析:深入理解Python中的字符串处理
    在Python中,字符串是编程中最基本且常用的数据类型之一。尽管许多初学者是从C语言开始接触字符串,通常通过经典的“Hello, World!”程序入门,但Python对字符串的处理方式更为灵活和强大。本文将深入探讨Python中的字符串处理机制,包括字符串的创建、操作、格式化以及编码解码等方面,帮助读者全面理解Python字符串的特性和应用。 ... [详细]
  • 本文探讨了在Python中使用序列号字符串进行高效模式替换的方法。具体而言,通过将HTML标签中的`&`替换为`{n}`,并生成形如`[tag, {n}]`的哈希原始字符串。示例字符串为:“这是一个字符串。这是另一部分。”该方法能够有效提升替换操作的性能和可读性。 ... [详细]
  • Python内置模块详解:正则表达式re模块的应用与解析
    正则表达式是一种强大的文本处理工具,通过特定的字符序列来定义搜索模式。本文详细介绍了Python内置的`re`模块,探讨了其在字符串匹配、验证和提取中的应用。例如,可以通过正则表达式验证电子邮件地址、电话号码、QQ号、密码、URL和IP地址等。此外,文章还深入解析了`re`模块的各种函数和方法,提供了丰富的示例代码,帮助读者更好地理解和使用这一工具。 ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 如何使用Python去除字符串中的非中文字符[Python编程技巧]
    在 Python 中,可以通过正则表达式来实现去除字符串中的非中文字符。具体方法是使用 `re` 模块中的 `re.sub()` 函数,配合正则表达式 `[^u4e00-u9fa5]` 来匹配并替换掉所有非中文字符,从而保留字符串中的中文部分。这种方法简洁高效,适用于多种文本处理场景。 ... [详细]
  • 技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告
    技术日志:使用 Ruby 爬虫抓取拉勾网职位数据并生成词云分析报告 ... [详细]
  • 面向切面编程(AOP)是Spring框架的两大核心概念之一,另一个核心概念是控制反转(IoC)。AOP通过在应用程序中分离横切关注点,如日志记录、事务管理和安全性,从而提高代码的模块化和可维护性。本文将深入探讨AOP的核心概念和术语,帮助读者更好地理解和应用这一重要技术。 ... [详细]
author-avatar
sjxs198422
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有