课设:NFA确定化和最小化程序的设计与实现(html+css+js实现)

news2024/9/29 5:24:46

文章目录

  • 问题描述
  • 待解决问题
    • 1、如何存储NFA或者是DFA
    • 2、NFA多初态问题
    • 3、子集化过程思路
    • 4、分割法过程思路
  • 使用方法:
  • 下载链接


问题描述

NFA确定化和最小化程序的设计与实现(参考教材3.4节)
目的:设计一个应用程序,将给定义的任意一个NFA自动转化为DFA,并对DAF最小化。使学生能够了解和掌握NFA自动转化为DAF和最小化的过程,理解和掌握自动机的相关理论和技术方法。
要求:
(1)通过文件读入或者窗口提示输入一个NFA,以状态转换图或者表格形式呈现NFA;
(2)给出采用子集法将NFA转为DFA的计算过程,以状态转换图或者表格形式呈现得到的DFA;
(3)给出采用分割法将DFA最小化的计算过程,以状态转换图或者表格形式呈现化简之后的DFA;
(4)呈现的NFA或者DFA需要指出开始状态和终止状态。

在这里插入图片描述


待解决问题

1、如何存储NFA或者是DFA

由于我不太清楚能否使用js实现图形绘制,所以,首先能确定的是,选择表格的方式呈现NFA和DFA
为了避免处理矩阵和呈现矩阵之间需要处理产生的麻烦,所以NFA和DFA处理的时候也采用矩阵的表示,也就是表格
但是表格方式呈现的NFA与DFA缺少对应状态应该属于的‘属性’,是初始状态,终止状态,还是普通的状态,这都是需要呈现出来的数据
因此对,矩阵表达做了一些修改,增加state状态,1做终态,-1做初态,0做普通状态
继而考虑到无法呈现ε弧线,因此又增加一个ε符号

在这里插入图片描述

除了表头以外的单元格,其他的单元格都存在出现多种数据的情况,因此每个单元格内的数据需要用数组存储,考虑到某一状态针对指定符号做出的move动作指向的状态是个集合,因此,如果使用数组存储这些数据,需要考虑到数据的唯一性

js中存在内置的对象Set,也就是集合,集合中的数据都是唯一的,可以便利这种存储。

因此可以确定矩阵的数据结构,整体是二维矩阵,除表头以外的矩阵内的每一元素都是一个Set集合,需要避免这个集合出现集合嵌套的问题。

继而考虑到,如何从文件中读取NFA的数据。

2、NFA多初态问题

检测state状态,将所有出现-1的行合并。

3、子集化过程思路

使用子集化来对NFA进行确定化的过程,在一开始,需要对初态求ε闭包,然后将其对各个符号求move,如果move之后的结果没有出现过,就需要对其再重复对各个符号求move的过程。

如果你对这个感知敏感一点的话,是否出现过其实是个判定条件,重复求move直到出现的状态都出现过就是递归的体现。

若是我的代码,我使用了determinizationContinue这个函数充当这个不断递归的过程,init和end只是做一些必要的准备工作。

4、分割法过程思路

在一开始,需要根据终态和非终态来划分两个集合,这个很容易做到,根据state的数据,分别做出两个set集合,然后将这两个集合再塞入一个大的集合就行。

而后的思路很类似于子集化过程中的递归求解。
这边创建一个旧的状态集合,保留使用分割法前的状态集合,不做改动
创建一个新的状态集合复制一遍旧的状态集合,然后保存分割一次后的状态集合(改动这里)。
如果这两个状态集合保持一致,那么就说明分割完成,无需继续递归求解,不一致就继续调用函数求解。

这一部分在我的代码中体现在minimizationContinue函数之中。

分割法如何比较,先复制一遍矩阵。
接着对这个矩阵的每一行的状态求move,判断move求解的结果,这个状态属于当前已经有的状态集合里的哪个,随后将move结果换成状态集合的字符串形式。这样属于同一状态集合的不同状态就有了共同之处,在比较的时候不会被分开。
对所有符号对应的单元格,做出上面的操作修改矩阵之后,合并所有的符号列,接着只比较这一列就好了。相同状态集合中的状态,如果对应的这一列出现不同,就分成不同的状态集合。


使用方法:

打开index.html文件,选择同目录下的test.xlsx文件即可。


下载链接

参考链接1:学校的编译原理课设成果

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

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

相关文章

我们公司都用哪些软件?强烈推荐这些

大家好,我是鱼皮。周末给大家分享一些轻松的干货吧,聊聊我们公司在用的软件,说不定能帮大家提高学习工作效率呢~ 我把软件分为四大类:团队协作、内容创作、文件共享、效率提升,分别介绍,便于大家选取。 团队…

Java实战之每日海报

前言 使用java生成每日海报。 项目起因是巧合下遇到了一篇很棒的文档,说的是用程序来实现每日生成一个海报。如果之后加上自动发布的功能,简直就是太棒了啊! 样例图如下: 每日海报 思路 访问某词站的API获取网络图片&#…

HTML--CSS--超链接样式以及鼠标样式自定义

超链接伪类 再复习一下,超链接的定义方式如下&#xff1a; <!DOCTYPE html> <html> <head> <title>这是一个标题</title><meta charset"utf-8"/><style></style> </head> <body><a href"http…

c语言题目之斐波那契数列

文章目录 题目一、什么叫斐波那契数列1&#xff0c;由来2&#xff0c;定义 二、代码编写总结 题目 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、什么叫斐波那契数列 1&#xff0c;由来 在数学历史上&#xff0c;欧洲黑暗时期过后&#xff0c;第…

服务器机房上架交付流程

服务器上架交付 服务器到货验收后&#xff0c;会进行机房机房上架&#xff0c;完成重装系统、网络配置后交付使用 1、到货验收 采购服务器到货后&#xff0c;会联合多部门进行SN、配置、数量等多方面验收&#xff0c;如数量是否匹配&#xff0c;配置是否相符等也会拆开机箱看看…

高精度磁导航传感器MGS系列RS232|RS485|CANBUS通讯连线方法

高精度磁导航传感器MGS系列&#xff0c;包含&#xff1a;CNS-MGS-080N、CNS-MGS-160N等&#xff0c;具有1mm的检测精度&#xff0c;特别适应于⾼精度磁条导航。利⽤检测磁场相对位置来进⾏AGV的辅助定位对接&#xff0c;获得更⾼的导航、定位、驻⻋精度。 MGS系列磁导航传感器⽀…

Linux进程【2】进程地址空间(+页表详解哦)

fork 引言&#xff08;程序地址空间&#xff09;进程地址空间进程地址空间mm_struct 虚拟地址到物理地址的转化总结 引言&#xff08;程序地址空间&#xff09; 在之前的学习过程中&#xff0c;我们认识了内存与地址&#xff0c;并且了解了在程序地址空间中的基本分区&#xf…

AI语音机器人的发展

第一代AI语音机器人具体投入研发的开始时间不太清楚&#xff0c;只记得2017年的下半年就已经开始接触到成型的AI语音机器人&#xff0c;并且正式商用。语音识别效果还不多&#xff0c;大多都是接入的科大讯飞或者百度的ASR。 2018年算是AI语音机器人的“青春期”吧&#xff0c;…

如何在网上赚取零花钱?真实靠谱的六个方法

现如今&#xff0c;时代的不断进步和发展。网赚这个词对我们来说已经不再陌生&#xff0c;随着互联网的发展&#xff0c;许多朋友都希望在空闲时间利用上网多赚一份收入&#xff0c;但因为不懂又经常有人被骗&#xff0c;造成大部分对很多可以赚钱的项目都不敢相信了&#xff0…

二叉树简介

二叉树 二叉树是每个节点最多有两个子树的树结构&#xff0c;通常子树被称作“左子树”和“右子树”。 二叉树的遍历 二叉树的遍历主要有三种方式&#xff1a;前序遍历、中序遍历和后序遍历。 前序遍历&#xff1a;访问根节点 --> 遍历左子树 --> 遍历右子树中序遍历&…

OS进程管理

进程 文章目录 进程概念组成特征状态与转换组织方式链接方式索引方式 进程控制实现进程控制如何实现原语的“原子性” 进程通信(IPC)共享存储基于存储区共享基于数据结构的共享 消息传递直接通信方式间接通信方式 管道通信 线程实现方式用户级线程内核级线程 多线程模式状态与转…

RT-Thread: eeprom存储芯片 at24cxx软件包使用流程

说明&#xff1a;介绍 i2c 通讯接口的 eeprom at24cxx 读写测、试代码&#xff0c;代码基于 at24cxx 软件包实现。 使用步骤&#xff1a; * 1&#xff1a;在 RT-Thread Settings 中开启 【软件模拟I2C】 * 2&#xff1a;在 RT-Thread Settings 软件包中搜索 at24cxx 添加软件…

数据结构学习 jz38 字符串的排列

关键词&#xff1a;字典序排列 dfs 回溯 哈希 这种全排列题目可以考虑用下一个排列的方法做&#xff0c;这是最优解&#xff08;方法四&#xff09; 题目&#xff1a;套餐内商品的排列顺序 我的&#xff1a;[ 用时: 21 m 11 s ] 回溯 dfs 哈希表 方法一&#xff1a;我写的 …

Maven 基础安装配置及使用

大家好我是苏麟 , 今天聊聊Maven . Maven Maven , 是Apache公司下基于Java开发的开源项目 . 我们构建一个项目需要用到很多第三方的类库&#xff0c;需要引入大量的jar包。一个项目Jar包的数量之多往往让我们瞠目结舌&#xff0c;并且Jar包之间的关系错综复杂&#xff0c;一…

海外云手机助力企业拓展海外市场

在当前全球化的商业环境中&#xff0c;由于政策限制&#xff0c;许多企业面临着无法顺利将产品推广到国外的困境&#xff0c;使得海外市场的机遇白白流失。而随着科技的不断创新&#xff0c;一种解决企业海外拓展困境的工具应运而生&#xff0c;那就是海外云手机。本文将深入探…

手撕乘积(**Multiplication** **Product**): 穷举和图示(2) 点积的几何意义

手撕乘积(Multiplication & Product): 穷举和图示(2) 点积的几何意义 点乘 x 3 y 5 xNda np.arange(x) >>> array([0, 1, 2]) x2Nda xNda*21 >>> array([1, 3, 5]) yNda np.arange(1, y) >>> array([1, 2, 3, 4]) xyNda np.meshgrid(xN…

Linux系统使用docker部署Geoserver(简单粗暴,复制即用)

1、拉取镜像 docker pull kartoza/geoserver:2.20.32、创建数据挂载目录 # 统一管理Docker容器的数据文件,geoserver mkdir -p /mydata/geoserver# 创建geoserver的挂载数据目录 mkdir -p /mydata/geoserver/data_dir# 创建geoserver的挂载数据目录&#xff0c;存放shp数据 m…

01.15

#include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();VideoCapture mv;mv.open("D:\\opencv\\heads\\01.mp4");//定义一个存放视频里读取到的一帧图像Mat src;//定义一个存…

配置华为设备NQA UDP Jitter检测VoIP业务抖动

组网需求 如图1所示&#xff0c;总部和子公司之间需要跨越外部网络进行通信&#xff0c;DeviceA和DeviceD为总部和子公司的网络出口设备&#xff0c;DeviceB和DeviceC为外部网络提供商的边缘设备。 总部和子公司之间经常要通过VoIP进行电话会议&#xff0c;要求双向时延小于2…

Java内置锁:深度解析ReentrantReadWriteLock并发类

ReentrantLock和ReentrantReadWriteLock是Java中用于线程同步的重要工具。ReentrantLock提供独占访问&#xff0c;适合需要保护共享资源不被并发修改的场景&#xff0c;同时支持可重入性&#xff0c;适用于递归操作。而ReentrantReadWriteLock则通过读写分离&#xff0c;允许多…