我们知道平衡树在 O(log n)时间内执行插入,删除和搜索,例如
但是,当键是有限范围内的整数时,可以使用Van Emde Boas树将这些操作删除到 O(log(log n)) -time,即指数优于AVL或RB树。 嗯,这实际上是许多现实世界的应用程序。
我看到很多应用程序。 我想引用的是数据库,创建索引主要涉及在Hash或B * -tree之间进行选择。 如果实现了Van Emde Boas树,它将提供这两个选项之间的中间点,理论上可以改善许多查询优化问题。
为什么Van Emde Boas树从未被广泛用作红黑或B树,因为
有什么考虑因素?
答案 0 :(得分:16)
渐近的复杂性有时会产生误导。在Van Emde Boas tree
的情况下,常量非常大see here。我引用:
However, for small trees the overhead associated with vEB trees
is enormous: on the order of 2^(m/2)
还存在其他情况,其中存在具有更好复杂性的算法,但是对于如此大的输入仅变得更好以至于在实践中它几乎从不使用例如线性时间静态RMQ。
答案 1 :(得分:7)
其中一个原因是复杂性不是根据您存储的集合的大小而是根据值的范围大小来定义的。 另一个区别是,键不能是您具有比较操作但必须是整数的任意类型。 您不应该将vEB视为BST的替代方案,而是作为数组的替代方案。 数组具有O(1)存储并查找由整数键入的对象的成本。 vEB提供O(log log M),其中M是您的值的范围的大小。 现在,您看到vEB并不比常规数组更好地用于查找和存储,但它提供O(1)min,max操作和O(log log M)prev下一个键操作,而数组则没有。 值得一提的是,vEB树的布局具有一些属性,可以创建缓存遗忘树,这是现代CS更有趣的发展。