特里与红黑树:在空间和时间上哪个更好?

时间:2013-01-18 10:56:46

标签: data-structures tree complexity-theory trie red-black-tree

尝试和红黑树非常有效地存储字符串。

哪个时间复杂度更高?空间复杂性怎么样?

1 个答案:

答案 0 :(得分:13)

这取决于许多因素,例如您存储的字符串以及如何表示特里结构。

在红黑树中,您需要对每个操作(插入,删除,查找等)进行O(log n)字符串比较。如果比较两个没有公共前缀的字符串,或者比较字符串很小的两个字符串,则比较的成本很小。比较的最坏情况是当一个字符串是另一个字符串的前缀时,在这种情况下必须读取所有字符。因此,如果你想在一个红黑色的字符串树中查找长度为L的字符串,在最坏的情况下,你可以通过进行O(log n)比较来做O(L log n)工作,每个比较看一下输入字符串中的所有字符。但是,在最好的情况下,这只需要O(log n)时间,如果比较总是立即失败,就会发生这种情况。

就空间使用而言,红/黑树每个节点需要两个指针,每个字符串需要一个节点。 (红色/黑色位通常可以打包到指针的低位)。因此总空间为2n +(所有弦的总长度)。

在一个特里,插入,删除和查找在最坏的情况下(如果必须考虑输入的所有字符)采用O(L),在最好的情况下采用O(1)(如果你从trie掉下来)早)。这比红黑树快60倍(log n),这可能对大型集合很重要。然而,trie的局部性更差,因为涉及更多的指针追逐并且没有连续的字符阵列可供扫描。

就内存使用而言,具有大小为k的字母表的trie通常需要总共kn指针,其中n是节点的数量。如果字母表大小很大,这可能比红/黑树差得多。但是,通过使用Patricia树表示压缩trie,使用更高效的数据结构来存储子指针,或者从trie构建DAWG,可以减少空间开销。

希望这有帮助!