所以,我正在实施KD-Tree来进行最近邻搜索。我已经建立了树部分工作,但我不认为我完全理解搜索部分。
关于遍历树以搜索邻居,维基百科文章说:
Starting with the root node, the algorithm moves down the tree recursively, in the same
way that it would if the search point were being inserted (i.e. it goes right or left
depending on whether the point is greater or less than the current node in the split
dimension).
“吐出维度中当前节点的大于或小于”是什么意思?我们是根据与查询的距离比较点还是按分割维度比较点?
另外,有人可以解释有关超空间和超平面的部分吗?我觉得我理解它,但因为我不确定我想要更多的解释。
谢谢!
答案 0 :(得分:3)
每个节点沿一个轴将空间分成2个半空间。您可以查看相关点与相对于该分割平面的位置,以确定树的哪一侧下降。例如,如果您的点是(4,7,12)并且您有一个将y轴切割为9的分割平面,则将7与9进行比较并决定沿着左侧(小于)侧面向下移动。 kd树首先。找到左侧最近的邻居后,检查它是否小于2(到分割平面的距离:9-7)。如果它比分割平面更近,则根本不需要遍历另一个半树。这就是它工作得很好的原因,大多数时候你只需要遍历一个子树。
希望有所帮助。