原论文中关于后缀数组的勘误?

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”的模式,rlcp(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 = bananaW = nana。然后A[pos[N-1]:] = nana。算法设置LW = N 甚至失败,而实际上它是N-1

【讨论】:

以上是关于原论文中关于后缀数组的勘误?的主要内容,如果未能解决你的问题,请参考以下文章

●后缀数组○十三个例题

[补档题解]后缀树节点数

后缀数组入门

POJ 1743-Musical Theme-后缀数组

后缀数组(理解)

关于后缀数组的一点想法