java实现有限自动机_Java 实现一个非确定性有限自动机(NFA)
我正在尝试开发一种在
Java中执行非确定性有限自动机的模拟.第一个命令行参数是定义机器的文本文件.第二个参数是输入字符串.如果它接受字符串,则打印到标准输出“accept”,然后是可以结束的接受状态列表.如果它拒绝,则输出“reject”,然后输出所有可能的结束状态列表.
例如,文字:
state 1 start
state 2
state 7 accept
transition 1 0 1
transition 1 1 1
transition 1 0 2
transition 2 0 2
transition 2 0 1
transition 2 1 1
transition 2 0 7
transition 7 0 7
transition 7 1 7
看起来像:
输入字符串为10将输出
reject 1 2
并输出一个输入字符串000
accept 7
我需要建议使用什么数据结构.我想过使用hashmaps和sets但是我不确定.
我认为你应该把你的自动机变成一个确定性的自动机,然后做一些明显的事情.
在软件中实现有限状态机有三种常用方法:
>将转换函数表示为表(2D数组),并在每个字符读取时,查找其中的下一个状态.
>将嵌套的switch语句用于当前状态和输入字符,以在代码中显式定义下一个状态.
>使用状态模式:在给定输入字符的情况下,使用返回下一个状态的方法将每个状态表示为一个类.
由于您需要在运行时构建自动机,因此最后两个选项并不真正适用,因此您应该使用查找表.如果您的字母表很小,您可以记下所有过渡.如果字母表很大,这可能会浪费很多空间,你可以考虑一下曾经是一个活跃的研究领域的表压缩.
对于Downvoters:你不能写一个“执行”非确定性自动机的确定性程序.然而,通过理论计算机科学的一个相当基本的定理,您可以通过完全自动化的过程将任何非确定性有限状态自动机转换为确定性自动机,即可以在软件中轻松实现的确定性算法.每个计算机科学专业的学生都应该使用铅笔和纸张至少完成一次这个程序.如果你这样做,你将很快看到如何跟踪原始自动机的哪些状态进入确定性状态的哪些状态.然后,简单地模拟后者,看看它结束的状态,并输出构成它的原始非确定性自动机的状态.
java实现有限自动机_Java 实现一个非确定性有限自动机(NFA)相关推荐
- 【计算理论】可判定性 ( 非确定性有限自动机的接受问题 | 证明 “非确定性有限自动机的接受问题“ 的可判定性 )
文章目录 一.非确定性有限自动机的接受问题 二.证明 "非确定性有限自动机的接受问题" 可判定性 一.非确定性有限自动机的接受问题 非确定性有限自动机 的 接受问题 , 首先将 计 ...
- 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
文章目录 一.非确定性自动机 计算过程 ( 计算树 ) 二.判定 非确定性自动机 接受的字符串 三.自动机 设计要求 四.非确定性有限自动机设计 五.非确定性有限自动机 与 确定性 有限自动机 比较 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA | 示例 ) ★★
文章目录 一.正则表达式转为非确定性有限自动机 NFA 要点 二.正则表达式转为非确定性有限自动机 NFA 示例 1 三.正则表达式转为非确定性有限自动机 NFA 示例 2 四.正则表达式转为非确定性 ...
- 【计算理论】计算理论总结 ( 正则表达式转为非确定性有限自动机 NFA ) ★★
文章目录 一.正则表达式 二.正则语言运算示例 ★ 三.根据正则表达式构造自动机 一.正则表达式 1 . 正则表达式原子定义 : 如果 RRR 是 字符集 Σ\SigmaΣ 中的 111 个字符 , ...
- 【计算理论】正则语言 ( 推广型的非确定性有限自动机 GNFA | 删除状态 | 确定性有限自动机 转为 正则表达式 )
文章目录 一.推广型的非确定性有限自动机 ( GNFA ) 引入 二.推广型的非确定性有限自动机 ( GNFA ) 删除状态 三.确定性有限自动机 ( DFA ) 转为 正则表达式 四.确定性有限自动 ...
- 【计算理论】计算理论总结 ( 非确定性有限自动机 NFA 转为确定性有限自动机 DFA | 示例 ) ★★
文章目录 一.NFA 转 DFA 示例 1 二.NFA 转 DFA 示例 2 三.NFA 转 DFA 示例 3 一.NFA 转 DFA 示例 1 将下图的 非确定性有限自动机 NFA 转为确定性有限自 ...
- java定义负数_java定义一个负数
提示: InsufficientFundsException,NagativeFundsException 为自定义的类,分别产生余额不足异 常和取款为负数异常,需继承 Exception 类. 通过 ...
- java输出值_java输出一个值的绝对值怎么编写?
小伙伴们知道在java中要如何输出一个值的绝对值吗?这次我们就来实验一下如何输出绝对值吧. 例1:import java.util.Scanner; public class Question1 { ...
- 扫描java类文件_java递归与非递归实现扫描文件夹下文件的实例代码
java递归与非递归实现扫描文件夹下所有文件 java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下 扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种 ...
- java十进制输出_JAVA输入一个十进制数N,输出r进制的数
\\引入包 import java.util.Scanner; import java.util.Stack; public class Change { public static void mai ...
最新文章
- 为什么 CPU 访问硬盘很慢
- 量子纠缠背后的故事(廿五):深藏幕后的神秘力量
- 80486保护模式存储管理
- 动态规划简单应用:斐波那契数列
- 快手通过标签添加的我_快手怎么上热门?快手短视频推荐指标有哪些?
- 自定义组件-BreadcrumbTreeView 的使用
- 从零开始学Vue(一)—— Vue.js 入门
- 通信原理 第7版 樊昌信版
- VS2005水晶报表教程
- report machine实现报表分栏
- Python自动化办公练习——合并工作簿
- 百度 bos php,Thinkphp5对接百度云对象存储 BOS(代码示例)
- diskpart建立新卷
- 快速理解 HTTP协议
- 路边拾遗之其他模块(struct/csv/xlwt/smtp)
- 新版ECharts实现“暂无数据”的完美解决方案
- Go实现的一站式云原生机器学习平台 | Gopher Daily (2020.12.08) ʕ◔ϖ◔ʔ
- 处理Oracle数据库服务安全漏洞的几种方法
- css罕见的冷门样式
- mysql脚本文件生成工具_SqlDataToScript(sql脚本生成工具)