“van Emde Boas 树是利用整数宇宙递归分簇的前驱数据结构;van Emde Boas 布局是把一棵既有树递归排入内存以改善多层缓存局部性的布局。二者共享递归尺度名称,却分别解决查询…”
形式陈述 ​
布局递归 ​
在缓存无关模型中,对高度
路径 I/O 分析 ​
固定任意块大小
个块,与知道
直觉
vEB 布局在许多高度尺度上同时把完整子树放成连续片段。固定任意实际块大小后,总能在递归中找到一层,使一个常数块片段覆盖根叶路径的若干层;代码无需知道
例子与边界
与层序布局对照 ​
层序数组把同深节点放一起,根附近局部性好,但路径到深层后相邻父子可能相距指数远;不同
名称与失效边界 ​
本页递归的是树高,与vEB 整数树递归键宇宙不是同一结构。证明依赖平衡/完整树及连续布局;普通指针逐节点随机分配不享受界。动态插入会移动布局或产生碎片,需要 packed-memory/cache-oblivious B-tree 等额外技术。路径 I/O 好也不自动保证扫描或更新最优。
推论与应用
布局递归地把树分成 top tree 与若干 bottom trees,是分治法;每层切分不读取具体缓存参数,却保证任意根叶路径在不同块尺度上都只穿过少量连续区段。
搜索树应用 ​
对静态平衡 BST,比较过程走一条根叶路径,vEB 布局因此给
Cache-oblivious 分析通常采用理想缓存和最优替换,并可能要求 tall-cache;现实多级缓存、TLB 和硬件预取会影响常数。结论是对每个层级同时渐近良好,不是“完全不需要知道记录大小或缓存行为”。
路径为何只碰对数个块 ​
把高度
布局本身按固定静态形状计算,不读取运行时的
更新导致旋转时,大段布局位置可能失效。把 vEB layout 用于静态搜索树与把 vEB tree 用于整数前驱是两个独立思想,名字相同不代表接口或复杂度可以互换。
参考资料
- Harald Prokop, Cache-Oblivious Algorithms, MIT thesis, 1999.
- Matteo Frigo et al., Cache-Oblivious Algorithms, FOCS, 1999.
- Michael Bender, Erik Demaine, Martin Farach-Colton, Cache-Oblivious B-Trees, SIAM J. Comput., 2005.