(MIT6.045)自动机、可计算性和复杂性-DFA和NFA

news2024/11/30 6:53:55

毕业论文写完了。找点事干干。
佛系更新。

这是一门讲述

  • 什么是计算?
  • 什么能被计算?
  • 怎么高效计算?

的哲学、数学和工程问题的课程。

主要包括:

  1. 有限状态机(Finite Avtomata):简单的模型。

  2. 可计算理论。

  3. 计算复杂性理论:被时间和空间复杂度约束着的模型。

这门课涉及的(数学)证明主要将阐述证明的想法。

讲明白idea比写一堆细节重要(又不是上数学分析课

确定性有限自动机(Deterministic Finite Avtomata)

一个简单的例子:计算一个全1字符串里有奇数个1还是偶数个1。
在这里插入图片描述
状态机从 q 0 q_0 q0开始。给定一串(有限长度的)111…111,每一次读一个字符(1),根据此时状态的转移规则进行状态转移,直到读完为止。

DFA详解:
在这里插入图片描述

有一个入口(初始状态)和一个字符串。在字符满足条件的情况下,需要从状态A转化到状态B。有终止状态(用同心圆表述)。

如果从初始状态开始,状态遵循字符串中字符的顺序和状态转移逻辑进行转化,最后停在终止状态(同心圆状态),表示DFA接受这个字符串,否则,DFA拒绝这个字符串。

更正式的定义如下:
在这里插入图片描述
一个DFA被定义为一个五元组。状态集、字符集 Σ \Sigma Σ(比如{0, 1}、英文字母表、UTF-8)、起始状态、终止状态集、状态转移函数。

语言(Language):语言是 2 Σ 2^\Sigma 2Σ的子集。比如, Σ \Sigma Σ是英文字母表,语言L可以是英语中所有a开头的单词,或者所有包含sh*t的单词。

或者说,语言是一个接受一个字符串作为输入、输出0或1的函数。

L(M) = 由确定性有限状态机M定义的语言。
在这里插入图片描述
注意这个 ∗ → q 0 * \rightarrow q_0 q0,表示: q 0 q_0 q0是一个初始状态,也是终止状态。

我们也可以对DFA的状态转移函数进行拓展,通过递归的方式定义输入为一个字符串的时候的“拓展”状态转移函数:
在这里插入图片描述

对有限自动机的证明:
在这里插入图片描述
这个自动机说了什么?(或者说,哪些语法是匹配上述自动机的?)
怎么证明我们得出的语法是对的?

上面这个自动机匹配的是有奇数个0,并且结尾为1的字符串。

证明:
q 0 q_0 q0状态:有偶数个0
q 1 q_1 q1状态:有奇数个0,且结尾为0
q 2 q_2 q2状态:有奇数个0,且结尾为1

可以用数学归纳法解决剩下的事情。

定义:语言L’是常规(regular)的,如果L’可以用DFA来描述。即存在M使得:L’ = L(M)。

常规语言的求并定理:
给定两个正规语言 L i , i = 1 , 2 L_i, i=1,2 Li,i=1,2 L 1 ∪ L 2 = w ∣ w ∈ L i , i = 1 ∣ ∣ i = 2 L_1 \cup L_2 = {w| w \in L_i, i=1 || i=2 } L1L2=wwLi,i=1∣∣i=2
于是, L 1 ∪ L 2 L_1 \cup L_2 L1L2也是常规的。

证明思路:主要考虑两个DFA的并行运算。对于正规语言 L i L_i Li,我们考虑对应的DFA,分别记为 M i M_i Mi。分别考虑 M i M_i Mi的状态 Q i Q_i Qi,作笛卡尔积 Q 1 × Q 2 Q_1 \times Q_2 Q1×Q2。然后构造符合两个DFA的转移规则即可。

常规语言的求交定理:
给定两个正规语言 L i , i = 1 , 2 L_i, i=1,2 Li,i=1,2 L 1 ∩ L 2 = w ∣ w ∈ L i , i = 1 & & i = 2 L_1 \cap L_2 = {w| w \in L_i, i=1 \&\& i=2 } L1L2=wwLi,i=1&&i=2
于是, L 1 ∩ L 2 L_1 \cap L_2 L1L2也是常规的。

证明思路:仍然是考虑两个DFA的并行运算。

求补定理:
给定正规语言 L L L L c L^c Lc也是正规语言。
证明:把终端集和非终端集翻过来就行了。

语言的反转 L R L^R LR。比如: 0 , 10 , 110 , 0101 R = 0 , 01 , 011 , 1010 {0, 10, 110, 0101}^R = {0, 01, 011, 1010} 0,10,110,0101R=0,01,011,1010

正规语言的反转定理。
反转后的正规语言也是正规语言。对于每一个可以从右往左读的、可被DFA描述的语言,都有从左往右读的、可被DFA描述的语言相对应。
但是怎么证明呢?
我们希望:给定DFA M M M,对应的正规语言是 L L L,能够构造一个 M R M^R MR,使得 M R M^R MR接受 w R w^R wR当且仅当 M M M接受 w w w

一个简单的尝试:把M的所有箭头和集合状态都反过来。但是按照这种操作方式,会遇到问题:

M R M^R MR并不永远是DFA。

比如,可能有很多个初始状态,对于一个给定的状态和输入,可能有多个(或者没有)转移规则。

于是我们引入:

非确定性有限状态机(Non-Deterministic Finite Avtomata)

首先,我们考虑一个DFA:
在这里插入图片描述
这个DFA M M M接受包含001的字符串。

我们考虑 M R M^R MR

在这里插入图片描述

在上图这个新automaton中,对于一个字符串,如果存在通路使得状态能到最终状态,那么我们认为逻辑被接受。

另一种类型的NFA: ϵ \epsilon ϵ-NFA。这里的 ϵ \epsilon ϵ通路意味着空跳,可以在不接受字符的情况下转移状态。
在这里插入图片描述
比如:在有多个起始状态的情况下,可以这么表述:
在这里插入图片描述

NFA里的状态转移函数 δ ( q , c h a r ) \delta(q, char) δ(q,char)有可能返回的是一个状态的集合。当然这个集合也有可能是空集。

对于DFA:

  1. 在给定状态和输入的时候,DFA的转移函数值是确定的(Deterministic)。
  2. DFA接受一个字符串,当且仅当这个字符串将使DFA到达一个终点状态。

对于NFA:

  1. 对于一个给定的字符串,NFA可能会从很多不同的路中选一条。
  2. NFA接受字符串,当且仅当这个字符串“可能”使NFA到达一个终点状态。

DFA里,扩张状态转移函数 δ ^ ( s t a t e , s t r i n g ) \hat \delta(state, string) δ^(state,string)可以吃下一个字符串。

在NFA里,也可以定义这样的操作。如果NFA有初始状态 q q q,那么字符串 x x x符合语法当且仅当 δ ^ ( q , x ) ∩ F ≠ ∅ \hat \delta(q, x) \cap F \neq \varnothing δ^(q,x)F=。其中,F是终止状态集。

对NFA的递归定义:
在这里插入图片描述

对NFA中状态集合的定义。假设 P P P是一个状态集合,那么
δ ( P , a ) = ∪ q ∈ P δ ( q , a ) \delta (P, a) = \cup_{q \in P} \delta (q, a) δ(P,a)=qPδ(q,a)

NFA的一个例子:
在这里插入图片描述

给定字符串str = 10101,上述NFA如何执行呢?

  • F = q 2 F = q_2 F=q2
  • δ ^ ( q 0 , 10101 ) = q 0 , q 2 \hat \delta(q_0, 10101) = {q_0, q_2} δ^(q0,10101)=q0,q2
  • q 0 , q 2 ∩ F = q 2 {q_0, q_2} \cap F = {q_2} q0,q2F=q2
    于是字符串10101符合上述NFA。

一般来说,NFA用起来比DFA更方便。
在这里插入图片描述
NFA和DFA是等价的吗?
是的。

定理:对于任意NFA N N N,都存在一个DFA M M M使得 L ( M ) = L ( N ) L(M)=L(N) L(M)=L(N)

具体想法:对于NFA,我们可以直接构造DFA,通过构造状态集的幂集。

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

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

相关文章

【OpenCV-Python】——机器学习kNN算法SVM算法k均值聚类算法深度学习图像识别对象检测

目录 前言: 1、机器学习 1.1 kNN算法 1.2 SVM算法(支持向量机) 1.3 k均值聚类算法 2、深度学习 2.1 基于深度学习的图像识别 2.2 基于深度学习的对象检测 总结: 前言: 机器学习(ML)是人…

Linux-权限

1. 认识Linux下用户的分类 root普通用户1.1用户切换 普通用户 转 root su //当前路径切换rootsu - //重新登陆到/root退出 crtl d / exit root 转 普通用户 不需要输入密码 su 用户名退出 ctrl d 1. 2 指令暂时提权 sudo command目前我们用adduser新建的用户&#xff0…

100个软件开发领域必须掌握的关键词,掌握一个都难啊

需要完整xmind文件,私信获取 100个软件开发领域必须掌握的关键词 基础编程语言 JavaPythonC#JavaScriptPHPRubyCObjective-CSwiftKotlin Web 开发 HTMLCSSJavaScriptReactAngularVue.jsjQueryBootstrapNode.jsExpress.js 移动应用开发 AndroidiOSFlutterRea…

100万数据,如何快速的导入数据库?

数据导出、导入是非常常见的开发操作,但在这个过程中,很多开发者都会遇到诸如数据乱码、数据格式不支持、数据量太大等问题。NineData 最新发布的数据导入功能,帮助用户在保障数据完整和准确的同时,轻松地将大量的数据从文件中导入…

利用项目管理工具实现项目日程安排:技巧与步骤详解

到 2022 年,我们可能会发现自己在思考过去的生活,以及我们的工作常规是否会回到原来的样子。我们中的一些人觉得我们过去常常完成更多的工作,而且我们中的许多人都在努力保持精神健康,同时保持工作效率。平衡我们的工作生活和个人…

深兰科技|功能迭代!metamind APP发布v1.2版本

以目前AI的技术水平,只要样本足够多,模仿一个人的面容、声音、语气,可以达到相似度90%以上。假设未来科技足够发达,能够通过记录一个人一生的数据来“复活”他,你会怎么选择?而如果你没有足够多的属于自己的…

如何利用python调用API接口获取数据进行测试

一、Python 可以使用 requests 库来调用 API 接口获取数据。以下是基本的步骤: 1.安装 requests 库 pip install requests 2.导入 requests 库 import requests 3.构建 API 请求的 URL 根据 API 文档,构建请求的URL。 例如, https://a…

C++——STL之空间配置器

文章目录 1. 什么是空间配置器2. 为什么需要空间配置器3. SGI-STL空间配置器实现原理3.1 一级空间配置器3.2 二级空间配置器3.2.1 内存池 3.3 空间配置器的再次封装3.4 对象的构造与释放 4. 与容器结合 1. 什么是空间配置器 空间配置器,顾名思义就是为各个容器高效…

深入了解Kotlin密封接口的强大功能

深入了解Kotlin密封接口的强大功能 当 Kotlin 首次引入时,开发者迅速爱上了它的强大语言特性,其中包括密封类。然而,有一件事似乎还缺失了:密封接口。当时,Kotlin 编译器无法保证在 Java 代码中无法实现接口&#xff0…

Dart 3.0 语法新特性 | Records 记录类型 (元组)

theme: cyanosis 终于,终于,终于, Dart 支持元组了! 官方称之为 Records 特性,所以入乡随俗,以后中文称之为 记录类型 。官方 对它的介绍 是: Records are an anonymous, immutable, aggregate type. 记录…

I3C仿真:PGY I3C-EX-PD使用

简述 本文所使用的I3C仿真软件是由Prodigy Technovations Pvt. Ltd公司所研发的MIPI PGY-I3C-EX-PD I3C仿真设备,这款设备搭载了配套软件,专门用于模拟I3C设备,它可以实现模拟Master、SLAVE,同时也支持模拟I2C Slave&#xff0c…

sklearn中的特征工程(过滤法、嵌入法和包装法)

目录 ​编辑特征工程的第一步:理解业务 Filter过滤法 ​编辑方差过滤 ​编辑- 相关性过滤 - 卡方过滤 - F检验 - 互信息法 ​编辑嵌入法(Embedded) 包装法(Wrapper) 特征工程的第一步:理解业务 如…

公司大数据CDH技术选型升级为EMR集群的技术调研

大数据技术栈现状 大数据技术整体设计图 当前大数据各组件版本 ZooKeeper 3.4.5 Spark 2.4.0 Hue 4.3.0 Hive 2.1.1 Hbase 2.1.4 Hadoop 3.0.0 Kafka 2.2.1 Phoenix 5.0.0-cdh6.2.0 Dolphinscheduler 3.0.0 Yarn 3.0.0-cdh6.3.2 Logstash 7.7.0 Kibana 7.7.0 Elasticsearch 7…

反涉网犯罪研究 | 电商平台自动收货代码审计

0x00 免责声明 本文仅限于学习讨论与反诈知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担…

信息发布系统在医院体检中心的运用

随着生活水平条件的提高,大家的健康意识更加强,重视体检的人数也越来越多,因此体检中心,医院体检门诊中心人流量都很大,健康市场空间前景大,各种医疗健康机构快速发展,市场竞争激烈,…

Linux——互斥和同步(二)

目录 信号量 读写信号量 互斥量 RCU机制 虚拟串口驱动加入互斥 完成量 习题 信号量 前面所讨论的锁机制都有一个限制,那就是在锁获得期间不能调用调度器,即不能引起进程切换。但是内核中有很多函数都可能会触发对调度器的调用(在中断的…

Win10笔记本开机黑屏出现白色错误英文无法启动怎么办?

Win10笔记本开机黑屏出现白色错误英文无法启动怎么办?有用户电脑正常开机之后,出现了问题,系统无法正常的启动,出现一些英文错误代码。那么遇到这个情况怎么去进行解决呢?一起来看看以下的解决方法分享吧。 准备工作&a…

C语言数据结构注意点-线性表

目录 关于指针 LinkList L和LinkList *L的区别 初始化注意点 scanf()的操作 顺序表相关操作符号的确定 关于指针 ①指针和指针变量是两个不同的概念,但要注意的是,通常我们叙述时会把指针变量简称为指针。 ②指针变量其实是一个变量&…

FL Studio21中文完整版All Plugins Edition及切换教程

说到制作电音的软件,coco玛奇朵一定会把FL Studio放到第一个来讲。水果是一款为了电子音乐而生的的宿主软件。水果,独特的节拍音序器组件和通道机架与混音台模块打造的编曲“块”的思路。是极为适合于电子音乐的编排。而且随着水果版本不断地升级&#x…

Vite的基本介绍以及优劣势(一文读懂vite)?

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、Vite是什么?二、为什么选Vite?1、现实的问题2、缓慢的服务器启动3、缓慢的更新 三、Vite的优势?四、Vite的劣势?五、Vite以…