后缀阵列与后缀树

时间:2012-06-25 17:14:36

标签: algorithm time-complexity suffix-tree space-complexity suffix-array

我只想知道,当后缀树优于增强后缀数组时。

阅读Replacing suffix trees with enhanced suffix arrays后,我看不再有使用后缀树的理由了。有些方法可能会变得复杂,但你可以使用后缀数组完成所有操作,使用后缀树可以做什么,并且需要相同的时间复杂度但内存较少。

一个survey甚至表明,后缀数组更快,因为它们缓存更友好,并且不会产生多少缓存未命中,然后产生后缀树(因此缓存可以更好地预测数组使用情况,然后在递归树结构上。)

那么,是否有人知道在后缀数组上选择后缀树的原因?

修改 好的,如果你知道更多,告诉我,到目前为止:

  • 后缀不允许在线构建
  • 某些模式匹配算法在Suffixtrees上运行得更快
  • (已添加)由于在线构造,您可以将其保存在hd a并放大现有的后缀树。如果你使用SSD,它也应该安静快速。

2 个答案:

答案 0 :(得分:1)

SO本身有一些interesting thoughts。您还可以在线查找more technical material。有another paper可以帮助您解决问题,声称是实现这些结构的另一种有效方式。

我不是这个问题的专家,但在我看来,后缀数组可能会稍慢,即使它们更节省空间。然而,我缺乏实践经验来更详细地介绍它们。

答案 1 :(得分:-3)

另一个显示后缀树优越的例子:

如果已经有后缀树,则可以轻松构建后缀数组。

但是从后缀数组构造后缀树要复杂得多。