11

我正在查看原始论文的图 3 中给出的伪代码,其中介绍了后缀数组"SUFFIX ARRAYS: A NEW METHOD FOR ON-LINE STRING SEARCHES"

我无法弄清楚第 4 行和第 5 行的逻辑(从 0 开始索引)。行内容如下:

否则,如果r < Pw r ≤ a Pos[N-1]+r
L W ← N

W是我们正在寻找的长度为 'P' 的模式并且rlcp(A[pos[N-1]:], W). 问题是在几乎所有情况下,这lcp将小于“W”的长度。这个条件是为了处理这种情况(我认为)模式在字典上大于数组中字典上最大的后缀,但它根本不测试这一点。另一方面,测试是否W小于字典最小后缀的第 2 行和第 3 行似乎很有意义

如果l = Pw l ≤ a Pos[0]+l
L W ← 0

我相信原来的行应该是这样的:

else if r < P and w r > a Pos[N-1]+r then
L W ← N

唯一W可以大于的方法A[pos[N-1]:]是它的lcp长度小于模式的长度(否则,所有W匹配项W都不能大于,只能小于或等于我们共享的对象lcp)并且如果in之后的字符lcp大于Win A[pos[N-1]]。这似乎有意义吗?这是原始论文中的错误吗?如果没有,有人可以向我解释我是如何误解原始代码的吗?

4

1 回答 1

3

我认为你理解这篇论文是正确的,实际上它有一个错误。

考虑以下示例:让A = banana, W = nana。然后A[pos[N-1]:] = nana。算法设置LW = N甚至失败,而实际上它是N-1.

于 2014-10-17T19:24:14.390 回答