当我们已经有后缀树AB时,建立后缀树ACB

时间:2014-11-20 04:42:35

标签: algorithm suffix-tree

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

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

非常感谢。

1 个答案:

答案 0 :(得分:0)

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

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
    • 查找length-p字符串的所有pocc出现次数:O(p + pocc + u * log(p)+ log n)
    • 要插入长度为s的字符串:O(s * log(n + s))
  • 数据结构2
    • 查找length-p字符串的所有pocc出现次数:O(p * log(p)+ pocc + u *(log(p)+ log(n / u)))
    • 要插入长度为s的字符串:O(s * log(s)+ log u)