【发布时间】:2018-03-05 09:20:27
【问题描述】:
我一直在研究 trie、后缀数组和后缀树。我知道这些数据结构可以用于快速查找和更多应用。 现在我的问题是, 如果后缀数组比后缀数组更节省空间且易于实现,那么后缀树应该优先于后缀数组的场景是什么
能否请您列出个人的优势? 提前致谢。
【问题讨论】:
标签: string data-structures trie suffix-tree suffix-array
我一直在研究 trie、后缀数组和后缀树。我知道这些数据结构可以用于快速查找和更多应用。 现在我的问题是, 如果后缀数组比后缀数组更节省空间且易于实现,那么后缀树应该优先于后缀数组的场景是什么
能否请您列出个人的优势? 提前致谢。
【问题讨论】:
标签: string data-structures trie suffix-tree suffix-array
这是来自后缀数组:在线字符串搜索的新方法的摘要,由 Udi Manber 和 Gene Myers 编写。
它提供了后缀数组与一般ca的后缀树结构相比的优势列表
一种新的概念上简单的数据结构,称为后缀数组, 本文介绍了在线字符串搜索。建设 并且查询后缀数组被简化为排序和搜索范式 采用新颖的算法。 后缀数组的主要优点 超过后缀树是,在实践中,他们使用了三到五次 更小的空间。从复杂性的角度来看,后缀数组允许在线 类型的字符串搜索,“‘W 是 A 的子字符串吗?’”将被回答 在时间 O(P + log N) 中,其中 P 是 W 的长度,N 是长度 的 A,具有竞争力(在某些情况下略胜一筹) 比)后缀树。唯一的缺点是,在那些情况下 底层字母是有限且小的,后缀树可以是 在最坏的情况下在 O(N) 时间内构建,而对于 O(N log N) 时间 后缀数组。 但是,我们给出了一个增强算法, 无论字母大小如何,在 O(N) 中构造后缀数组 预期的时间,尽管空间效率较低。我们相信 后缀数组在实践中将被证明比后缀树更好 适用于多种应用
为了简单起见,假设 后缀数组的空间复杂度明显低于后缀树,空间局部性更好;权衡是后缀树在时间复杂度方面运行得更快(O(n)与O(n.log(n))。两者都在线给出字符串的后缀(您可以接收字符串一次一个字符,你不需要整个字符串来运行算法)。
后缀数组的另一个优点是适应性,例如用于子字符串搜索;该结构将允许更轻松地使用数据。它也更容易实现。
【讨论】: