繁体   English   中英

有限自动机字符串匹配器

[英]Finite Automata String Matcher

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

在此输入图像描述

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

在此输入图像描述

在上面的代码中,我无法理解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代码? 二维数组是否足够,或者我需要另一个数据结构。

一个相关的问题: 与有限自动机匹配的字符串

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

编辑我们想要min(q + 2和m + 1)的原因,因为我们想向前迈出一步,我们也想限制字符串的长度,这很明显。 为什么我们不能执行q + 3,+ 4? 这是因为我们只添加了一个字符,并且不可能只通过一个字符将q的最佳匹配扩展到q + 2,+ 3。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM