- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
下午好,
有谁知道 .NET 中 Levenshtein DFA(确定性有限自动机)的“开箱即用”实现(或易于翻译)?我有一个很大的字典,里面有超过 160000 个不同的单词,我想在给定一个初始单词 w 的情况下,以一种有效的方式找到 Levenshtein 距离最多 2 个 w 的所有已知单词。
当然,有一个函数可以计算给定单词的一个编辑距离处的所有可能的编辑,并将其再次应用于这些编辑中的每一个,解决了这个问题(并且以一种非常直接的方式)。问题是效率 --- 给定一个 7 个字母的单词,这已经需要 1 秒多的时间才能完成,我需要更高效的东西 --- 如果可能的话,就像 Levenshtein DFA 一样,这是一个需要 O(| w|) 步骤。
编辑:我知道我可以通过一点点学习来构建自己的解决问题的方法,但目前我无法阅读 Schulz 和 Mihov 长达 60 页的文章。
非常感谢。
最佳答案
我们为 apache lucene java 实现了这个,也许你可以将它转换为 C# 并节省自己的时间。
主类在这里:它只是一个使用 Schulz 和 Mihov 算法从字符串中获取 Levenshtein DFA 的构建器。
http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/automaton/LevenshteinAutomata.java
Lev1 和 Lev2 的参数描述(预先计算的表)在这里:
http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/automaton/Lev1ParametricDescription.java
http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/automaton/Lev2ParametricDescription.java
你可能会注意到这些是用计算机生成的,我们用这个脚本生成了它们,使用 Jean-Phillipe Barrette 的伟大的 moman 实现(python)
http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/automaton/createLevAutomata.py
我们将参数描述生成为打包的 long[] 数组,以便它不会使我们的 jar 文件太大。
只需修改 toAutomaton(int n) 以满足您的需求/DFA 包。在我们的例子中,我们使用了 brics 自动机包的修改形式,其中转换表示为 unicode 代码点范围。
有效的单元测试对于这类事情是困难的,但这是我们提出的……它似乎很彻底,甚至在 moman 实现中发现了一个错误(作者立即修复了!)。
http://svn.apache.org/repos/asf/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/automaton/TestLevenshteinAutomata.java
关于.net - .NET 中的 Levenshtein DFA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3977182/
我最近在读一篇论文 Algorithms to Accelerate Multiple Regular ExpressionsMatching for Deep Packet Inspection关于
我正在备考,完成了图中这个任务 通常,从 NFA 到 DFA 的转换对我来说很容易。我从 NFA 创建一个转换表,并为每个"new"组合状态创建一个新列等等(看看我的尝试解释得更好) 不知何故,我对
我正在练习我的 DFA,我遇到了这个似乎非常复杂的问题。我试着把它分成两个较小的问题,我有一个答案,但它看起来不适合我。 有人可以帮助我,或者至少给我一些提示。 顺便说一下,它们都是接受状态。 我能想
正如标题所示,我希望有人帮助我编写 NFA 到 DFA 的转换的代码。我只需要伪代码。我试过用谷歌搜索,甚至找到了整个源代码,但是几乎没有资源可以帮助我给我一个正式的方法(用书面文字,而不是通过图片)
我有一个关于 DFA 最小化的问题。所以我使用了众所周知的技术将正则表达式转换为 NFA,然后使用 goto/closure 算法从中构造 DFA。现在的问题是如何将其最小化?我在这里看过有关它的课文
我已经在纸上编写了DFA,并希望将其转换为一组正则表达式。有人知道这样做的好工具吗? 最佳答案 从我的Google小搜索中,我找到了JFLAP。他们也有关于how to Convert FA to r
一个多小时以来,我一直在尝试不同的方法来解决这个问题,但我感到非常沮丧。 问题是:给出以下每种语言在 Sigma = {0,1} 上的正则表达式和 DFA。 a). {w ∈ Σ* | w 包含偶数个
我正在学习如何使用配对表法(系统化约简法)来约简 DFA。这是我们要约简的 DFA。 第一步是在表格中布置 DFA: 0
有人能告诉我所附的 DFA 是否正确吗? 我想为具有字母 Σ ={a, b} 的语言提供 DFA 我需要 DFA ----> A={ε, b, ab} 最佳答案 不,有多种原因: 您的自动机 bab
我的程序应该为二进制字符串实现 dfa...dfa 是一台一次只能处于一种状态的机器(当您输入字符串时,机器应该使用它,并且在最后一步它应该到达最终状态。如果是这样,我们说该字符串被机器接受)...这
我想创建一个 O(1) 复杂度的自动机的转换函数。我在考虑使用 HashMap 或 Binary tree 。那些想法好吗?你有什么建议吗?感谢您的关注:) 最佳答案 如果您确实需要对转换函数进行持续
我有一个 DFA A 和一个 CFG G,然后我必须检查 G 是否生成了 A 不接受(被 A 拒绝)的无限单词,以及一个不错的复杂度时间。 我想用 CFG 构造一个图,如果它包含有向循环,则生成无限语
我正在查看将 DFA 转换为正则表达式的时间复杂度分析“Introduction to the Automata Theory, Languages and Computation”,第 2 版,第
我需要生成一个确定性有限自动机 (DFA),它是从满足以下属性的所有可能的 DFA 中选出的。必须选择均匀分布的 DFA。 DFA 必须具有以下四个属性: DFA 有 N 个节点。 每个节点都有 2
我有一个 DFA (Q, Σ, δ, q0, F) 和一些“不关心的转换”。这些转换模型符号已知在某些情况下不会出现在输入中。如果采取任何此类转换,则结果字符串是否被接受都无关紧要。 是否有一种算法可
我有一个程序,它只是将所有状态作为一组状态作为输入。然后下一个输入是状态集合中的初始状态,然后是最终状态集合。 接下来是我在状态之间进行的一组转换。 例如:q0,1,q1 这意味着在输入 1 上存在从
在修改封闭源代码游戏时,我在运行时修改机器代码以跳转到我自己的代码中。为了以通用方式执行此操作,我使用模式匹配来查找我想要修改的代码位置。 (模式仅由字符/字节和通配符组成,其中字节可以变化。)通过从
从这个语法开始:https://stackoverflow.com/a/14287002/1082002我会实现一个简单的语法来接受和评估这样的简单语言: { if a==c { a
有了 DFA 的图表,如何将其转换为图灵机?我是否必须找到 DFA 接受的语言,然后创建图灵机?或者有直接的方法吗? 谢谢你。 最佳答案 DFA 中的每个转换读取输入的一个字符,跟随一个转换,然后移动
我希望在我的词法分析器中实现一个 DFA 最小化器,但我似乎无法生成一个看起来不像它已经是表达式的最小 DFA 的 DFA。 我正在从 NFA 构建 DFA,该 NFA 是使用后缀正则表达式中的汤姆森
我是一名优秀的程序员,十分优秀!