Trie和B+树在对按字典顺序排序的字符串进行索引时有何区别[涉及数十亿个元素]?它们都应该支持范围查询。从性能和实现复杂度角度来看,两者如何比较?
我会说这取决于您所说的"范围(Range)"的含义。
如果您的范围是以"所有以...开头的单词(All words beginning by)"为表达方式,那么我认为使用Trie
是正确的选择。另一方面,Trie
不适用于像"介于XX和ZZ之间的所有单词(All words between XX and ZZ)"这样的请求。
请注意,B+树(B+ Tree)
的分支因子会影响其性能(中间节点的数量)。如果h
是树的高度,则nmax ~~ bh。因此,h ~~ log(nmax) / log(b)。
对于n = 1 000 000 000
和b = 100
,我们有h ~~ 5
。因此,这意味着从根到叶子只需要进行5次指针解引用操作。它比Trie
更适合缓存。
最后,B+树(B+ Tree)
的实现难度确实比Trie
大:它更接近于红黑树(Red-Black Tree)
的复杂度。
根据您实际的任务:
N
个子节点,那么Trie树是最佳选择,因为您只需访问比B+树情况下更少的节点。
/
或.
,并且在对象中使用""
、''
、{}
或[]
时,基本上是使用Trie来预解析指针到键映射,以便任何作用域的取消引用都基于所访问的逻辑作用域的深度。对于语义键空间,这非常有用。虽然也有更擅长这种行为的Trie的变体。 - That Realty Programmer Guy