是否有一种从字符串S [1..m]的后缀树生成字符串S [2..m]的suffix tree的快速方法(O(1)时间复杂度)?
我对Ukkonen熟悉,所以我知道如何从字符串S [1..m]的后缀树制作字符串S [1..m + 1]的快速后缀树,但是我无法将算法应用于逆向情况。
最佳答案
好吧,正如@jogojapan所说,要从S [1..m]树中获取S [2..m]树,我们需要:
@jogojapan进一步建议您保持指向树中最深叶的指针。这样做有两个问题:L不一定是树中最深的叶子,如Wikipedia's example shows;第二,如果您希望能够输出与接收到的相同类型的数据结构,则一旦删除L,您需要找到新的位置为0的叶子,这将需要O(m)的时间。
(您可以做的是在O(m)时间内构造一个指向每个叶子的指针的数组,并在另一个O(m)时间内按位置对它们进行计数排序。然后,您就可以构造所有树{S [t ..n]:1
假设您对摊销时间不感兴趣,让我们证明您提出的要求是不可能的。
关于algorithm - 从字符串S [1..m]的后缀树生成字符串S [2..m]的后缀树,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16407600/