是否有从字符串 S[1..m] 的后缀树生成字符串 S[2..m] 的后缀树的快速(O(1) 时间复杂度)方法?
我熟悉 Ukkonen,所以我知道如何从字符串 S[1..m] 的后缀树制作字符串 S[1..m+1] 的快速后缀树,但我无法将算法应用于相反的情况.
是否有从字符串 S[1..m] 的后缀树生成字符串 S[2..m] 的后缀树的快速(O(1) 时间复杂度)方法?
我熟悉 Ukkonen,所以我知道如何从字符串 S[1..m] 的后缀树制作字符串 S[1..m+1] 的快速后缀树,但我无法将算法应用于相反的情况.
好吧,正如@jogojapan 所说,要从 S[1..m] 树中获取 S[2..m] 树,我们需要:
@jogojapan 进一步建议您保留指向树中最深叶子的指针。这样做有两个问题:L不一定是树中最深的叶子,如Wikipedia 的示例所示,其次,如果您希望能够输出与收到的相同类型的数据结构,一旦删除L,您需要找到新的位置 0 叶子,无论如何这将花费 O(m) 时间。
(你可以做的是在 O(m) 时间内构造一个指向每个叶子的指针数组,并在另一个 O(m) 时间内按位置对它们进行计数排序。然后你就可以构造所有的树{ S[t ..n] : 1 <= t <= m }在每个恒定摊销时间)
假设您对摊销时间不感兴趣,让我们证明您的要求是不可能的。