【问题标题】:Suffix Array sentinel character lexicographical order后缀数组标记字符字典顺序
【发布时间】:2020-04-28 22:48:09
【问题描述】:

此问题基于 jogojapan 的this 回答。

在该答案中,他指出,对于某些后缀树/后缀数组算法,仅具有唯一标记字符 $ 就足够了,而另一些则需要 $ 来按字典顺序比较最小/最大。

阅读 Abouelhoda 等人的论文 Replacing suffix trees with enhanced suffix arrays,他们选择 $ 必须大于任何其他字符。通过这种选择,我们能够构建高效的算法,可以模拟自下而上和自上而下的后缀树遍历,以及基于这些遍历方案的各种潜在应用。

另一方面,使用诱导排序有效地构造后缀数组或 LCP 数组的算法会做出相反的选择:$ 必须是字典序最小的。 (参见:Nong 等人的 Linear Suffix Array Construction by Almost Pure Induced-Sorting 和 Johannes Fischer 的 Inducing the LCP-Array)。

对于$ 所具有的属性的这些选择是必要的还是只是为了方便而进行的,对我来说并不是很明显。 如果最快的 SA/LCP-Array 构造算法不能与许多使用后缀数组的高效算法一起使用,那将让我感到非常不幸。

  1. 诱导排序构造方法是否严格要求 $ 在字典上最小,或者如果我选择 $ 在字典上最大,它们是否同样有效(或稍作修改)?
  2. 如果 1 的答案是否定的,如果 $ 在字典上是最小的,Abouelhoda 提出的用于模拟自上而下/自下而上的后缀树遍历的算法是否适用,如果不是,可以稍微修改它们以便可以使用?
  3. 如果 1 和 2 都没有,当我选择 $ 在字典上最小时,是否有完全不同的算法可用于执行类似的任务?如果它们存在,它们是什么?

【问题讨论】:

    标签: algorithm suffix-array


    【解决方案1】:

    如果这很重要,那么您可以添加另一个哨兵。

    我很确定您可以通过诱导排序来使用最大值哨兵,但如果您不能,或者您只是不想费心弄清楚如何使用,那么只需添加一个最大值在添加算法所需的最小值标记之前添加标记。

    这只会在后缀数组中添加一个额外的后缀,您可以轻松删除它,其余的将按照您需要的顺序排列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-29
      • 2018-10-18
      • 2012-12-26
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-16
      相关资源
      最近更新 更多