一般来说,后缀树的空间效率低于后缀数组。更具体地说,近似上限O(n)空间效率与后缀数组的近似值相比隐藏了20倍。为什么会发生这种情况?
答案 0 :(得分:3)
通常,后缀树由每个节点在字母表中的每个字符存储一个指针来表示,该指针指示子节点在指示字符的位置。每个子指针也用原始字符串中的一对索引进行注释,指示原始字符串中的哪些字符范围用于标记给定边缘。这意味着对于字母表中的每个字符(加上$字符),每个后缀树节点将需要存储一个指针和两个机器字。这意味着,如果您在计算基因组学应用程序中执行某些操作,例如,字母为{A,C,T,G},则您需要十五个机器字后缀树中的节点。后缀树中的节点数最多为2n - 1,其中n是字符串的后缀数,因此您只需要大约30n个机器字。
将此与后缀数组进行对比,其中对于字符串中的每个字符,您只需要一个机器字(后缀的索引),因此存储后缀数组总共需要n个机器字。这比原始后缀树节省了大量资金。通常,后缀数组与LCP数组配对(可以更深入地了解数组的结构),这需要另外n - 1个机器字,因此您需要总共需要大约2n - 1个机器字。 。与后缀树相比,这是一个巨大的节省,这是后缀数组在实践中如此使用的原因之一。