我正在查看原始论文的图 3 中给出的伪代码,其中介绍了后缀数组"SUFFIX ARRAYS: A NEW METHOD FOR ON-LINE STRING SEARCHES"。
我无法弄清楚第 4 行和第 5 行的逻辑(从 0 开始索引)。行内容如下:
否则,如果r < P或w r ≤ a Pos[N-1]+r 则
L W ← N
W
是我们正在寻找的长度为 'P' 的模式并且r
是lcp(A[pos[N-1]:], W)
. 问题是在几乎所有情况下,这lcp
将小于“W”的长度。这个条件是为了处理这种情况(我认为)模式在字典上大于数组中字典上最大的后缀,但它根本不测试这一点。另一方面,测试是否W
小于字典最小后缀的第 2 行和第 3 行似乎很有意义
如果l = P或w 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
大于W
in A[pos[N-1]]
。这似乎有意义吗?这是原始论文中的错误吗?如果没有,有人可以向我解释我是如何误解原始代码的吗?