问题标签 [nfa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
finite-automata - 决定 L(M) = {a} 还是 L(M) =/= {a} 的算法
我开始了解 NFA 和 DFA,并在 Berkley PDF 中的一个关于 DFA 的网上偶然发现了这个问题,但这个问题没有附加解决方案。
我如何能够证明存在一种算法,它接收字母表上的 DFA M 作为输入{a, b}
并决定是否L(M) = {a}
或L(M) =/= {a}
?
任何指导将不胜感激。
java - 将电源状态映射到唯一编号 NFA 到 DFA
我正在编写将 NFA 转换为 DFA 的代码,如果我们有一个电源状态 {1,2,4},我必须将其转换为某个唯一的数字,比如 x。另外我必须做反向映射,这样我得到 x,我必须将电源状态返回为 {1,2,4}
我想出了集合 1、2、4 的字符串表示形式的 HashMap,并将值作为唯一编号。但随着代码的增长,我可能有 (1,2,4) 和 (2,1,4) 两者都是相同的集合但不是相同的字符串。然后我想到了对状态字符串进行排序并将其用作映射键。但似乎我的逻辑很复杂。
regex - 将 NFA 转换为正则表达式并判断它是否是 3 的倍数?
我正在练习,只是想确认我是否正确地做出了表达并将表达识别为 3 的倍数?
regex - 从简单的陈述中得出 DFA(或 NFA)的步骤?
我得到了一个简单的陈述:在alphabet {0, 1}
接受的基础上构建一个 DFA all the strings that end in 101
?
我的问题是,设计它的步骤是什么?或者设计一个 NFA,因为那时我知道将 NFA 转换为 DFA 的明确步骤,所以我会将 NFA 转换为 DFA。
注意:- 这对我来说只是一门小课程,所以我从来没有研究过像正则表达式这样的东西,或者任何可能用于构造 DFA 的算法。
finite-automata - 这个 DFA 中的三个点是什么?
我需要了解这个 DFA 吗?我没看懂,尤其是图中的三个点。我对为什么过渡指向它指向的位置有一个模糊的想法。但我仍然很困惑。因此,如果有人能说出这些点的含义,那就太好了:
1. 当它们出现在过渡名称上时,例如 1?2. 什么时候出现在两个不相连的状态之间?
regex - 如何以最简单的形式隐藏正则表达式?
我已经从 nfa (NFA 到正则表达式)制作了这个表达式:
但在书中的答案是这样写的:
我在想我的答案和书一样,但他们已经把它转换成它,就像我们做的二次方程一样。所以任何可以帮助我或预订答案的人是错的还是我的错?
regex - 以相同二进制数字开头和结尾的一组字符串的 NFA
到目前为止,我有正则表达式 1(0|1)*1|0(0|1)*0。我想知道 0 或 1 本身是否算作结束状态,因为它们是个位数,但它们在技术上是否以相同的数字开始和结束?
java - java.lang.ArrayIndexOutOfBoundsException: 49 错误 - NFA Java
我正在编写代码来模拟非确定性有限自动机。该程序要求用户输入 NFA,然后输入字符串以测试它们是否属于 NFA。但是,由于此错误,程序不断崩溃:
java.lang.ArrayIndexOutOfBoundsException:49
我已经尝试了很多来查看是否以及在哪里发生了溢出,但我就是想不通。
我的班级 NFA:
我的主要功能:
任何有助于理解问题原因的帮助将不胜感激。另外,我是java的新手,所以我的实现可能不是最好的。
graph - 在 OCaml 中使用循环定义图节点变体
我正在尝试实现一个正则表达式到 NFA 转换器。我已经编写了大部分代码,但是我正在努力寻找一种方法来构建具有循环的图形,因为我对状态(节点)和边的表示。
我的图形表示如下:
我将正则表达式转换为 NFA 的函数基本上是对正则表达式类型的模式匹配,接受正则表达式类型和“最终状态”(NFA 的所有传出边都将去的地方)并返回“开始状态”该正则表达式的(部分构建的)NFA。NFA 片段是通过返回一个使用其传出边列表构造的状态来构建的,其中每个边的结束状态是通过递归调用构造的。
大多数代码都很简单,但是我在为 Kleene 星和 + 构建 NFA 时遇到了麻烦,这需要图中的循环。鉴于我的代表,我最终得到了类似的结果:
显然这不会编译,因为此时 s 是未定义的。但是我也不能添加“rec”关键字,因为类型检查器将(正确地)拒绝这种递归定义的类型,并且我无法通过使用 Lazy 来解决这个问题,因为强制评估“s”将递归地强制它(再次然后再次...)。基本上我在这里有一个先有鸡还是先有蛋的问题-我需要在“状态”引用完全构造之前将其传递到另一个状态,该状态将返回它,但是当然原始状态必须完全构造才能传递在递归调用中。
有没有办法在不使用引用/可变记录的情况下做到这一点?我真的很想尽可能保持它的功能,但鉴于这种情况,我看不到解决办法......有人有建议吗?
regular-language - 设计接受特定长度字符串的 NFA
我期待设计一个接受某种字符串的 FA,它接受一些 A 和 B。
首先是一个字符串,其中 A 的数量是 B 的五倍。
我的意思是 L={w∈{A,B}* and (nA(W)-nB(W) mod 5=0)
还有一个 FA,它接受字符串中不同数量的字符:
我设计了一些 FA 但它们在这个复杂的字符串上不能完美地工作。
我应该如何设计这个有什么帮助吗?