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

时间:2014-10-09 16:04:05

标签: algorithm pseudocode suffix-array

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

我无法弄清第4行和第5行的逻辑(从0开始索引)。这些专栏写着:

  

否则,如果 r&lt; P w r ≤a Pos [N-1] + r 然后< / EM>
  L W ←N

W是长度的模式&#39; P&#39;我们正在寻找,rlcp(A[pos[N-1]:], W)。问题是,在几乎所有情况下,lcp的长度都会小于W的长度。这个条件是为了处理这种情况(我认为)这个模式在字典上大于数组中按字典顺序排列的最大后缀,但它根本没有对此进行测试。第2行和第2行3,另一方面,哪个测试W是否小于词典上最小的后缀似乎是完全正确的

  

如果 l = P w l ≤a Pos [0] + l 然后
  L W ←0

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

  

否则,如果 r&lt; P w r &gt; a Pos [N-1] + r 然后
  L W ←N

W可能大于A[pos[N-1]:]的唯一方法是,如果它的lcp短于模式的长度(否则,所有W匹配并且所以W不能更大,只能小于或等于我们与lcp共享的内容}如果lcp中的字符在W中更大而不是A[pos[N-1]]。这看起来有意义吗?这是原始论文中的错误吗?如果没有,有人可以向我解释我是如何误解原始代码的吗?

1 个答案:

答案 0 :(得分:3)

我认为你理解论文是正确的,事实上它有错误。

请考虑以下示例:let A = bananaW = nana。然后是A[pos[N-1]:] = nana。算法集LW = N甚至失败,而事实上它是N-1