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

文章目录

  • 问题描述
  • 待解决问题
    • 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:学校的编译原理课设成果

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

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

相关文章

Android 12+ MQTT适配

最终的解决方案是下载源码去改。我用的是已经修改好了的库,如果包名要自己的, 要注意: 1. compileSdk 34 和 targetSdk 34 改成33(Android12)或者34(Android13)。 2. 下载的 module 导入。 …

运筹说 第56期 | 整数规划的数学模型割平面法

前几章讨论过的线性规划问题的一个共同特点是:最优解的取值可以是分数或者小数。然而,在许多实际问题中,决策者要求最优解必须是整数,例如公交车的车辆数、员工的人数、机器的台数、产品的件数等。那么,我们能否将得到…

第06章_面向对象编程(基础)拓展练习(求三角形面积,猴子吃桃,圆类,学生类,矩形类)

文章目录 第06章_面向对象编程(基础)拓展练习1、圆类2、学生类3、MyInt类4、MyDate日期类-15、MyDate日期类-26、数学计算工具类7、常识工具类8、学生对象数组9、员工管理类-110、员工管理类-211、比较大小12、数组排序和遍历13、求三角形面积14、图形工…

【分布式微服务专题】SpringSecurity OAuth2快速入门

目录 前言阅读对象阅读导航前置知识笔记正文一、OAuth2 介绍1.1 使用场景*1.2 基本概念(角色)1.3 优缺点 二、OAuth2的设计思路2.1 客户端授权模式2.1.0 基本参数说明2.1.1 授权码模式2.1.2 简化(隐式)模式2.1.3 密码模式2.1.4 客…

Maven 基础安装配置及使用

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

Openlayer【四】—— 控件

控件 控件是一个可见的小部件,其 DOM 元素位于 屏幕。它们可以涉及用户输入(按钮),也可以仅供参考; 位置是使用 CSS 确定的。默认情况下,它们位于 容器,但可以使用 任何外部 DOM 元素。 其中ol/control是…

【LV12 DAY20 RTC实验】

编程实现通过LED状态显示当前电压范围,并打印产生低压警报时的时间 注: 电压在1501mv~1800mv时,LED2、LED3、LED4、LED5点亮 电压在1001mv~1500mv时,LED2、LED3、LED4点亮 电压在501mv~1000mv时,LED2、LED3点亮 电压在…

车厢重组#洛谷

题目描述 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转 180 180 180 度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序…

自定义vector的实现

实现前需要思考的一个问题 为什么需要将空间的申请与对象的构建分开 查看vector的模板参数时可以看到其有第三个参数是空间适配器allocator,查找其对外提供的成员函数不难发现它的实现逻辑是将空间的申请与对象的构建分开的,为什么呢?不弄清…

ETCD 未授权访问实战案例

1、发现 etcd 未授权。 https://xxx200:2379/v2/keys 2、尝试在etcd里查询管理员的token,然后使用该token配合kubectl指令接管集群。 proxychains ./etcdctl --insecure-transportfalse --insecure-skip-tls-verify --endpointshttps://xxx0:2379/ get / --prefix…

算法通关村第十六关—滑动窗口经典问题(白银)

滑动窗口经典问题 一、最长子串专题 1.1 无重复字符的最长子串 LeetCode3给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。例如: 输入:s"abcabcbb" 输出:3 解释:因为无重复字符的最长子串是…

在Windows中安装MinGW

1、下载 github下载https://github.com/niXman/mingw-builds-binaries/releases 或官网下载https://www.mingw-w64.org/downloads/ 2、选择x86_64-12.1.0-release-posix-seh-rt_v10-rev3 3、解压到当前文件夹 解压之后,可以移动到自己喜欢的文件夹 ,复…

1月12日1月15日代码随想录路经总和从中序和后序遍历构造二叉树

112.路经总和 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。 叶子节点 …

msvcr120.dll丢失是什么意思,msvcr120.dll丢失怎样修复

msvcr120.dll是一个重要的动态链接库(Dynamic Link Library,DLL)文件,其中包含了Microsoft Visual C Redistributable for Visual Studio 2013的组件之一。当系统或应用程序提示该DLL文件缺失时,可能会导致应用程序无法…

电商物流查询:未来的发展方向

在电商日益繁荣的时代,物流信息查询不仅关乎消费者体验,更影响着电商运营的效率。快速、准确地追踪物流信息至关重要。本文将简述物流信息快速追踪的价值,并重点介绍固乔快递查询助手这一高效查询工具及其批量查询功能。 一、物流信息快速追踪…

gitLab创建项目无分支,本地新建module提交gitLab教程

第一: gitLab上创建好空项目 第二: 拉取到本地 本地新建module里面的代码拷到文件夹里(把里面的git文件拷到module里面也可以的) 第三: 默认分支为master,本地新建分支release1.0.0 以及 个人的分支feature/1.0.0-*** 新建分支&a…

基于springboot体育场馆运营管理系统源码

基于springboot体育场馆运营管理系统源码330 -- MySQL dump 10.13 Distrib 5.7.31, for Linux (x86_64) -- -- Host: localhost Database: springboot3cprm -- ------------------------------------------------------ -- Server version 5.7.31/*!40101 SET OLD_CHARACT…

Flink 处理函数(1)—— 基本处理函数

在 Flink 的多层 API中,处理函数是最底层的API,是所有转换算子的一个概括性的表达,可以自定义处理逻辑 在处理函数中,我们直面的就是数据流中最基本的元素:数据事件(event)、状态(st…

论文笔记(三十九)Learning Human-to-Robot Handovers from Point Clouds

Learning Human-to-Robot Handovers from Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 背景3.1. 强化学习3.2. 移交模拟基准 4. 方法4.1. Handover Environment4.2. 感知4.3. 基于视觉的控制4.4. 师生两阶段培训 (Two-Stage Teacher-Student Training) 5. 实验5.1. 模拟评估…

智能光栅光片显微成像技术的LabVIEW解决方案

智能光栅光片显微成像技术的LabVIEW解决方案 在生物医学研究中,高效的成像技术对于捕捉细胞内罕见和复杂事件至关重要。智能光栅光片显微技术(smartLLSM)的出现,代表了LabVIEW软件在高端成像领域的革命性应用,这项技术…