【发布时间】:2013-04-30 17:32:48
【问题描述】:
是否有一种快速(O(1) 时间复杂度)的方法可以从字符串 S[1..m] 的后缀树生成字符串 S[2..m] 的suffix tree?
我熟悉 Ukkonen,所以我知道如何从字符串 S[1..m] 的后缀树制作字符串 S[1..m+1] 的快速后缀树,但我无法应用该算法对于相反的情况。
【问题讨论】:
-
我猜不是。基本上我们需要做的就是删除S[1..m]的后缀树中的字符串[1..m]。是什么让您认为存在恒定时间复杂度算法?
-
如果我没记错的话,难点在于识别
S[1..m]对应的是哪个叶子节点。一旦你有了叶子,我认为(但没有尝试实际写下证明)删除该叶子和(如有必要)指向它的内部节点应该是 O(1)。找到叶子是 O(m),但您可以使用 O(1) 额外空间来维护指向树中最深叶子的指针,这会将叶子查找时间减少到 O(1)。删除叶子后,您必须更新该指针,但如果树中有后缀链接,则可以在 O(1) 摊销时间内完成。 -
Ukkonen 的算法通过从左到右构建后缀树来实现 O(n) 复杂度。在此之前的算法是从右到左构建它,并且都未能达到 O(n)。所以我猜不是。
标签: algorithm data-structures complexity-theory suffix-tree