问题标签 [automaton]
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.
java - 通过 HashMap 在这个自动机中从一个状态移动到另一个状态
我正在使用此方法在此自动机模拟器上从一个状态移动到下一个状态:
}
这里:
我可能做错了什么,但我不明白。
自动机总是卡在状态 0,尽管 StringBuilder 正在正确处理,为什么?
这是完整的代码:
这是输入文件:
编辑:在这里我将解释这个输入文件的格式
第一行代表测试用例的数量。
每个测试用例以 3 个整数开头,第一个是自动机的状态数,接下来是字母表中的符号数,然后是最终状态数。
下一行是字母表。这些符号一起出现。
然后有许多行等于描述转换函数的状态数。这组线的第一行表示自动机 (qo) 中第一个状态的转换函数,第一个元素表示当字母表中的第一个符号进入该状态时达到的状态,依此类推。我无法从原始问题陈述中理解这一点。这是我来看它的最简单的方法:
这些行:
平等的:
然后有一行说明自动机的最终状态。
然后是一行,说明哪个是初始状态以及将出现多少输入字符串。
然后是输入字符串的行。
这个程序的输出应该是:
C
我错了所有用粗体写的行。
我越来越:
我的自动机接受一切并卡在状态 0,为什么?
java - 我应该如何实现这个 HashMap 的 equals 和 hashCode 方法来表示自动机状态?
我想将 State 对象(它们是以 Character 作为键,State 作为 Value 的 HashMaps 放入名为 allStates 的 ArrayList 中。我应该在这里覆盖 equals 和 hashCode 方法吗?为什么?如何?
此代码适用于我迄今为止构建的 Automaton 和 State 类:
oop - 在 OOP 中实现有限状态自动机
我正在考虑用 Java 或 C++ 等 OOP 语言实现一个具有有限状态自动机的程序。
对于良好的软件设计,您认为使用可管理数量的可用状态来实现这一点的最佳方法是什么?
为每个州实现一个自己的类是否很好?如果是,如何在两个国家之间架起桥梁?
感谢您的任何评论!
string-parsing - 我必须解析复杂的字符串格式。实施自动机是一种明智的方法吗?
我目前正在努力解决我必须解析的特别令人讨厌的字符串格式。字符串可以包含表示必须解析的变量属性的子字符串。想象一下类似的东西"ThisExampleStringContainsA[VARIABLE_PROPERTY]"
。此外,这些属性可以任意嵌套,并且它们可以具有不同的含义,具体取决于上下文。如果[VARIABLE_PROPERTY]
实际上不是变量的有效名称(当然必须在运行时确定),它只是成为整个字符串的正常部分,并且保持不变和逐字记录。接下来,没有无效的字符串,因为左方括号的数量不需要与右括号的数量匹配!This]Is[A[Valid]]][ExampleToo!
. 还有更多规则,但这会给你一个想法。
所以,目前我不确定如何处理这个问题。我的第一次尝试以一堆令人难以置信的 if 和 else 告终,我越来越注意到解决方案应该适当地包含某种状态概念。现在,我越来越多地考虑使用自动机来做到这一点。但是,我遇到的自动机只是纯粹的理论构造。我从来没有遇到过实际的实现。此外,自动机传统上用于验证单词,即确定它是否属于正式定义的语言。不用说,我很难对这种语言做出正式的定义。
你会如何处理这个问题?你认为实际实现自动机是一种理智的方法吗?您将如何从 OO 设计的角度对此进行建模?该项目在 C# 中,如果这有什么不同的话。你会建议一些完全不同的东西吗?
/Edit:我的描述可能有点误导,这里有一些详细信息:对我来说,问题是以正确的顺序(从最里面到最外面)找到属性。一旦你确定了下一个要解析的属性,用它的最终值进行实际替换就相对容易了。
让我们以上面的例子为例,我会给你一个逐步的例子来说明应该发生的事情。完整的输入字符串是:This]Is[A[Valid]]][ExampleToo!
第一个右括号和最后一个左括号只是普通字符,因为它们不包含任何内容。对于不在匹配括号对之间的所有字符也是如此。这给我们留下了部分[A[Valid]]]
。必须首先解决最里面的属性,即[Valid]
. 方括号只是将属性标识字符串括起来,Valid
我们将要解析的属性名称也是如此。比方说,这个字符串实际上确实标识了一个属性,并且它被替换为它的实际值,比方说Foo
。包括括号在内的标识字符串被替换,因此[Valid]
变为Foo
. 现在,我们必须看看[AFoo]]
. 让我们假设AFoo
没有标识一个属性,它使子字符串保持不变(包括括号)。最后,后面的第二个右括号AFoo
没有匹配的左括号,因此也只是一个字符。处理完成后,整个字符串将显示为:This]Is[AFoo]][ExampleToo!
我希望这个例子能让事情更清楚一点。请记住,我在这里简化了字符串格式!这只是给你一个想法,我面临什么困难。我不期望工作代码,我正在寻找可以让我了解如何解决问题的答案。由于必须对数千个字符串进行此解析,因此解决方案必须具有某种合理的性能。
functional-programming - 自动机的转移函数
我的目标是在 OCaml 中实现一个转换函数,它接受输入一个状态,一个字符返回一个正布尔公式(包括真假)。即:\delta(q0,a) = q1 and (q2 or q3)
我的问题是如何在 ocaml 中表示一个布尔公式以及如何用这个特定的方法实现转换函数
algorithm - aho corasick 的可扩展性
我想从关键字数据库(从维基百科文章标题中提取)中搜索出现关键字的文本文档。(即给定一个文档,我想查找是否有任何短语有相应的维基百科文章)我发现了 Aho-Corasick 算法。我想知道为数百万条目的字典构建 Aho-Corasick 自动机是否高效且可扩展。
c - 实现元胞自动机?“规则 110”
我想知道如何使用 55 行和 14 个单元格的规则 110。然后我必须在 LED 矩阵显示器中显示它。
无论如何我的问题是,我怎样才能实现这样的自动机?
我真的不知道从哪里开始,有人可以说明我该如何解决这个问题吗?
我必须遵循特定的方法吗?
谢谢
--使用的程序是-> C
编辑
那有意义吗 ??org 代表原创
design-patterns - 自动匹配字符串的模式
如何使用字母 {a,b} 创建用于搜索模式 P="abaabba" 的自动机?
c++ - DFA 最小化 Brzozowski 算法
我正在尝试实现 Brzozowski 的算法以最小化我的 DFA 以下是相同的算法。
其中r()
是 NFA 的反转D()
并将 NFA 转换为 DFA。
但我不明白r()
在谷歌上搜索是什么意思也没有提供太多信息。
谁能解释一下什么是r()
NFA。
任何其他可用的简单算法或 C++ 实现请告诉我链接。
language-agnostic - Peg Solitaire / Senku 解算法
我需要为Peg solitaire / Senku 游戏编写求解器这里
已经有一个问题,但建议的答案是带有回溯的蛮力算法,这不是我正在寻找的解决方案。
我需要找到一些启发式方法来应用 A* 算法。剩余的钉子不是一个好的启发式,因为每一步都会丢弃一个钉子,因此成本始终是统一的。
有任何想法吗?