【问题标题】:What is the advantage of Suffix tree over suffix array?后缀树比后缀数组有什么优势?
【发布时间】:2018-03-05 09:20:27
【问题描述】:

我一直在研究 trie、后缀数组和后缀树。我知道这些数据结构可以用于快速查找和更多应用。 现在我的问题是, 如果后缀数组比后缀数组更节省空间且易于实现,那么后缀树应该优先于后缀数组的场景是什么

能否请您列出个人的优势? 提前致谢。

【问题讨论】:

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


【解决方案1】:

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

link to the article

它提供了后缀数组与一般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))。两者都在线给出字符串的后缀(您可以接收字符串一次一个字符,你不需要整个字符串来运行算法)。

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

【讨论】:

  • 但是为什么我们可以说后缀数组比后缀树的空间复杂度更低,空间局部性更好呢?有什么数学证明还是我们只是基于实际实验?
猜你喜欢
  • 2014-04-28
  • 2012-06-26
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
  • 2016-06-24
  • 2012-04-21
相关资源
最近更新 更多