java - 有限自动机字符串匹配器

标签 java string algorithm string-matching finite-automata

我正在尝试使用 java 构建 FA 字符串匹配器。我有以下伪代码。

enter image description here

要使有限自动机匹配器算法起作用,必须计算转换函数。以下算法 Compute-Transition-Function 计算给定模式 P 和字母表 sigma。

enter image description here

在上面的代码中,我无法理解 min(m + 1, q + 2) 是从哪里来的。 (我确实理解为什么它是 k = min(m + 1, q + 2) 而不是 k = min(m, q + 1) 但为什么我们首先想要 m 和 q+1 中的最小值)

在第 5-7 行之间,它将 k 减 1,直到 Pk 成为 Pqa 的后缀,但我不明白 Pqa 代表什么。

另外,如何将第 8 行转换为 Java 代码?二维数组就足够了吗?还是我需要另一种数据结构。

相关问题:string matching with finite automata

最佳答案

在内部 repeat-until 循环中,假设我们有 Pq = 'abdab' 并且字符串是 'abdabcd',我们的字母表是 abcd,我们正在为字母表中的每个符号寻找最佳替代方案,然后将转换存储到新状态。在上面的例子中,通过 'a',我们应该移动到开头,'b' 移动到最开始,c 延长匹配,d 符号应该存储指向我们初始字符串中第三个符号的指针。所以 Pqa 应该读作 Pq 加上字母表中的字符 a。

编辑为什么要min of (q+2 and m+1),因为我们想向前执行一步,我们也想限制字符串的长度,这是显而易见的。为什么我们不能执行 q+3、+4?这是因为我们只添加了一个字符,不可能仅通过一个字符将最佳匹配从 q 扩展到 q+2,+3。

关于java - 有限自动机字符串匹配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36820916/

相关文章:

java - 如何随机排列列表中的特定元素集?

algorithm - 树中的中心节点(距离最小和)

java - 向不同时区的用户列表发送电子邮件?

java - H2:getArray 仅返回一个元素

java - 作为依赖项的 Spring Boot 应用程序

java - Junit 断言错误

Javascript String.replace() ,结果不明确

sql - 列表的内存中完全外部连接

java - 关于 Java String Pool 的一些疑问

string - 为什么string不能转为uint8和int32以外的其他数据类型数组?