“先构造一棵平衡二叉搜索树,再按van Emde Boas 布局存入连续数组。对高度 (h) 的树,在中间高度切开:递归摆放 top tree,然后按从左到右的边界次序递归摆放各棵 botto…”
布局递归 ​
对高度
路径 I/O 分析 ​
固定任意块大小
个块,与知道
与层序布局对照 ​
层序数组把同深节点放一起,根附近局部性好,但路径到深层后相邻父子可能相距指数远;不同
名称与失效边界 ​
本页递归的是树高,与vEB 整数树递归键宇宙不是同一结构。证明依赖平衡/完整树及连续布局;普通指针逐节点随机分配不享受界。动态插入会移动布局或产生碎片,需要 packed-memory/cache-oblivious B-tree 等额外技术。路径 I/O 好也不自动保证扫描或更新最优。
搜索树应用 ​
对静态平衡 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.