【问题标题】:Why need to alternate dimension in kd-tree construction为什么需要在 kd-tree 构建中交替维度
【发布时间】:2015-11-12 17:46:57
【问题描述】:
我有一个关于在 kd-tree 算法中划分空间的方式的问题。
假设我在平面上有点,坐标为 (x,y)。假设当点在同一条线上时,我们不在特定情况下。我在想为什么我们需要交替分割坐标,在一个级别,使用 x 轴,下一个级别,使用 y 轴。如果我们只使用 x 方向来分割空间,那么重要的是,我们总是有一棵二叉树,并且搜索算法总是取 log(n) 的平均值(假设我们有相对平衡良好的树)。
当我通过交替分割方向来分割空间时,什么给了我更多?不知道是不是和多维的一些一般概率性质有关?
【问题讨论】:
标签:
kdtree
multivariate-partition
【解决方案1】:
我认为当您开始搜索树时会出现问题,例如使用窗口查询(矩形查询)。
让我们假设一个矩形数据集,其点在-1,000 和1,000 之间在各个方向上均匀分布。
如果您按x 排序,那么应该返回所有带有(-900 < x < 900) && (1 < y < 10) 的点的查询可能必须扫描几乎整个树。
log(n) 搜索仅在您的查询仅限制 x 而不是 y(即 (1<x<10) && (-inf<y<+inf))时才有效。