特里与B +树

时间:2010-04-22 06:28:16

标签: algorithm

Trie和B +树如何比较按字典顺序排序的字符串[按数十亿的顺序]? 它也应该支持范围查询。

来自perf。以及实现复杂性的观点。

3 个答案:

答案 0 :(得分:14)

我想说这取决于你的意思范围

如果你的范围表示为所有以开头的单词,那么Trie是我说的正确选择。另一方面,Trie不适用于 XX和ZZ之间的所有单词之类的请求。

请注意B+ Tree的分支因子会影响其性能(中间节点的数量)。如果h是树的高度,那么n max ~~ b h 。因此,h~~ log(n max )/ log(b)。

使用n = 1 000 000 000b = 100,我们有h ~~ 5。因此,它意味着只有5个指针解除引用从根到叶。它比Trie更容易缓存。

最后,B+ Tree无疑比Trie更难实现:它更多地处于Red-Black Tree级别的复杂性。

答案 1 :(得分:3)

取决于您的实际任务:

  • 如果您想获得整个子树 B + Tree 是您的最佳选择,因为它节省空间。
  • 但是如果你想从一个子树中获得第一个N孩子,那么 Trie 是最好的选择,因为你只是访问的节点少于B +树场景。
  • Trie 处理好的最受欢迎的任务是字词前缀完成

答案 2 :(得分:0)

维基百科有一些算法复杂性事实: B+ tree(部分特征),Trie(不幸的是遍布整篇文章)。希望有所帮助。