热门标签 | 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 要属于接受集合。


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • PHP中去除换行符的多种方法及应用场景
    本文将详细介绍在PHP中去除换行符的各种方法,并结合实际应用场景进行说明。通过本文,您将了解如何根据不同操作系统的特点,选择最合适的换行符处理方式。 ... [详细]
  • 深入解析JMeter中的JSON提取器及其应用
    本文详细介绍了如何在JMeter中使用JSON提取器来获取和处理API响应中的数据。特别是在需要将一个接口返回的数据作为下一个接口的输入时,JSON提取器是一个非常有用的工具。 ... [详细]
  • 本文介绍如何使用Perl编写一个简单的爬虫,从丁香园网站获取意大利的新冠病毒感染情况。通过LWP::UserAgent模块模拟浏览器访问并解析网页内容,最终提取所需数据。 ... [详细]
  • 探讨如何使用正则表达式从类 SQL 查询语句中提取字段及其对应的值。 ... [详细]
  • 本文详细介绍了如何使用Python的re库进行正则表达式匹配,特别是针对URL中的特定参数提取。适合初学者理解和应用。 ... [详细]
  • 百度搜索结果链接提取工具 UrlGetter V1.43
    该工具专为获取百度搜索引擎的结果页面中的网址链接而设计,能够解析并转换为原始URL。通过正则表达式匹配技术,精准提取网页链接,并提供详细的使用说明和下载资源。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文介绍了多个关于JavaScript的书籍资源、实用工具和编程实例,涵盖从入门到进阶的各个阶段,帮助读者全面提升JavaScript编程能力。 ... [详细]
  • 本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 解决Python中 'NoneType' 对象无属性 'find_all' 错误
    本文详细探讨了在Python编程中遇到的常见错误——'NoneType'对象没有属性'find_all',并深入分析其原因及解决方案。通过理解find_all函数的工作原理和常见用法,帮助读者避免类似问题。 ... [详细]
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社区 版权所有