正规文法、正规式、确定的有穷自动机DFA、不确定的有穷自动机NFA 的概念、区分以及等价性转换【我直接拿下!】

news2024/11/27 2:40:51

文章目录

      • 正规文法
      • 正规式
      • 有穷自动机
        • 确定的有穷自动机——DFA
        • 不确定的有穷自动机——NFA
        • DFA 与 NFA 的区分
      • 正规式转换为正规文法
      • 正规文法转换为正规式
      • NFA 转换为 DFA
        • NFA 最小化
      • NFA 转换为正规式
      • 正规式转换为 NFA
      • 正规文法转换为 NFA
      • NFA 转换为正规文法

前言:

在学习正规文法之前,需要先了解一下什么是文法,具体可以查看这篇文章,总结的比较好 —— 编译原理–四种文法的理解

正规文法

设有 G=(VN,VT,P,S),若 P 中的每一个产生式的形式都是 A ——> aBA——>a,其中 AB 都是非终结符,a 属于 VT*,则称 G3 型文法,又称正规文法。

正规式

正规式也称正则表达式,也是表示正规集的工具。是一种用于匹配文本模式的字符序列。由普通字符(如字母、数字)和特殊字符(如元字符)组成的表达式。

在正规式中,常见的元字符包括:

  • 通配符(如 . 表示匹配任意字符)

  • 字符类(如 [0-9] 表示匹配数字 09 之间的任意一个字符)

  • 量词(如 * 表示匹配前面的字符 0 次或多次)

  • 锚点(如 ^ 表示匹配字符串的开头、$ 表示匹配字符串的结尾)

有穷自动机

有穷自动机(Finite State Machine,FSM)是一种抽象的识别装置,用于描述具有有限个状态并在输入序列驱动下进行状态转换的系统,能准确地识别正规集。

一个有穷自动机由以下几个要素组成:

1. 状态集合(States): 有穷自动机的所有可能状态的集合。每个状态代表系统的某种特定情况或条件。

2. 输入字母表(Input Alphabet): 有穷自动机接受的输入符号的集合。例如,二进制数的有穷自动机的输入字母表可以是{0, 1}。

3. 转移函数(Transition Function): 描述从一个状态到另一个状态的转移规则。该函数接受当前状态和输入符号,并返回下一个状态。转移函数可以用图形表示,其中状态是节点,输入符号是边。

4. 初始状态(Initial State): 有穷自动机开始运行时的起始状态。

5. 终止状态(Accepting States): 有穷自动机在运行过程中达到的特殊状态。当有穷自动机达到终止状态时,它可以接受或拒绝输入序列。

有穷自动机分为确定性有穷自动机(Deterministic Finite Automaton,DFA)和非确定性有穷自动机(Nondeterministic Finite Automaton,NFA)。

在确定性有穷自动机(DFA)中,每个状态都有唯一的转移路径,而在非确定性有穷自动机(NFA)中,一个状态可以有多个转移路径。

确定的有穷自动机——DFA

一个确定的有穷自动机 DFA 由一个五元组组成,可以用以下公式表示:

M = (K, Σ, f, S, Z)

其中:

  • K 表示一个有穷集,它的每个元素称为一个状态。

  • Σ 表示有穷字母表,Σ = {a₁, a₂, ..., aₘ},每个字母代表有穷自动机接受的输入符号,也成为输入符号表。

  • f 表示转移函数,K × Σ → K,它描述从一个状态到另一个状态的转移规则。对于给定的状态 Kᵢ 和输入符号 a,则经过 f 转换函数后,会返回下一个状态 Kⱼ,转换规则如:f(Kᵢ,a) = Kⱼ

  • S 表示初态集,S ∈ K,它是唯一的一个初态。

  • Z 表示终态集,Z ⊆ K,当有穷自动机达到终止状态时,它可以接受或拒绝输入序列,也称为可接受状态或结束状态。

不确定的有穷自动机——NFA

一个不确定的有穷自动机 NFA 同样也是由一个五元组组成,可以用以下公式表示:

M = (K, Σ, f, S, Z)

其中:

  • K 表示一个有穷集,它的每个元素称为一个状态。

  • Σ 表示有穷字母表,Σ = {a₁, a₂, ..., aₘ},每个字母代表有穷自动机接受的输入符号,也成为输入符号表。

  • f 表示转移函数,K × Σ* → K,表示 K 的全体子集的映像,即 K × Σ* → 2K,其中 2K 表示 K 的幂集。

  • S 表示初态集,S ⊆ K,表示一个非空初态集。

  • Z 表示终态集,Z ⊆ K,表示一个终态集。

当有穷字母表 Σ 中存在 ε 空串时,那么该有穷自动机为 NFA。

DFA 与 NFA 的区分

DFA 和 NFA 的主要区别在于它们的转移函数和转移规则:

转移函数不同

DFA 的转移函数是唯一的,即每个状态和输入符号只对应唯一的下一个状态(同一路径中输入符号必须唯一)。

NFA 的转移函数可以有多个下一个状态,也就是说一个状态可以按照多种选择进行转移。


转移规则不同

DFA 的转移规则相对简单,每个状态在接收到输入符号后只能转移到唯一的下一个状态,从而形成确定的转移路径。

NFA 的转移规则更加复杂,一个状态可以按照多种选择进行转移,从而形成多条可能的转移路径。


因此,DFA 模型的缺点是其在某些情况下需要更多的状态来表示相同的语言,并且难以处理一些复杂的语言。然而,DFA 的优势在于其转移函数和转移规则都明确,因此可以直接实现,易于编程实现和模拟执行。

正规式转换为正规文法

在开始转换之前,我们先来了解一下正规式转换正规文法的公式,一共有三个,如下所示:

当存在正规式产生式 A → xy,则有正规文法:

A → xB
B →   y

当存在正规式产生式 A → x*y,则有正规文法:

A → xB
A →   y
B → xB
B →   y

当存在正规式产生式 A → x|y,则有正规文法

A   →   x
B   →   y

转换示例:

将正规式 r = a(a|d)* 转换为相应的正规文法,转换过程如下所示:

正规文法转换为正规式

正规文法转换为正规式同样有三个公式,如下所示:

当存在正规文法 A → xBB → y,则有正规式 A = xy

当存在正规文法 A → xA|y,则有正规式 A = x*y

当存在正规文法 A → xB → y,则有正规式 A = x|y


转换示例:

现有文法 G[S],其所有产生式如下所示:

S → aA
S →    a
A → aA
A → dA
A →    a
A →    d

将文法 G[S] 转换为正规式:

NFA 转换为 DFA

这里先来了解将 NFA 转化为接受同样语言的 DFA 的算法,称为子集法

子集法是一种用于将不确定的有穷自动机(NFA)转换为具有等价性的确定的有穷自动机(DFA)的算法。

在子集法中,我们将每个 DFA 状态表示为 NFA 状态的子集。具体步骤如下:

  1. 创建 DFA 的初始状态。这个初始状态是由 NFA 的初始状态以及通过 ε转移可以到达的其他状态组成的子集。可以表达为 ε-closure(I),其中 I 为初态,也就是求从初态 I 开始,经过 ε 所到达的状态形成的闭包集合。

  2. 对于新创建的 DFA 状态,遍历每个输入符号(除去 ε 空串)。对于每个输入符号,找出从当前 DFA 状态中的任意一个 NFA 状态通过该输入符号可以达到的所有 NFA 状态,并将它们作为新的 DFA 状态的部分。可以表示为 move(I,a),从初态 I 开始,经过 a 弧所到达状态。

重复第 2 步,直到无法再创建新的 DFA 状态为止。最终得到的每个 DFA 状态都与 NFA 的某个状态集合相对应。

转换示例:

将给出的 NFA-N 状态图,转换为等价的 DFA。

NFA 最小化

在进行最小化(简化)前,需要先进行多余状态检查。检查从该自动机的开始状态出发,任何输入串也不能到达的那个状态,或者从这个状态没有通路到达终态。

在确定有限自动机(DFA)中,最小化是指将给定的 DFA 转换为等价且具有最少状态数量的 DFA。

最小化的目的是简化自动机的结构,减少状态数量,从而提高处理效率和性能。

下面是最小化 DFA 的一种常见方法,称为 Hopcroft 算法:

1.初始化分区: 将 DFA 的状态划分为两个初始分区,即接受状态(终态)和非接受状态(非终态)。

2.对于每个划分:

  • a. 对于每个输入符号,检查该划分中的状态在该输入符号下是否具有相同的转移目标。如果不是,则根据该输入符号将状态进行划分。

  • b. 如果对于某个输入符号的划分发生了变化,重新开始对所有划分进行遍历。

重复步骤 2,直到没有新的划分发生,最终得到的划分即为最小化 DFA 的状态集合。

在 Hopcroft 算法中,通过不断比较状态的转移目标,将具有相同转移目标的状态划分在同一个分区。这样可以逐步减少分区的数量,直至无法再进行划分为止。

最小化示例

对上方转换的 DFA 状态图进行最小化处理。

NFA 转换为正规式

将 NFA 转换为具有等价性的正规式公式如下:

转换示例:

正规式转换为 NFA

将正规式转换为具有等价性的 NFA 公式如下:

转换示例:

正规文法转换为 NFA

将正规文法转换为具有等价性的 NFA 十分简单,只需要根据正规文法产生式一步步描述出来即可,但是需要增加一个终态产生式

假设当前存在正规文法 G[S]:S—>aA A—>b,转换为等价性的 NFA 过程如下所示:

转换示例:

将正规文法 G[S] 转换为具有等价性的 NFA。

NFA 转换为正规文法

将 NFA 转换为正规文法同样简单,根据状态图直接可以的出结果,但是需要注意结果的格式书写。

正规文法结果由四部分组成,分别为:有穷集 K、有穷字母表 Σ、产生式 P 以及初态组成。

转换示例:

将下图所示的 NFA 转换为具有等价性的正规文法。




希望这篇文章对你有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1122375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言--程序环境和预处理(宏)

目录 前言 本章重点: 1. 程序的翻译环境和执行环境 2. 详解编译链接 2.1 翻译环境​编辑 2.2 编译本身也分为几个阶段 2.3 运行环境 3. 预处理详解 3.1 预定义符号 3.2 #define 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 2.2.3 #define 替换规则 …

fetch网络请求详解

一:三种常见的网络请求对比: AJAX:基于XMLHttpRequest收发请求,使用较为繁琐,代码量会比较多axios:基于promise的请求客户端,在浏览器和node中均可使用,使用便捷,功能强…

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分:支付系统

本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第五部分:支付系统前言如何学习支付系统信用卡为什么被称为“银行最赚钱的产品”?VISA/万事达卡如何赚钱?步骤说明为什么开证行应该得到补偿 当我们在商家…

Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

文章目录 1. Linux软件包管理器——yumyum 语法yum 常用命令安装 yum 仓库源 2. Linux编辑器——vimvim 的五种常用模式模式切换vim 基本操作命令模式命令集(1)光标命令(2)复制粘贴命令(3)撤销与重做&#…

深度学习---卷积神经网络

卷积神经网络概述 卷积神经网络是深度学习在计算机视觉领域的突破性成果。在计算机视觉领域。往往输入的图像都很大,使用全连接网络的话,计算的代价较高。另外图像也很难保留原有的特征,导致图像处理的准确率不高。 卷积神经网络&#xff0…

安全多方计算框架最全合集(持续更新)

安全多方计算框架 本文对现有安全多方计算/学习框架进行了全面、系统的梳理。 目前大部分安全多方计算框架主要基于秘密共享、同态加密、混淆电路以及相关基本模块的组合。通常使用定制的协议来支持特定数量的参与方(一般为两方或三方),导致…

我发现用StarUML来画UML也挺香的

2023年10月22日,周日晚上 我已经决定以后都用StarUML来画UML了,因为这个软件不仅免费,而且太适合画UML图了 我之前主要用plantUML和draw.io来画UML, plantUML虽然是通过文本来生成UML图,但是排版不是不好看&#xff…

“智能文件批量改名工具:轻松管理文件名,一键去除特殊符号“

你是否曾经在面对一堆文件名中包含特殊符号,而感到困扰,不知道如何快速、准确地处理它们?现在,我们为你带来了一款智能文件批量改名工具,它可以轻松地帮助你去除文件名中的特殊符号,让你的文件管理更加规范…

【试题002】C语言有关于sizeof的使用

1.说明&#xff1a;sizeof()是测量数据类型所占用的内存字节数&#xff0c;字符串常量在存储时除了要存储有效字节外&#xff0c;还要存储一个字符串结束志‘\0’。 2.代码举栗子&#xff1a; #include <stdio.h> int main() {char str[] "book";printf(&qu…

网络协议--Traceroute程序

8.1 引言 由Van Jacobson编写的Traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具。尽管不能保证从源端发往目的端的两份连续的IP数据报具有相同的路由&#xff0c;但是大多数情况下是这样的。Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过…

开源LLEMMA发布:超越未公开的顶尖模型,可直接应用于工具和定理证明

深度学习自然语言处理 原创作者&#xff1a;Winnie 今天向大家介绍一个新的开源大语言模型——LLEMMA&#xff0c;这是一个专为数学研究而设计的前沿语言模型。 LLEMMA解数学题的一个示例 LLEMMA的诞生源于在Proof-Pile-2数据集上对Code Llama模型的深度训练。这个数据集是一个…

Java 8 新特性 Ⅱ

方法引用 举例: Integer :: compare 理解: 可以看作是基于lambda表达式的进一步简化 当需要提供一个函数式接口的实例时, 可以使用lambda表达式提供实例 当满足一定条件下, 可以使用方法引用or构造器引用替换lambda表达式 实质: 方法引用作为函数式接口的实例 (注: 需要熟悉…

【AOA-VMD-LSTM分类故障诊断】基于阿基米德算法AOA优化变分模态分解VMD的长短期记忆网络LSTM分类算法(Matlab代码)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

人大金仓获评“2023年度软件和信息技术服务名牌企业”

近日&#xff0c;中国电子信息行业联合会在2023世界数字经济大会暨第十三届智慧城市与智能经济博览会上&#xff0c;发布了“2023年度软件和信息技术服务名牌企业”&#xff0c;凭借在企业规模、技术创新、市场影响力等方面的突出表现&#xff0c;人大金仓成功入选。 此次评选在…

计组03:20min导图复习 中央处理器

&#x1f433;前言 图源&#xff1a;文心一言 考研笔记整理&#xff0c;纯复习向&#xff0c;思维导图基本就是全部内容了&#xff0c;不会涉及较深的知识点~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画思维导图~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;…

【数值分析】2 - 插值法

文章目录 一、引言1.1 插值法引入1.2 常用插值法1.3 插值法定义 二、插值法研究的问题2.1 插值多项式存在的唯一性2.2 如何构造n次多项式2.2.1 待定系数法2.2.2 拉格朗日插值法2.2.2.1 拉格朗日多项式2.2.2.2 拉格朗日插值余项2.2.2.3 例题2.2.2.4 拉格朗日插值法的问题 2.2.3 …

【大疆智图】大疆智图(DJI Terra 3.0.0)安装及使用教程

大疆智图是一款以二维正射影像与三维模型重建为主的软件,同时提供二维多光谱重建、激光雷达点云处理、精细化巡检等功能。它能够将无人机采集的数据可视化,实时生成高精度、高质量三维模型,满足事故现场、工程监测、电力巡线等场景的展示与精确测量需求。 文章目录 1. 安装D…

shell学习脚本04(小滴课堂)

他就可以直接读出来了。不需要在sh后面加参数。 可以用-s隐藏内容&#xff1a; 可以用-t进行指定几秒后显示。 -n限制内容长度。 输入到长度为5自动打印。 我们把-s放到-p后面的话&#xff1a; 这样会出错。 如果最后加5m会一直闪烁。 大家可以按照需求自行使用。

42907-2023 硅锭、硅块和硅片中非平衡载流子复合寿命的测试 非接触涡流感应法

1 范围 本文件描述了用非接触式涡流感应法测试太阳能电池用单晶硅锭、硅块和硅片中非平衡载流子复 合寿命的方法。 本文件适用于非平衡载流子复合寿命在0.1μs&#xff5e;10000 μs、电阻率在0.1 Ω cm&#xff5e;10000 Ω cm 的硅锭、硅块和硅片的测试。其中瞬态光电导衰…

Spring定时任务@Scheduled

在 Spring 框架中&#xff0c;可以使用定时任务来执行周期性或延迟执行的任务。Spring 提供了多种方式来配置和管理定时任务。有Java自带的java.util.Timer类&#xff0c;也有强大的调度器Quartz&#xff0c;还有SpringBoot自带的Scheduled。 在实际应用中&#xff0c;如果没有…