如何编写Java代码来确定给定的自动机是否具有确定性。我有一个代表自动机的类,它有以下五个变量:
java prettyprint-override">int alphabet_size;
int n_states;
int delta[][];
int initial_state;
int accepting_states[];
Δ表示如下所示,例如,在实际自动机中,程序中的q1,1,q2看起来像{1,1,2}
。我知道在一个非确定性自动机中,可能有多个可能的状态,但我不知道如何计算。
对于您现在拥有的成员变量,您只能表示确定性的FSA。为什么?因为NDFSA是一个状态q1和输入a的状态
在delta中。您实现这个(qfrom,输入)-
一个非常快速的解决方案是允许所有instate输入对都有一个Outstate列表,如下所示:
ArrayList[][] delta;
然而,这是丑陋的。如果你意识到delta实际上是来自-
另一件需要认识的事情是,int[]
在概念上与Map相同
Map<Integer, Map<Integer, List<Integer>>> delta;
无论您选择哪种实现,决定FSA是否具有确定性的测试都非常简单,并且来自定义:A是DFSA,如果
delta
中所有列表的长度是
*请注意,真正的FSA库通常使用不同的方法。例如,foma使用一个过渡对象数组,其中包含instate、outstate和输入字符字段。然而,对于初学者来说,上面这些可能更容易处理。
这里的“自动机”指的是”确定有限状态自动机”。而自动机是信息学奥林匹克竞赛、计算机科学中被广泛使用的一个数学模型,其思想在许多字符串算法中都有涉及,学习自动机有助于理解上述算法,但是学习自动机前一定要先了解基础图论的相关知识,这样才更好理解自动机。 自动机(确定有限状态自动机)是由一个非空有限状态的集合Q、一个输入字母表 Σ(非空有限字符的集合)、一个转移函数(单值映射)、一个开始状态、一个接受状
如果我必须用一个状态图来画一个确定性有限自动机,以接受一种语言,例如{λε{a,b}*:λ这个词包含a的偶数和b的奇数,我怎么知道我有多少个状态?
如果我们有一个没有最终/接受状态的有限自动机。所以F是空的。你如何最小化它?我得到了一个测试,在这个测试中,我被要求最小化一个自动机,但是它有空的F,我不知道如何解决这个问题,因为自动机没有接受状态。一个包含所有转换的初始状态是正确最小化的自动机吗?我想如果两个自动机A和B对于任何可能的输入,A返回与B完全相同的输出,它们必须是等价的。因此,如果一个自动机没有最终状态,那么它不接受任何输入或者任何
我不熟悉自动机理论。下面这个问题是为了练习: 让一种语言由以不同符号开头和结尾的单词组成,字母表为{0,1}。例如,001、10101010100、10和01都被接受。但101、1、0和1010001101被拒绝。 我该如何: 我试图发布我画的DFA的图片,但不幸的是,我需要10个声誉来发布图片,而我还没有。
在发布了一个有点模棱两可的问题后,我相信我已经明确了我想知道的(我是FSMs的新手)。 我想在clojure中使用有限状态机(可能是不确定的自动机,即允许多个下一个状态转换)来模拟状态空间。 这基本上是我的问题: 假设我们有这些状态,并且我们有平均一天中每个状态的持续时间-为了便于讨论,这些都以分钟为单位。那么如何使用clojure创建一个可能不确定的FSM(允许多个目的地状态)呢?我已经看了例如
问题内容: 有没有办法检查输入流()是否有数据? 从GO的初始stdin中读取帖子?显示了如何读取数据,但是不幸的是,如果没有数据通过管道传送到stdin中,则会阻塞。 问题答案: os.Stdin与其他任何“文件”一样,因此您可以检查其大小: 我将其构建为“管道”可执行文件,其工作方式如下: