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

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

这是一门讲述

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

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

主要包括:

  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,通过构造状态集的幂集。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在Linux中进行Jenkins部署(maven-3.9.1+jdk11)

Jenkins部署在公网IP为x.x.x.x的服务器上 maven-3.9.1要安装在jdk11环境中 环境准备 第一步,下载jdk-11.0.19_linux-x64_bin.tar.gz安装包。 登录地址:Java Downloads | Oracle 下载jdk-11.0.19_linux-x64_bin.tar.gz安装包,然后使用Win…

C++11

目录 一、C11的诞生 二、initializer_list 1.统一的初始化方案 2.initializer_list 三、五个关键字 1.auto 2.decltype 3.nullptr 4.final 5.override 四、STL的新容器 1.array 2.forward_list 3.unordered_map与unordered_set 4.新增成员函数 五、右值引用和移…

OPNET Modeler 例程——ALOHA和CSMA的性能对比

文章目录 概述一、创建 ALOHA 协议模型二、创建 CSMA 协议模型三、创建收信机进程和节点模型四、创建总线型链路模型五、创建网络模型六、查看仿真结果总结 概述 本例程以以太网为例论述总线型网络的建模方法,对数据链路层的 MAC 技术进行建模分析,并进…

VRRP高级特性——管理VRRP

目录 管理VRRP备份组与业务VRRP备份组 管理VRRP备份组的两种实现方式 配置管理备份组 当在设备上配置了多个VRRP备份组时,为了减少设备间交互大量的VRRP协议报文,可以将其中一个VRRP备份组配置为管理VRRP备份组(mVRRP)&#xf…

sort命令 uniq命令 tr命令 cut命令

sort命令 ——以行为单位对文件内容进行排序,也可以根据不同的数据类型来排序 比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出 语法格式: sort [选项] 参数 cat file | sort 选项 -n按照数字进行排序…

【JAVA】黑马程序员JAVA教程笔记 基础篇 Day 1

常用命令行DOS命令 Path环境变量 用途 1. 可以理解为系统中的一个大管家,记录了很多软件的完整路径。 2. 将常用的软件都交给Path环境变量,便于用命令行打开。 设置步骤 复制要使用的软件的存储地址右键点击 此电脑,打开属性点击 高级系统…

x509证书中的Issuer和Subject

在x509标准中的位置 Issuer 颁发者字段标识已签署和颁发证书的实体。 颁发者字段必须包含一个非空的可分辨名称 (DN)。 颁发者字段定义为 X.501 类型名称 [X.501]。 名称由以下 ASN.1 结构定义: Name 描述了一个由属性组成的分层名称,例如国家名称&…

多目标优化算法求解无人机三维路径规划

一、无人机模型 无人机三维路径规划是无人机在执行任务过程中的非常关键的环节,无人机三维路径规划的主要目的是在满足任务需求和自主飞行约束的基础上,计算出发点和目标点之间的最佳航路。 1.1路径成本 无人机三维路径规划的首要目标是寻找起飞点和目…

Linux网络——Shell编程之快捷命令

Linux网络——Shell编程之快捷命令 一、快捷排序 — sort 命令二、快捷去重 — uniq 命令三、快捷替换 — tr 命令四、快速裁剪 — cut 命令五、文件拆分 — split 命令六、文件合并 —paste 命令七、变量扫描器 — eval 命令 一、快捷排序 — sort 命令 sort命令用于以行为单位…

Path如何进行环境变量的配置?

开发Java程序,需要使用JDK提供的开发工具(比如javac.exe、java.exe等命令),而这些工具在JDK的安装目录的 bin目录下,如果不配置环境变量,那么这些命令只可以在该目录下执行。我们不可能把所有的java文件都放到JDK 的bin目录下&…

给Debian 11系统,添加右键时,使用其它程序打开】

VS Code 添加到文件管理器的右键菜单中 在 Debian 系统中,nautilus-actions 软件包已经被移除了。因此,如果你想将 VS Code 添加到文件管理器的右键菜单中,你需要使用 nautilus-admin 工具。下面是详细步骤: 打开终端应用程序。运…

前端三剑客CSS篇——CSS选择器

初识CSS选择器 文章目录 初识CSS选择器CSS三大特征👍CSS的三种使用方法👏CSS常见选择器👀标签选择器类选择器id选择器后代选择器属性选择器复合选择器 CSS代码风格📜 CSS是前端三剑客不可忽略的一部分,CSS对前端来说是…

项目成本管理

定义:项目各个成本的总和 作用:在预算范围内完成项目 考点: 直接成本是指一个由项目组承担的费用,例如员工的工资,电脑等硬件费用。 间接成本是指由多个项目组承担的费用,例如租金,水电费&am…

c++ 11标准模板(STL) std::vector<bool> (二)

定义于头文件 <vector> template<class Allocator> class vector<bool, Allocator>; std::vector<bool> 是 std::vector 对类型 bool 为空间提效的特化。 std::vector<bool> 中对空间提效的行为&#xff08;以及它是否有优化&#xff09;是实现…

19 树表的查找

文章目录 二叉排序树(BST)查找操作二叉排序树的存储结构查找实现查找算法分析二叉排序树的平均查找长度 插入操作删除操作代码实现 平衡二叉树&#xff08;AVL&#xff09;插入&旋转操作插入操作四种旋转情况代码实现 删除操作查找操作 介绍 树表查找是一种在树形数据结构中…

React antd Form item「受控组件与非受控组件」子组件 defaultValue 不生效等问题总结

一、为什么 Form.Item 下的子组件 defaultValue 不生效&#xff1f; 当你为 Form.Item 设置 name 属性后&#xff0c;子组件会转为受控模式。因而 defaultValue 不会生效。你需要在 Form 上通过 initialValues 设置默认值。name 字段名&#xff0c;支持数组 类型&#xff1a;N…

Cocos Creator 3.7.3 正式上线,渲染管线和算法持续更新

Cocos Creator 3.7.3 正式发布。该版本对近日用户反馈的一系列关键性问题进行了集中修复&#xff0c;也对一部分性能进行了优化&#xff0c;提升了用户体验&#xff0c;建议所有 v3.x 用户升级。 Engine Features Render Graph 自定义渲染管线支持 GLES 后端Deprecate addRast…

十分钟教你搭建ChatGPT 图片生成的安卓应用

十分钟教你搭建ChatGPT 图片生成的安卓应用 大家好&#xff0c;我是易安&#xff01; 今天&#xff0c;我们将集成 OpenAI API (ChatGPT)来构建一个简单的类似 ChatGPT 的 android 应用程序&#xff0c;让它返回我们想要的图片&#xff0c;本文是上一篇的姊妹篇。 详细步骤 第…

Linux安装使用PostgreSQL

安装PostgreSQL 开源数据库&#xff1a;PostgreSQL 在官网选择对应版本的安装包 https://www.postgresql.org/download/ 我的Linux系统是CentOS7 选择对应的系统 选择安装的版本、平台、架构 复制粘贴安装脚本运行 初始化后会创建一个用户postgres&#xff0c;一般开始…

IDEA开发实现Maven+Servlet+Mybatis实现CRUD管理系统-Mapper代理开发

Mapper代理开发概述 之前我们写的代码是基本使用方式&#xff0c;它也存在硬编码的问题&#xff0c;如下&#xff1a; 这里调用 selectList() 方法传递的参数是映射配置文件中的 namespace.id值。这样写也不便于后期的维护。如果使用 Mapper 代理方式&#xff08;如下图&…