“k d tree在自身的几何查询合同内返回精确结果,最近邻访问数却可能退化到线性;这里则把漏检概率纳入合同,并可能因大量近点或相同键而扫描 $nL$ 项。两者的差别是保证类型和数据访问方式,…”
形式陈述
构造与区域不变量
固定维数
范围与最近邻
用于正交范围报告时,区域与查询盒不交则剪枝,完全包含则报告整棵子树,否则递归。对上述固定循环轴、中位平衡的版本,二维范围报告界为
界的来源是查询边界穿过多少个区域。在互异秩的表示中,固定一张垂直于某轴的查询边界:沿该轴切分时,它至多穿过一个子区域的内部;沿其他轴切分时至多穿过两个。每
欧氏最近邻另外选用原坐标的标准内积;秩坐标只用于范围报告,不能替代真实距离。非空树先沿分割朝查询点所在一侧下降到叶或空孩子,再回溯检查节点点。初始最好距离为
直觉
k-d tree 的每次切分都给子树附上一块轴对齐区域。查询不必只看存储点本身,而可先比较整个区域与查询盒或当前最近球:区域下界已经不可能改进答案时,整棵子树都能剪掉;维数升高后大量区域同时相交,剪枝才会退化。
例子与边界
地理索引例子
在选定的平面地图投影中,门店点按两个坐标交替切分;全球经纬度上的球面距离需要相应的区域下界,不能直接拿本页欧氏公式替代。查询一个轴对齐地图视窗时,西侧节点区域若完全在视窗外可整棵跳过;最近门店查询则用当前候选距离判断是否有必要跨越切分线。
维数灾难
最近邻最坏可访问全部
推论与应用
构建成本与距离下界
每层若对当前子集线性选择中位数,所有节点一层总工作
欧氏最近邻中,查询点到轴对齐包围盒的最小距离由各坐标超出区间的量平方和给出。只有该下界已不小于当前最好距离时才能剪枝;只比较查询点与切分平面的距离,在节点存有更紧包围盒时虽安全但可能少剪枝,反向用错误上界则会漏答案。
最近邻查询的堆栈状态
查询点
例如二维节点按
平衡构造保证树高
范围报告查询对与矩形相交的区域递归,对完全包含的区域可直接报告整棵子树;若节点未存子树点列表,仍需遍历输出,成本自然含
删除若仅打墓碑会让高度与区域包围盒逐渐失真。动态 k-d tree 常按失衡或墓碑比例重建子树,这提供的是摊还或经验性能,不能与静态中位数构造的最坏高度混写。
参考资料
- Jon Bentley, Multidimensional Binary Search Trees Used for Associative Searching, CACM, 1975.
- Mark de Berg et al., Computational Geometry: Algorithms and Applications, 3rd ed., Springer, 2008, multidimensional searching.