利用kd树实现最近邻搜索

输入:已经构造的kd树,目标点x;

输出:x的最近邻

1在kd树中找出包含目标点x的叶节点:从根结点出发,递归地向下访问kd树。若目标点x当前维的坐标小于切分点的坐标,则移动到左叶子结点,否则移动到右叶子结点。直到子节点为叶节点为止。

2以此叶节点为“当前最近点”

3递归地向上回退,在每个结点进行以下操作:

   a.如果该结点保存的实例点比当前最近点距离目标点更近,则以该实例点为“当前最近点”

   b.当前最近点一定存在于该结点一个子结点对应的区域。检查该子结点的父结点的另一子结点对应的区域是否有更近的点。具体来说,检查另一子结点对应的区域是否与以目标点为球心,以目标点与“当前最近点”间的距离为半径的超球体相交。

    如果相交,可能在另一子结点对应的区域内存在距离目标点更近的点,移动到另一个子结点。接着,递归地进行最近邻搜索;

    如果不想交,向上回退。

4当回退到根结点使,搜索结束,最后的“当前最近点”即为x的最近邻点。

猜你喜欢

转载自blog.csdn.net/zrh_csdn/article/details/80878855