【发布时间】:2014-01-19 16:51:52
【问题描述】:
我们知道平衡树在 O(log n) 时间内执行插入、删除和搜索,示例包括
- 红黑
- AVL
- 展开
- B 树(及其变体)。
但是,当键是某个有限范围内的整数时,可以使用 Van Emde Boas 树将这些操作降低到 O(log(log n)) 时间,即指数级优于 AVL 或 RB 树。 嗯,这实际上是许多现实世界应用程序的情况。
我看到很多这样的应用程序。 我想引用的一个是数据库,创建索引基本上涉及在哈希或 B*-树之间进行选择。 如果实现了 Van Emde Boas 树,它将提供这两个选项之间的折中,理论上可以改善许多查询优化问题。
为什么 Van Emde Boas 树没有像 Red-Black 或 B-tree 那样被广泛使用
- 这不是什么新鲜事(它是 1975 年发明的)
- 易于实施
- 比其他树快得多
关于它的考虑是什么?
【问题讨论】:
-
可能是因为大量的数据库键不是有限范围内的整数? :-) 如果你知道有限的范围,你通常可以制作一个非常有效的哈希函数,可能是一个完美的哈希,甚至可能是一个完美的最小哈希,从而使树结构变得无关紧要。
-
@paxdiablo SQL 数据库中的主键几乎总是(最初是连续的)一些大但有限范围的整数(例如 64 位)。确实可以为这些键设计非常有效的哈希表,但是找到一个完美(更不用说最小完美)哈希需要知道 full 组键,需要找到一个新的完美哈希函数并重新-散列整个表每次添加或删除一个键。这是一个更狭窄的用例,因为它只适用于 static 键集。
标签: data-structures van-emde-boas-trees