【p10】DFA (NFA确定化) 以及DFA的最小化

2024-05-14 04:28
文章标签 确定 最小化 p10 dfa nfa

本文主要是介绍【p10】DFA (NFA确定化) 以及DFA的最小化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

终于到这里了

可能是最难的部分?反正是网课时长最长的部分

需要画表,所以最好还是跟着网课一边学一边操作,不然没啥印象,上完网课之后没啥效果

文章目录

  • 画表
  • 通过终结符
  • 给新的集合编号
  • 新建
  • 表格结束
  • 根据表格画图
  • DFA
  • 初态集和终态集
  • 某种操作
  • 覆盖操作

画表

表头是I,然后是有多少个终结符,再加多少个表头

I代表的是状态集合

I 0 I_0 I0 开始填, I I I 表示的是通过空可以到达的集合

现在对自己的自律没有一点信心哈哈,没有约束,自己其实挺难自我驱动的,还是得养成习惯之类的吧

换句话说,自己其实就是一个非常典型的普通人,不要对自己有太高的要求或者美化自己,面对残酷的现实

可能也是因为任务太难,太多,自己实力太弱小哈哈

通过终结符

集合里面的元素,一个一个尝试,看通过某个终结符,能不能到达下一个状态,如果可以的话,把能到达的状态加入到新的集合里面,经过空能到达的状态也加入到集合里面

给新的集合编号

我们把原来集合里面的每一个元素都进行一次操作,操作是看经过终结符,能不能到达新的状态,能到达新的状态,就把能到达的所有状态放到一个集合里面,新的集合和之前的集合不一样的话,就把新的集合编号

新建

假设出现了新的集合,需要新建一行表格

用新的集合作为第一列

进行和前面一样的操作

表格结束

直到不在出现新的集合,表示表格这个步骤结束了

根据表格画图

首先是给集合命名,之前集合的名字是 I 0 I_0 I0 , I 1 I_1 I1 ,现在我们可以把它们命名为, S S S 1 1 1 ,两个状态,我们知道, I 0 I_0 I0经过终结符 a a a b b b 可以到达状态 I 1 I_1 I1 I 1 I_1 I1 通过终结符 a a a b b b 也可以到达状态 I 1 I_1 I1 ,所以可以画出一个图来

DFA

上面这个就是 DFA

初态集和终态集

含有终态 Z Z Z 的集合叫做终态集

不是终态集的就是初态集

也就是说两者是一个对立的关系

非此即彼

某种操作

看两行元素对应位置的值是否相等,和数据库查询语言里面的合并有一点类似,但是,我相当于还没有开始学习数据库,所以当我没说哈哈

假设对应位置的数值都相等,表示这两个终态集的元素不可以进行区分,需要进行覆盖操作

覆盖操作

用下标小的元素覆盖下标大的元素

相当于舍弃下标大的元素

解决了之前一道题,感觉胸有成竹(其实还是就最基础的水平)

可能书上的题都不是很靠谱,主要还是做 ppt 上面的题更靠谱,英文看起来难受,主要看题目就行了,应该题目也不是很多

从现在开始,到一段时间之内,不要发动态了(指csdn动态)

结合几道例题,还有之前那个朋友的一道题,应该是完全清楚了,主要是要小心细致一些,把过程写的工整一些,有助于解题

这篇关于【p10】DFA (NFA确定化) 以及DFA的最小化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/987735

相关文章

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而

【C++二分查找】2439. 最小化数组中的最大值

本文涉及的基础知识点 C++二分查找 LeetCode2439. 最小化数组中的最大值 给你一个下标从 0 开始的数组 nums ,它含有 n 个非负整数。 每一步操作中,你需要: 选择一个满足 1 <= i < n 的整数 i ,且 nums[i] > 0 。 将 nums[i] 减 1 。 将 nums[i - 1] 加 1 。 你可以对数组执行 任意 次上述操作,请你返回可以得到的 n

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个 嫌疑犯的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。  static void Main()         {             int killer = 0;             fo

【压力测试】如何确定系统最大并发用户数?

一、明确测试目的与了解需求 明确测试目的:首先需要明确测试的目的,即为什么要确定系统的最大并发用户数。这通常与业务需求、系统预期的最大用户负载以及系统的稳定性要求相关。 了解业务需求:深入了解系统的业务特性,包括用户行为模式、业务高峰期的时间段、用户请求的复杂程度等。 二、进行基准测试 确定正常负载下的性能:在开始压力测试之前,进行基准测试以确定系统在正常负载下的性能表现。这有助

【HDU】1285 确定比赛名次 拓扑排序

确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10963    Accepted Submission(s): 4374 Problem Description 有N个比赛队(1<=N<=500),

RDP最小化之后仍然保持UI渲染的方法

RDP最小化之后仍然保持UI渲染的方法 1、运行regedit 2、找到注册表项HKEY_CURRENT_USER\Software\Microsoft\TerminalServer Client 3、新建一个类型为DWORD的注册表项RemoteDesktop_SuppressWhenMinimized并设置值为2 4、然后找到注册表项HKEY_CURRENT_USER\Soft

Java 确定线程池中工作线程数的大小

以问答形式展开,会更有针对性: 1、工作线程是不是越多越好?      不是。a、服务器cpu核数有限,所以同时并发或者并行的线程数是有限的,所以1核cpu设置1000个线程是没有意义的。  b、线程切换也是有开销的。频繁切换线程会使性能降低。 2、调用sleep()函数的时候,县城是否会占用着CPU?     不占用,sleep()函数切换时会把cpu让出来。accept()阻塞和rec

OpenCV学习笔记(24)关于hough变换中pt1、pt2点的确定

经过Hough线变换,可以得到一些线段集合,对于这些线段,每一条线段给的是两个值,在极坐标下面的极径和极角,那么如何画出这样的每条直线呢,可以用到line函数,但是line 函数中有两个参数需要确定,pt1和pt2。 如图所示: 因此有如下画图代码 for (i = 0; i < lines.size(); i++){fRho = lines[i][0];fThe

nodejs程序如何确定哪个是主进程文件?

在 Node.js 应用程序中,主进程文件(或入口文件)是启动应用程序时首先执行的文件。这个文件通常在 package.json 文件的 main 字段中指定。如果 main 字段没有明确指定,默认的入口文件是 index.js。 以下是确定 Node.js 应用程序主进程文件的步骤: 1. 查看 package.json 通过上述步骤,你可以确定 Node.js 应用程序的主进程文件。

iOS根据文字字数动态确定Label宽高

计算单行文本的长度 iOS7中用以下方法 - (CGSize)sizeWithAttributes:(NSDictionary *)attrs; 替代过时的iOS6中的- (CGSize)sizeWithFont:(UIFont *)font 方法 // iOS7_API_根据文字 字数动态确定Label宽高     // 设置Label的字体 HelveticaNe