“实现的分界来自计算模型。二叉搜索树只用比较,在平衡时给 $O(\log n)$;van Emde Boas 树利用有界整数宇宙的递归分簇获得 $O(\log\log U)$,但朴素空间依赖…”
形式陈述 ​
宇宙递归 ​
令键宇宙为
结构保存 min/max,为每个非空高位建立大小
操作与递归式 ​
前驱查询先在
每层只递归进一个规模
直觉
vEB tree 把一个
例子与边界
van Emde Boas 树是利用整数宇宙递归分簇的前驱数据结构;van Emde Boas 布局是把一棵既有树递归排入内存以改善多层缓存局部性的布局。二者共享递归尺度名称,却分别解决查询语义和存储排列问题。
十六元宇宙例子 ​
空间与模型边界 ​
朴素递归为所有 cluster 预留结构,空间满足
推论与应用
时间界来自递推关系 T(U)=T(√U)+O(1):每次操作只递归进入一个大小约 √U 的簇,并用 summary 处理非空簇前驱。连续开方给 O(log log U)。
Base case 与 min 特判 ​
删除最大值同样需在最后非空 cluster 消失时从 summary 与 cluster max 重算。min/max 特判减少递归,却是实现最容易遗漏的正确性分支。
空簇查询的返回路径 ​
求 successor(x) 时,先看 low(x) 的元素;若有,就在该簇递归。若没有,转而在 summary 中求下一个非空簇编号 index(j, cluster[j].min)。summary 也无后继时返回不存在。这个分支解释了为什么每簇必须显式维护 min,也解释了空簇不能先递归再访问其字段。
当 min/max 回答,递归停止。若实际键宇宙不是二次幂,可向上取整并拒绝填充区间中的假键;若只说“压缩坐标”,动态插入新键会改变秩,已不再是原本的在线前驱问题。
参考资料
- Peter van Emde Boas, Robert Kaas, Erik Zijlstra, Design and Implementation of an Efficient Priority Queue, Mathematical Systems Theory, 1977.
- Cormen et al., Introduction to Algorithms, 4th ed., MIT Press, 2022, van Emde Boas Trees.