“一维区间在平衡树中由分裂节点两侧的 maximal fully contained subtrees 表示,数量 $O(\log n)$ 且互不重叠。这一 canonical 分解保证报告点…”
构造与区域不变量 ​
每个节点选择坐标轴(常循环
范围与最近邻 ​
正交范围报告时,区域与查询盒不交则剪枝,完全包含则报告整棵子树,否则递归。二维平衡 kd-tree 的经典范围报告界为
最近邻先下降到含查询点的叶,回溯时以当前最好距离为半径;若另一子区域到查询点的最小距离不小于最好值就剪枝,否则必须搜索。正确性不依赖“通常很近”,而依赖包围区域给出的下界。
地理索引例子 ​
门店点按经、纬度交替切分。查询一个轴对齐地图视窗时,西侧节点区域若完全在视窗外可整棵跳过;最近门店查询则用当前候选距离判断是否有必要跨越切分线。
维数灾难 ​
最近邻最坏可访问全部
构建成本与距离下界 ​
每层若对当前子集线性选择中位数,所有节点一层总工作
欧氏最近邻中,查询点到轴对齐包围盒的最小距离由各坐标超出区间的量平方和给出。只有该下界已不小于当前最好距离时才能剪枝;只比较查询点与切分平面的距离,在节点存有更紧包围盒时虽安全但可能少剪枝,反向用错误上界则会漏答案。
最近邻查询的堆栈状态 ​
查询点
例如二维节点按
平衡构造保证树高
范围报告查询对与矩形相交的区域递归,对完全包含的区域可直接报告整棵子树;若节点未存子树点列表,仍需遍历输出,成本自然含
删除若仅打墓碑会让高度与区域包围盒逐渐失真。动态 k-d tree 常按失衡或墓碑比例重建子树,这提供的是摊还或经验性能,不能与静态中位数构造的最坏高度混写。
参考资料
- Jon Bentley, Multidimensional Binary Search Trees Used for Associative Searching, CACM, 1975.
- Mark de Berg et al., Computational Geometry, multidimensional searching.