“若下一条查询的真实坐标必须用前次答案解码,尚未解码的记录不能提前排序。这里要求的是实际更新和实际查询全部已知,而非文件里仅有一串加密参数。范围树适合另一类接口:先建立静态点集目录,再接受未来…”
形式陈述
二维结构
下面取静态记录数
为回答正交范围查询,主结构在每个节点存一条点记录,采用按
查询矩形
直觉
主树把一个坐标区间拆成少量互不重叠的规范点集,每个点集提前保存另一坐标的有序目录。查询因而不再逐点做二维判断,而是在
例子与边界
仓储检索例子
点表示商品的价格与库存量。查询“价格落在区间且库存高于阈值”的商品时,价格范围先选出少量完整子树,再在各自库存目录中定位边界;无需扫描目录中的其他价格点。
维数与动态边界
递归到固定
推论与应用
范围树在主树节点保存整个下一坐标目录,目录大小随子树增长。它不满足常数大小摘要的搜索树增强定理所需的常数时间合并条件,不能据该定理推出一次旋转或更新只需常数工作;这里应直接计入各目录的合并、存储与修改成本。
构建与 canonical 分解
主树若按中位数构造,左右子树关联数组已排好,可与本节点点记录一起在线性时间归并成父数组。每层全部数组总长度至多
一维区间在平衡树中由分裂节点两侧的 maximal fully-contained subtrees 表示,数量
一次矩形查询的节点轨迹
设主树根键为 50,查询
对每个完整子树
静态构建的状态顺序为:先按
动态范围树要在
若矩形边界采用闭区间,左端用 lower_bound(y1),右端用 upper_bound(y2);若采用半开区间 lower_bound。重复坐标恰落在边界时,这个选择决定是否报告,必须与查询接口保持一致。
高维递归把每个 canonical subset 再建一棵低一维范围树。每升一维多出一层
参考资料
- Jon Louis Bentley, “Multidimensional Divide-and-Conquer,” Communications of the ACM 23(4), 1980, pp. 214–229.
- Mark de Berg et al., Computational Geometry: Algorithms and Applications, 3rd ed., Springer, 2008, range trees chapter.