首页 文章

最近的邻居在Octree搜索

提问于
浏览
1

NN算法如何在八叉树上工作?我搜索了一个很好的解释,但大多数时候人们只是说使用了KD树 . 我不能这样做,我需要逐步在八叉树上可视化NN算法 .

我认为最合乎逻辑的方式是:

1)找到该点所属的子八分圆 .

2)计算到该八分圆中最近点的距离

3)检查该距离内是否与相邻的八分圆重叠

4)如果找到更近的点,则重新计算搜索距离 .

5)重复直到遍历所有可能的八分圆

6)返回最近的点

但我不能为这一步想出一个好的一步一步的可视化 .

1 回答

  • 2

    要查找最接近搜索点的点,或按距离增加的顺序获取点列表,可以使用可以保存树的两个点和内部节点的优先级队列,这样可以按距离的顺序删除它们 .

    对于点(叶子),距离只是点与搜索点的距离 . 对于内部节点(八分圆),距离是从搜索点到可能在八分圆中的任何点的最小距离 .

    现在,要搜索,只需将树的根放在优先级队列中,然后重复:

    • 删除优先级队列的头部;

    • 如果队列的头部是一个点,那么它是您尚未返回的树中最近的点 . 你知道这一点,因为如果任何内部节点可能有一个更近的点,那么它将首先从优先级队列返回;

    • 如果队列的头部是内部节点,则将其子节点放回队列中

    这将按照距搜索点的距离增加的顺序生成树中的所有点 . 相同的算法也适用于KD树 .

相关问题