我有一个关于在kd-tree算法中划分空格的方法的问题。
假设我在平面上有点,有(x,y)坐标。假设当点在同一行时我们不处于特定情况。我在想为什么我们需要交替分裂坐标,在一个级别上,使用x轴,下一级,使用y轴。重要的是,如果我们只使用x方向来分割空格,我们总是有一个二叉树,搜索算法总是平均采用log(n)(假设我们有相对良好的平衡树)。
当我通过交替分割方向分割空间时,是什么让我更多?我想知道它是否与多维中的一些概率性质相关?
答案 0 :(得分:0)
我认为当您开始搜索树时会出现问题,例如使用窗口查询(矩形查询)。
让我们假设一个矩形数据集,在每个方向上-1,000
和1,000
之间的点均匀分布。
如果按x
排序,那么应该返回(-900 < x < 900) && (1 < y < 10)
所有点的查询可能必须扫描几乎整个树。
log(n)
搜索仅在您的查询仅限制x
而非y
时才有效,即(1<x<10) && (-inf<y<+inf)
。