后缀树比后缀数组有什么优势?

时间:2017-09-24 07:32:52

标签: string data-structures trie suffix-tree suffix-array

我一直在研究trie,后缀数组和后缀树。我知道这些数据结构可用于快速查找和更多应用程序。 现在我的问题是, 如果后缀数组的空间效率高且易于实现,那么后缀树应优先于后缀数组

请您列出个人优势。 提前谢谢。

1 个答案:

答案 0 :(得分:1)

以下是来自后缀数组的摘要:一种用于在线字符串搜索的新方法,由Udi Manber和Gene Myers编写。

link to the article

它提供了后缀数组的优点列表,与一般情况下的后缀树结构相比较

  

一种新的概念上简单的数据结构,称为后缀数组,   本文介绍了在线字符串搜索。建设   并且查询后缀数组被简化为排序和搜索范例   采用新颖的算法。 后缀数组的主要优点   后缀树是在实践中,它们使用三到五次   更小的空间。从复杂性的角度来看,后缀数组允许在线   字符串搜索类型,''是否是A的子字符串?''要回答   在时间O(P + log N)中,其中P是W的长度,N是长度   A,具有竞争力(在某些情况下稍好一些)   比)后缀树。唯一的缺点是在那些情况下   底层字母表是有限的,小的,后缀树可以   在最坏的情况下,在O(N)时间内构造,相对于O(N log N)时间   后缀数组。但是,我们给出了一个增强算法,   无论字母大小如何,在O(N)中构造后缀数组   预期时间,尽管空间效率较低。我们相信   后缀数组在实践中将证明比后缀树更好   对于许多应用程序

为了简明扼要,让我们说后缀数组的空间复杂度和空间局部性明显低于后缀树;权衡是后缀树在时间复杂度方面运行得更快(O(n)与O(n.log(n))。两者都在线提供字符串的后缀(你可以收到字符串)一次只有一个字符,你不需要整个字符串来运行算法。)

后缀数组的另一个优点是适应性,例如子字符串搜索;该结构将允许更容易地使用数据。它也更容易实现。