我一直在研究trie,后缀数组和后缀树。我知道这些数据结构可用于快速查找和更多应用程序。 现在我的问题是, 如果后缀数组的空间效率高且易于实现,那么后缀树应优先于后缀数组
请您列出个人优势。 提前谢谢。
答案 0 :(得分:1)
以下是来自后缀数组的摘要:一种用于在线字符串搜索的新方法,由Udi Manber和Gene Myers编写。
它提供了后缀数组的优点列表,与一般情况下的后缀树结构相比较
一种新的概念上简单的数据结构,称为后缀数组, 本文介绍了在线字符串搜索。建设 并且查询后缀数组被简化为排序和搜索范例 采用新颖的算法。 后缀数组的主要优点 后缀树是在实践中,它们使用三到五次 更小的空间。从复杂性的角度来看,后缀数组允许在线 字符串搜索类型,''是否是A的子字符串?''要回答 在时间O(P + log N)中,其中P是W的长度,N是长度 A,具有竞争力(在某些情况下稍好一些) 比)后缀树。唯一的缺点是在那些情况下 底层字母表是有限的,小的,后缀树可以 在最坏的情况下,在O(N)时间内构造,相对于O(N log N)时间 后缀数组。但是,我们给出了一个增强算法, 无论字母大小如何,在O(N)中构造后缀数组 预期时间,尽管空间效率较低。我们相信 后缀数组在实践中将证明比后缀树更好 对于许多应用程序
为了简明扼要,让我们说后缀数组的空间复杂度和空间局部性明显低于后缀树;权衡是后缀树在时间复杂度方面运行得更快(O(n)与O(n.log(n))。两者都在线提供字符串的后缀(你可以收到字符串)一次只有一个字符,你不需要整个字符串来运行算法。)
后缀数组的另一个优点是适应性,例如子字符串搜索;该结构将允许更容易地使用数据。它也更容易实现。