Algorithm 如何从kd树中高效地找到k个最近邻

Algorithm 如何从kd树中高效地找到k个最近邻,algorithm,tree,Algorithm,Tree,事实上,这个问题以前有人问过,但据我所知,没有提供适当的答案 我了解如何实现k-d树以及最近邻搜索是如何工作的。然而,即使环顾四周,我也找不到一种有效的方法来使用k-d树非常有效地搜索k个最近邻居。我只能考虑找到最近的邻居并删除它,然后再次重复这个过程k-1次,然后将所有删除的节点插入到树中。但这似乎是多余的,完全违背了目的 我只想找到一个简单的方法,用k-d树找到k个最近的邻居。我不是在寻找一个在线实现或图书馆,可以让我这样做。我只想理解逻辑,然后我将自己实现它。的算法可以被视为“递归搜索整棵

事实上,这个问题以前有人问过,但据我所知,没有提供适当的答案

我了解如何实现k-d树以及最近邻搜索是如何工作的。然而,即使环顾四周,我也找不到一种有效的方法来使用k-d树非常有效地搜索k个最近邻居。我只能考虑找到最近的邻居并删除它,然后再次重复这个过程k-1次,然后将所有删除的节点插入到树中。但这似乎是多余的,完全违背了目的

我只想找到一个简单的方法,用k-d树找到k个最近的邻居。我不是在寻找一个在线实现或图书馆,可以让我这样做。我只想理解逻辑,然后我将自己实现它。

的算法可以被视为“递归搜索整棵树”的优化,而优化是在您要搜索的子树不可能包含对当前最佳邻居的改进时进行的

要更改此设置以查找k个最近的邻居,请保留迄今为止找到的k个节点,而不是仅保留一个最近的节点,并跟踪到这些节点中最远节点的距离。然后决定搜索一个子树,或者忽略它,这取决于该子树中最近的点是否可能是这些k个邻居中最远的一个的改进


您需要一个数据结构,例如堆,它允许您保留k个项目,找到距离值最高的项目,删除该项目,然后插入新发现的项目。

我知道他们的研究论文非常复杂,可以在线获取,但如果有人能提供一种简单有效的方法,那就太好了。