编译原理实验2——自动机的确定化和最小化

2024-06-05 11:08

本文主要是介绍编译原理实验2——自动机的确定化和最小化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

(前言:这个代码的产生真的是非常非常曲折。。。。
因为退役之后没事儿干,打算好好折腾ubuntu玩玩,结果装系统的时候把win装崩了,作业还没备份直接全没了。。
我重写的时候真的是眼里全是泪水。。。
后来实验报告写好了之后,又萌萌哒地没有备份,又留在机房一次= =
后来又是重写啊啊啊啊啊啊啊啊啊啊啊!)
使用说明:
调用NFA中的init函数可以对数组进行初始化。
调用NFA中的read函数可以将数据读入进来。
调用NFA中的check函数可以判断该结构为DFAor NFA。
调用NFA中的ChangeToDFA函数可以将该自动机对应的DFA输出出来。
调用DFA中的output可以输出对应的DFA
调用DFA中的 GetMinDFA可以输出对应的最小化的自动机。数据格式:
首先两个整数n,m,代表有n个状态m条转移。
接下来m行数,每一行有两个整数u,v和一个字符c,代表u可以通过c转移到v去。(用~代表空符号)
接下来一个数s代表起始状态。
接下来一个数Tcnt代表接收状态的个数。
接下来Tcnt个数代表接收状态的具体标号。
(状态编号为0--n- 1)样例:
3 7
0 2 0
0 0 1
1 0 0
1 1 0
2 0 0
2 1 1
2 2 0
0
1
2DFA中output的输出格式:
如果DFA中的状态有x个,转移字符有c个,那么接下来有x行
第i行为i:,接下来c个字符分别代表第i个状态接收第j个字符后转移到的状态,-1为无对应状态


代码如下:

#include<iostream>
#include<queue>
#include<iomanip>
#include<map>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1005;
const int M = 1005;
const int CSIZE = 26;
struct DFA{/*{{{*/struct Node{int x,y,id;Node(){}Node(int x,int y,int id):x(x),y(y),id(id){}bool operator < (const Node &a)const{if(x != a.x) return x < a.x;return y < a.y;}bool operator == (const Node &a)const{return x == a.x && y == a.y;}};int ch[N][CSIZE];int cnt,C;bool accept[N];void init(){cnt = 0;memset(ch,-1,sizeof(ch));memset(accept,0,sizeof(accept));}

这篇关于编译原理实验2——自动机的确定化和最小化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu 3065 AC自动机 匹配串编号以及出现次数

题意: 仍旧是天朝语题。 Input 第一行,一个整数N(1<=N<=1000),表示病毒特征码的个数。 接下来N行,每行表示一个病毒特征码,特征码字符串长度在1—50之间,并且只包含“英文大写字符”。任意两个病毒特征码,不会完全相同。 在这之后一行,表示“万恶之源”网站源码,源码字符串长度在2000000之内。字符串中字符都是ASCII码可见字符(不包括回车)。

POJ 1625 自动机

给出包含n个可见字符的字符集,以下所提字符串均由该字符集中的字符构成。给出p个长度不超过10的字符串,求长为m且不包含上述p个字符串的字符串有多少个。 g++提交 int mat[108][108] ;int matn ;int N ;map<char ,int> to ;//ACconst int maxm = 108 ;const int kin

zoj 3228 ac自动机

给出一个字符串和若干个单词,问这些单词在字符串里面出现了多少次。单词前面为0表示这个单词可重叠出现,1为不可重叠出现。 Sample Input ab 2 0 ab 1 ab abababac 2 0 aba 1 aba abcdefghijklmnopqrstuvwxyz 3 0 abc 1 def 1 jmn Sample Output Case 1 1 1 Case 2

maven 编译构建可以执行的jar包

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」👈,「stormsha的知识库」👈持续学习,不断总结,共同进步,为了踏实,做好当下事儿~ 专栏导航 Python系列: Python面试题合集,剑指大厂Git系列: Git操作技巧GO

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

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

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

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD