(MIT6.045)自动机、可计算性和复杂性-正则表达式

news2024/11/18 9:27:30

语言(language)的计算性质:交、并、补、反转、拼接、星号(*)
在这里插入图片描述

星号是一元运算符,表示一个语言和自己的有穷次笛卡尔积。

回顾:正则语言(Regular Language)指可以用DFA描述的语言。

正则表达式

一个递归的定义。
在这里插入图片描述
其中,+、·和*的意义分别如下:
在这里插入图片描述

一个定理:
语言L可以被表示成某种正则表达式,iff语言L是正则的(可以用DFA描述)。

Generalized-NFA

将一个DFA写成正则表达式。从DFA读取单个字符(太麻烦)变为读取一个子串。

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

再举一个例子。通过下面的步骤,我们可以将一个NFA转化成一个只有两个状态(起始和终止状态)的generalized-NFA。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

许多语言是不正则的。

比如:
在这里插入图片描述
对于上述例子中的C,我们需要时刻记住DFA和NFA的特性:有限状态(有限的记忆)。对于C,它的潜在状态可能是无穷多的,所以不能被DFA表示。
对于上述例子中的D,其结果为:
在这里插入图片描述

DFA最小化定理

(什么意义下的最小?)

对于每个正则语言A,都有一个唯一的(在状态re-labeling的情况下)最小的DFA M ∗ M^* M,使得 A = L ( M ∗ ) A=L(M^*) A=L(M)

一般地,最小NFA不唯一。

首先,介绍概念:
字符串 w w w区分了状态 p p p q q q,如果在状态 p p p q q q下,字符串被接受和被拒绝。

如果两个状态没法区分,那么他们就是冗余的。

于是我们可以构造等价类,每一个等价类里面的元素都是互相不可区分的。

根据上述的可区分概念,我们给出最小DFA的定义:
已知DFA M,其最小DFA M*是:

  1. L(M) = L(M*)
  2. 所有状态从起始状态开始都可达
  3. M*不可再约减(约减,指存在不可区分的状态)。

定理:满足上述123的状态机M*是唯一的、M的最小DFA。

由于DFA/NFA和正则表达式的等价性,我们自然会想,怎么证明两个正则表达式是等价的?

存在这样的算法,使得我们可以证明两个正则表达式等价。

Myhill-Nerode定理
对于语言L,要么有一个DFA可以描述,要么总是可以找到能骗过DFA的字符串。

和DFA的状态定义类似,我们也可以定义“状态”之间的等价关系。

L ⊂ Σ ∗ L \subset \Sigma^* LΣ x , y ∈ Σ ∗ x, y \in \Sigma^* x,yΣ。我们定义 x ≡ L y x \equiv_L y xLy,当且仅当 ∀ z ∈ Σ ∗ , x z ∈ L    ⟺    y z ∈ L \forall z \in \Sigma^*, xz \in L \iff yz \in L zΣ,xzLyzL。(显然这是个等价关系)。
注意,我们可以将这个定义和前述DFA的定义进行类比, x , y x, y x,y就像是决定了不同的状态,然后从不同的状态开始迭代。

基于这里的等价关系 ≡ L \equiv_L L定义,我们可以将 Σ ∗ \Sigma^* Σ分成若干个等价类。

于是,Myhill-Nerode定理表明:
如果等价类数量有限,则可以构建DFA。
否则不可构建DFA。

流算法(Streaming Algorithms)

Streaming Algorithms有三个组成部分:

  1. 初始化(变量和赋值)
  2. 当下一个符号是 σ \sigma σ的时候咋办(使用 σ \sigma σ和变量的伪代码)
  3. 当流跑完了(伪代码的输出,比如接受/拒绝)

Streaming Algorithms和DFA有几点大的不同。
4. 这玩意可能输出不止一个比特。
5. 这玩意的存储空间(也可以说是状态)可以随着读取字符串边长逐渐增长——这意味着它可以识别非正则语言。
6. 可以随机化、多通路

一个例子:
在这里插入图片描述
注意:和冯诺伊曼计算机不同,这里的存储空间使用不包括算法本身的存储。

DFA和流算法

定理: L ′ L' L可以被DFA M M M(有 2 p 2^p 2p个状态)识别,那么 L ′ L' L就可以被流算法A用p比特空间计算。

在这里插入图片描述

当alphabet的元素不止有0和1怎么办?

在这里插入图片描述

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

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

相关文章

Linux内核panic简析

源码基于:Linux 5.4 0. 前言 内核异常的级别大致分为三个:BUG、oops、panic。 BUG 是指那些不符合内核的正常设计,但内核能够检测出来并且对系统运行不会产生影响的问题,比如在原子上下文中休眠,在内核中用 BUG 标识。…

Linux——线程3|线程互斥和同步

加锁保护 我们上一篇提到过,多个线程执行下面代码可能会出错,具体原因可查看上一篇Linux博客。

Vue3相关知识点笔记(持续更新中。。。。)

目录标题 1、Vue3中的组合式Api有哪些? 和Vue2的Options Api有什么不同?Vue3中的组合式API主要包括以下几个:与Vue2的option Api有什么不同 2、Vue3.0的设计目标是什么?做了哪些优化?设计目标是什么?哪些优化? 3、Vu…

python:随机森林分类器的性能评估(决策树数量的影响)

作者:CSDN @ _养乐多_ 随机森林(Random Forest)是一种强大的机器学习算法,常用于分类和回归任务。它由多个决策树构成,通过集成学习的方式进行预测。在本篇博客中,我们将探讨随机森林分类器在不同决策树数量下的性能,并绘制相应的图表进行可视化分析。OOB误差,0被误判为…

C++ 实现堆排序

时空复杂度 时间复杂度 排序复杂度 O ( n l o g n ) O(nlogn) O(nlogn) 建堆复杂度 O ( n ) O(n) O(n) 空间复杂度 由于堆排序是一种就地设计的排序算法,空间需求是恒定的,所以是O(1) 稳定性 不稳定。 C代码(大根堆) cla…

Jenkins持续集成之修改jenkins工作目录

修改jenkins工作目录 一般不建议把工作目录放到默认的C盘,故可以更改到其他盘中 前置条件:先在其他盘中新建工作目录的文件;如下图 1、首先打开任务管理器,找到服务中的Jenkins进程 2、右击点击转到详细信息; 3、再右…

洛谷P1706全排列问题题解(两种方法+详解)

问题引出 全排列问题 题目描述 按照字典序输出自然数 1 1 1 到 n n n 所有不重复的排列,即 n n n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n n n。 输出格式 由 1 ∼ n 1 \sim n 1∼n 组成的所有不重…

成为Jmeter大师:从入门到精通的环境搭建教程

一、JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序)。它可以用来测试静态和动态资源的性能,例如:静态文件,Java Servlet,CGI Scripts,Java Object,数据库和FTP服…

什么是 http 代理,为什么需要 http 代理?

前言: 在我们进行软件测试工作的时候,会有很多地方需要去设置代理的。 比如:fiddler抓包,jmeter录制脚本等等。 甚至于,在某些公司,去访问某些内部网址的时候,都需要通过连接vpn才能成功访问。…

Meaning of life :Do not wait too long and miss the opportunity

生命的意义在于机会在眼前,我们就要去抓住他,错过了可能会遗憾终身,不要去等待机会的到来,很多时候真是应一句老话, "机不可失时不再来!" 。 Dont wait too long and miss the opportunity Each spring brings a blos…

瑞吉外卖 - 修改菜品功能(18)

某马瑞吉外卖单体架构项目完整开发文档,基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成,有需要的胖友记得一键三连,关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料:https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

Flink第四章:水位线和窗口

系列文章目录 Flink第一章:环境搭建 Flink第二章:基本操作. Flink第三章:基本操作(二) Flink第四章:水位线和窗口 文章目录 系列文章目录前言一、水位线二、窗口二、实际案例1.自定义聚合函数2.全窗口函数3.水位线窗口4.统计用户点击数据5.处理迟到数据 总结 前言 这次博客记…

ChatGPT、GPT4、AutoGPT 和 MemoryGPT:初学者指南

人工智能 (AI) 不仅在改变行业,也在改变我们的日常生活。借助人工智能,我们可以改善我们的组织和生产力,让我们能够专注于真正重要的事情。在本文中,我们将探讨一些适用于日常生活的 AI 工具,以及它们如何帮助您保持井…

【Spring框架】--02.容器IoC、原理(手写IoC)

文章目录 3.容器:IoC3.1 IoC容器3.1.1 控制反转(IoC)3.1.2 依赖注入3.1.3 IoC容器在Spring的实现 3.2 基于XML管理Bean3.2.1搭建子模块spring6-ioc-xml3.2.2 获取bean①方式一:根据id获取②方式二:根据类型获取③方式三…

【Jmeter第三章】Jmeter给请求添加请求头

给请求加上请求头最常见的场景就是在请求头上添加token了,这里也拿添加token来举例 1、添加某个请求的请求头 1、选中HTTP请求,右键添加 2、添加请求头 2、添加公共的请求头信息 其实步骤和上面是一样的,只不过是选择:线程组…

极客的git常用命令手册

极客的git常用命令手册 1.1 权限配置篇1.1.1 创建ssh key1.1.2 本地存在多个密钥时,如何根据目标平台自动选择用于认证的密钥? 1.2 基础信息配置篇1.2.1 配置用户名1.2.2 配置用户邮箱1.2.3 设置文件名大小写区分1.2.4 设置命令行显示颜色1.2.5 检查git全…

MySQL高级_第11章_数据库的设计规范

MySQL高级_第11章_数据库的设计规范 1. 为什么需要数据库设计 2. 范 式 2.1 范式简介 在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。 可以理解为,一张数据表的设计结构需要满足的某种设计标准的 级别 。要想设计一个结构合理的关…

如何用postman进行http接口测试?好好看好好学

目录 优点: 1、什么是POSTMAN 2、新建一个项目 2、新增一个用例 3、添加请求信息 4、post请求参数 5、添加头信息 6、预处理和结果检查 7、全局变量与环境变量 8、导出用例为代码 9、批量执行用例 HTTP的接口测试工具有很多,可以进行http请求…

打死都千万不要进外包...

我18年毕业于一个普通二本学校,是一个很不出名的小本科。大学期间专业知识也没有去认真的学习,所以毕业的时候就随便找了一份工作,在一个小公司做功能测试。 记得那时候薪资大概是6k左右,因为是在工厂,工作环境很差&a…

终极猜想 |欧科云链研究院揭秘货币未来形态

前言 5月18日,澎湃科技联合欧科云链研究院重磅发布的《从Web3“去美元化”看货币未来形态的终极猜想》文章,通过分析Web3.0“去美元化”的两大路径,对货币未来形态进行了前沿性的猜想。其中,Web3行业盛会Consensus2023&#xff0…