Algorithm 关于后缀数组的原始论文中的勘误表?
我正在查看介绍后缀数组的原始文章的图3中给出的伪代码 我无法理解第4行和第5行(从0开始索引)的逻辑。行内容如下: 如果rAlgorithm 关于后缀数组的原始论文中的勘误表?,algorithm,pseudocode,suffix-array,Algorithm,Pseudocode,Suffix Array,我正在查看介绍后缀数组的原始文章的图3中给出的伪代码 我无法理解第4行和第5行(从0开始索引)的逻辑。行内容如下: 如果r
或wr≤ aPos[N-1]+r然后
LW← N
W
是我们正在寻找的长度“p”的模式,r
是lcp(A[pos[N-1]:],W)
。问题是,在几乎所有情况下,此lcp
的长度都小于“W”。这个条件是为了处理(我认为)模式在字典上大于数组中最大后缀的情况,但它根本不测试这一点。另一方面,第2行和第3行测试W
是否小于词典中最小的后缀,这两行似乎很有意义
如果l=p或wl≤ aPos[0]+l然后LW← 0 我认为原文应该是这样的: 如果r
和
wr>aPos[N-1]+r则LW← N
W
可以大于A[pos[N-1]:]
的唯一方法是它的lcp
比模式的长度短(否则,所有W
匹配,因此W
不能大于,只能小于或等于我们共享lcp
的对象)如果lcp
后面的字符在W
中大于A[pos[N-1]]
。这似乎有道理吗?这是原稿中的错误吗?如果没有,请有人向我解释一下我是如何误解原始代码的?我想你理解的文章是正确的,事实上它有一个错误
考虑以下示例:让A=banana
,W=nana
。然后A[pos[N-1]:]=nana
。算法设置LW=N
甚至失败,而实际上它是N-1