原论文中关于后缀数组的勘误?
Posted
技术标签:
【中文标题】原论文中关于后缀数组的勘误?【英文标题】:Errata in the original paper on suffix arrays? 【发布时间】:2014-12-04 15:41:02 【问题描述】:我正在查看介绍后缀数组 "SUFFIX ARRAYS: A NEW METHOD FOR ON-LINE STRING SEARCHES" 的原始论文的图 3 中给出的伪代码。
我无法弄清楚第 4 行和第 5 行的逻辑(从 0 开始索引)。行内容如下:
否则如果 r 或 wr ≤ aPos[N-1]+r那么 LW ← N
W
是我们正在寻找的长度为“P”的模式,r
是lcp(A[pos[N-1]:], W)
。问题是在几乎所有情况下,这个lcp
都小于'W' 的长度。这个条件是为了处理这种情况(我认为)模式在字典上大于数组中字典上最大的后缀,但它根本不测试这一点。另一方面,测试W
是否小于词典最小后缀的第 2 行和第 3 行似乎很有意义
如果 l = P 或 wl ≤ a Pos[0]+l那么 LW ← 0
我相信原始行应该是这样的:
else if r and wr > aPos[N-1]+r那么 LW ← N
W
可以大于 A[pos[N-1]:]
的唯一方法是,如果它的 lcp
比模式的长度短(否则,所有 W
匹配,所以 W
不能更大,仅小于或等于我们共享 lcp
的对象)并且如果 lcp
之后的字符在 W
中大于在 A[pos[N-1]]
中的字符。这似乎有意义吗?这是原始论文中的错误吗?如果没有,有人可以向我解释一下我是如何误解原始代码的吗?
【问题讨论】:
【参考方案1】:我认为你理解这篇论文是正确的,实际上它有一个错误。
考虑以下示例:让A = banana
,W = nana
。然后A[pos[N-1]:] = nana
。算法设置LW = N
甚至失败,而实际上它是N-1
。
【讨论】:
以上是关于原论文中关于后缀数组的勘误?的主要内容,如果未能解决你的问题,请参考以下文章