问题标签 [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.

0 投票
1 回答
82 浏览

finite-automata - 决定 L(M) = {a} 还是 L(M) =/= {a} 的算法

我开始了解 NFA 和 DFA,并在 Berkley PDF 中的一个关于 DFA 的网上偶然发现了这个问题,但这个问题没有附加解决方案。

我如何能够证明存在一种算法,它接收字母表上的 DFA M 作为输入{a, b}并决定是否L(M) = {a}L(M) =/= {a}

任何指导将不胜感激。

0 投票
1 回答
111 浏览

java - 将电源状态映射到唯一编号 NFA 到 DFA

我正在编写将 NFA 转换为 DFA 的代码,如果我们有一个电源状态 {1,2,4},我必须将其转换为某个唯一的数字,比如 x。另外我必须做反向映射,这样我得到 x,我必须将电源状态返回为 {1,2,4}

我想出了集合 1、2、4 的字符串表示形式的 HashMap,并将值作为唯一编号。但随着代码的增长,我可能有 (1,2,4) 和 (2,1,4) 两者都是相同的集合但不是相同的字符串。然后我想到了对状态字符串进行排序并将其用作映射键。但似乎我的逻辑很复杂。

0 投票
1 回答
119 浏览

regex - 将 NFA 转换为正则表达式并判断它是否是 3 的倍数?

我正在练习,只是想确认我是否正确地做出了表达并将表达识别为 3 的倍数?

在此处输入图像描述

0 投票
1 回答
10052 浏览

regex - 从简单的陈述中得出 DFA(或 NFA)的步骤?

我得到了一个简单的陈述:在alphabet {0, 1}接受的基础上构建一个 DFA all the strings that end in 101

我的问题是,设计它的步骤是什么?或者设计一个 NFA,因为那时我知道将 NFA 转换为 DFA 的明确步骤,所以我会将 NFA 转换为 DFA。

注意:- 这对我来说只是一门小课程,所以我从来没有研究过像正则表达式这样的东西,或者任何可能用于构造 DFA 的算法。

0 投票
1 回答
120 浏览

finite-automata - 这个 DFA 中的三个点是什么?

我需要了解这个 DFA 吗?我没看懂,尤其是图中的三个点。我对为什么过渡指向它指向的位置有一个模糊的想法。但我仍然很困惑。因此,如果有人能说出这些点的含义,那就太好了:

1. 当它们出现在过渡名称上时,例如 1?2. 什么时候出现在两个不相连的状态之间?

在此处输入图像描述

0 投票
1 回答
75 浏览

regex - 如何以最简单的形式隐藏正则表达式?

我已经从 nfa (NFA 到正则表达式)制作了这个表达式:

但在书中的答案是这样写的:

我在想我的答案和书一样,但他们已经把它转换成它,就像我们做的二次方程一样。所以任何可以帮助我或预订答案的人是错的还是我的错?
在此处输入图像描述

0 投票
0 回答
1252 浏览

regex - 以相同二进制数字开头和结尾的一组字符串的 NFA

到目前为止,我有正则表达式 1(0|1)*1|0(0|1)*0。我想知道 0 或 1 本身是否算作结束状态,因为它们是个位数,但它们在技术上是否以相同的数字开始和结束?

0 投票
1 回答
1000 浏览

java - java.lang.ArrayIndexOutOfBoundsException: 49 错误 - NFA Java

我正在编写代码来模拟非确定性有限自动机。该程序要求用户输入 NFA,然后输入字符串以测试它们是否属于 NFA。但是,由于此错误,程序不断崩溃:

java.lang.ArrayIndexOutOfBoundsException:49

我已经尝试了很多来查看是否以及在哪里发生了溢出,但我就是想不通。

我的班级 NFA:

我的主要功能:

任何有助于理解问题原因的帮助将不胜感激。另外,我是java的新手,所以我的实现可能不是最好的。

0 投票
1 回答
633 浏览

graph - 在 OCaml 中使用循环定义图节点变体

我正在尝试实现一个正则表达式到 NFA 转换器。我已经编写了大部分代码,但是我正在努力寻找一种方法来构建具有循环的图形,因为我对状态(节点)和边的表示。

我的图形表示如下:

我将正则表达式转换为 NFA 的函数基本上是对正则表达式类型的模式匹配,接受正则表达式类型和“最终状态”(NFA 的所有传出边都将去的地方)并返回“开始状态”该正则表达式的(部分构建的)NFA。NFA 片段是通过返回一个使用其传出边列表构造的状态来构建的,其中每个边的结束状态是通过递归调用构造的。

大多数代码都很简单,但是我在为 Kleene 星和 + 构建 NFA 时遇到了麻烦,这需要图中的循环。鉴于我的代表,我最终得到了类似的结果:

显然这不会编译,因为此时 s 是未定义的。但是我也不能添加“rec”关键字,因为类型检查器将(正确地)拒绝这种递归定义的类型,并且我无法通过使用 Lazy 来解决这个问题,因为强制评估“s”将递归地强制它(再次然后再次...)。基本上我在这里有一个先有鸡还是先有蛋的问题-我需要在“状态”引用完全构造之前将其传递到另一个状态,该状态将返回它,但是当然原始状态必须完全构造才能传递在递归调用中。

有没有办法在不使用引用/可变记录的情况下做到这一点?我真的很想尽可能保持它的功能,但鉴于这种情况,我看不到解决办法......有人有建议吗?

0 投票
1 回答
1022 浏览

regular-language - 设计接受特定长度字符串的 NFA

我期待设计一个接受某种字符串的 FA,它接受一些 A 和 B。

首先是一个字符串,其中 A 的数量是 B 的五倍。

我的意思是 L={w∈{A,B}* and (nA(W)-nB(W) mod 5=0)

还有一个 FA,它接受字符串中不同数量的字符:

我设计了一些 FA 但它们在这个复杂的字符串上不能完美地工作。

我应该如何设计这个有什么帮助吗?