【问题标题】:Building suffix tree ACB when we already have suffix tree AB当我们已经有后缀树 AB 时构建后缀树 ACB
【发布时间】:2014-11-20 04:42:34
【问题描述】:

我最近遇到一个关于后缀树的问题。假设我们已经有一个字符串 S=AB 的后缀树,即 S 是 S 的前缀 A 和后缀 B 的串联。现在我们要构建后缀树 U=ACB。到目前为止,这项任务最有效的算法是什么?

一种天真的方法是重新重建 U,这可以在 O(|U|) 时间内完成。但是它不会利用S的后缀树的任何信息。我​​们能比O(|U|)做得更好吗?可能是 O(|C|),也就是说,和构建一个只有 C 的后缀树一样好?

非常感谢。

【问题讨论】:

    标签: algorithm suffix-tree


    【解决方案1】:

    基于谷歌搜索“动态后缀树”,我认为这可能是一个积极研究的领域。我找到了论文

    Paolo Ferragina and Roberto Grossi, "Fast incremental text editing", Proceedings of the sixth annual ACM-SIAM symposium on Discrete algorithms, pp. 531-540, 1995

    这不是该主题的第一个(或可能是最后一个)词,我只略读了其中的一部分,但它们提供了后缀树的几种变体,可以在插入、删除或更改字符串时获得更好的时间。第 u 个子串插入后:

    • 数据结构 1
      • 查找长度为 p 的字符串的所有 pocc 出现:O(p + pocc + u*log(p) + log n)
      • 插入长度为s的字符串:O(s*log(n + s))
    • 数据结构2
      • 查找长度为 p 的字符串的所有 pocc 出现:O(p*log(p) + pocc + u*(log(p) + log(n/u)))
      • 插入长度为s的字符串:O(s*log(s) + log u)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2016-06-24
      • 2012-04-21
      • 1970-01-01
      • 2014-04-28
      • 2017-05-11
      • 2011-01-30
      相关资源
      最近更新 更多