我正在尝试使用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代码?二维数组是否足够,或者我需要另一种数据结构。
答案 0 :(得分:0)
在内部重复 - 直到循环说我们有Pq ='abdab'而字符串是'abdabcd',我们的字母表是abcd,我们正在为字母表中的每个符号寻找最佳替代方案,然后将转换存储到新国家。在上面的情况下,通过'a',我们应该移动到开头,'b'到最开头,c延长匹配,并且d符号应该存储指向我们的初始字符串中的第三个符号的指针。所以Pqa应该被读作Pq加上字母表中的字符a。
编辑为什么我们想要min(q + 2和m + 1),因为我们想向前迈出一步,我们也想限制字符串的长度,这很明显。为什么我们不能执行q + 3,+ 4?这是因为我们只添加一个字符,并且不可能只通过一个字符将q的最佳匹配扩展到q + 2,+ 3。