van Emde Boas 树

以下将 vEB 树作为 van Emde Boas 树的简称。

vEB 树存在的意义是突破 O(lgn) 操作性能的极限。在基于比较的动态集合数据结构中,是存在这样的极限的。如同基于比较的排序方法也有 O(nlgn) 的性能极限一样。

vEB 树只在有限大小的全域 u 中有效,采用位图思想。

提前说一个结论,完全体的 vEB 树所有操作都可以在 O(lglgu) 时间内完成,其中 u 是树的全域。

基本方法

这一节讲了几种基本方法,是 vEB 树的思想基础,大概发明 vEB 树的过程就是这些思想不断完善的过程。

直接寻址就是简单的位图方法。

叠加的二叉树结构是在位图上叠加一个“逻辑或”的二叉树,即树中结点的值等于两个孩子结点值的“逻辑或”。

叠加的一颗高度恒定的树在二叉树的基础改进,从底部到顶部不再是二叉树的每次结点规模缩小一半,而是每次结点规模缩小全域 u 的平方根,这样树的高度总是 2.

这三种方法是步步改进的,每次改进总会在某些方面性能有所提升。

递归结构

这一节讲的是 vEB 树的原型结构,大概是 vEB 树发展过程中的一个重要结点(至少这时候有 vEB 这个名称了)

原型的关键点是,在位图上叠加树的思想上再次改进,上层结点规模缩小为下层结点规模的平方根。改进自上一节的高度恒定的二叉树。

关于缩小规模的改进依据,是由对递归结构的性能分析方法得出的。

原型 vEB 树的结构

在具体的实现中多了一种 summary 结构,组织形式也有所变化,简单的说就是十分复杂(难以简短的用文字描述,具体的看书吧)。

原型 vEB 树的操作

这一小节分析结构上的各种操作,并分析性能

MEMBER 操作,O(lglgu)
MINIMUM 操作,O(lgu)
SUCCESSOR 操作,O(lgu lglgu),渐进慢于 MINIMUM
INSERT 操作,O(lgu)
DELETE 操作

大部分操作都达不到 O(lglgu) 的性能,其原因是大部分操作中都进行了多次递归调用。按照递归性能的分析公式,要达到 O(lglgu) 的性能,操作中只能有一次递归。

这是标准的用公式和方法论,来指导数据结构和算法的设计,而且已经明确算法能够达到的性能。

van Emde Boas 树及其操作

这一节同样是按照结构和操作的顺序组织的。

先说改进方法,上一节中已经明确了指导思想,要减少操作中的递归为一次。但估计如何实现这一点也是前人做了许多探索,书中给出的有效改进是,在原型的基础上给每个结构增加 min 和 max 两个属性。

vEB 树结构

min 和 max 两个属性是减少递归次数的关键,书中分析了这两个属性的多种作用,能够降低多个操作的复杂性。可以说 vEB 树的性能关键就在于对 min 和 max 的巧妙利用。

其中 min 不存储在树中的任何一个簇中。

vEB 树操作

书中给出了 MINIMUM、MAXIMUM、MEMBER、SUCCESSOR、PREDECESSOR、INSERT、DELETE 等所有操作的伪代码和分析。

所有的操作最坏运行时间均为 O(lglgu)。

看到结尾我有点感慨,相比于之前的多种数据结构,vEB 树是一种在方法论和公式指导下设计出来的数据结构,让我有一种“人定胜天”的感觉。这就好比以前化学元素的发现靠的是机缘巧合和灵光一现,而现在,寻找一种新的化学元素,我们只需要按照科学的方法去尝试,就总能找到。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 11,351评论 0 13
  • 一. 算法之变,结构为宗 计算机在很多情况下被应用于检索数据,比如航空和铁路运输业的航班信息和列车时刻表的查询,都...
    Leesper阅读 11,930评论 13 42
  • 原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 1...
    达微阅读 19,820评论 0 28
  • 就是把自己的思想强加于他人 并一直认为自己是正确的 你不是我 你不知道我走过的路 不知道我心中的苦与乐 不要凭借着...
    面食者阅读 2,732评论 0 0
  • 众小仙女们有没有过这样的经历?别人口中效果好到不行的护肤品,对你却是大鸡肋?买了很贵的面霜精华面膜,先抛开护肤效果...
    潮流一起说阅读 1,943评论 0 0