van Emde Boas 树是一种支持整数键的优先队列结构,在键取值范围为 0 到 u-1 的全域上,插入、删除、查找前驱后继等操作均可在 O(log log u) 时间内完成。它通过递归地把全域拆分为若干个大小为根号 u 的簇来实现极快的操作。

| 类型 | 整数优先队列 |
| 提出者 | Peter van Emde Boas |
| 提出时间 | 1975 年 |
| 时间复杂度 | O(log log u) |
| 空间复杂度 | O(u) |
van Emde Boas 树(简称 vEB 树)是一种针对有界整数全域设计的树形数据结构,当所有键都取自区间 0 到 u-1 时,它能在 O(log log u) 的时间内完成插入、删除、成员查询以及前驱和后继查询。该结构由荷兰计算机科学家 Peter van Emde Boas 于 1975 年提出。
普通的平衡二叉搜索树在 n 个元素上完成查找需要 O(log n) 时间,而 vEB 树利用键值域有限这一额外信息,把时间下降到与全域大小的双重对数相关。它的核心思想是分治:把整个全域 u 递归地划分为根号 u 个子簇,每个子簇同样是一棵 vEB 树,并额外维护一棵用于索引哪些簇非空的摘要结构。
vEB 树把一个键 x 拆分为高位和低位两部分:高位 high(x) 决定 x 属于哪个簇,低位 low(x) 决定 x 在簇内的位置。结构中还专门记录了整棵树的最小值 min 与最大值 max,其中 min 不再存入子簇,这一设计是把递归开销降到 O(log log u) 的关键。
vEB 树适用于键为有界整数且需要频繁做前驱后继查询的场合,例如网络路由中的 IP 地址查找、离散事件模拟中的定时器管理,以及作为教学中展示分治优化的经典范例。其主要缺点是空间开销较大,朴素实现需要 O(u) 空间,通常需配合哈希表压缩才实用。
问:vEB 树为什么比平衡树快?答:因为它利用了键值域有界这一前提,通过递归划分全域把复杂度从 O(log n) 降到 O(log log u),这是普通比较型结构无法达到的。
问:它的空间开销大吗?答:朴素实现空间为 O(u),对稀疏数据浪费严重;实践中常用哈希表替代直接的簇数组以降低空间。

| 类型 | 整数优先队列 |
| 提出者 | Peter van Emde Boas |
| 提出时间 | 1975 年 |
| 时间复杂度 | O(log log u) |
| 空间复杂度 | O(u) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧