在Groovy中采用最近邻搜索函数通过kD树提供K-最近邻?

在Groovy中采用最近邻搜索函数通过kD树提供K-最近邻?,groovy,nearest-neighbor,kdtree,Groovy,Nearest Neighbor,Kdtree,我已经成功地编写了一个函数,该函数遍历Kd树以获得点的最近单个邻居 但是,我尝试切换此函数,以便它查找K个最近邻,而不是单个最近邻。事实证明,这是一项比我最初想象的更艰巨的任务,我发现自己需要一些帮助 维基百科关于kD树的文章说: 该算法可以通过简单的修改以多种方式扩展。它可以通过保持k个当前最佳值而不是仅一个来提供点的k个最近邻。分支只有在不能有比k个当前最佳分支更接近的点时才被消除 …但它没有说明如何获得最初的当前最佳成绩。找到第一个最好的已经足够简单了,但我不知道如何在不删除之前的最好并重

我已经成功地编写了一个函数,该函数遍历Kd树以获得点的最近单个邻居

但是,我尝试切换此函数,以便它查找K个最近邻,而不是单个最近邻。事实证明,这是一项比我最初想象的更艰巨的任务,我发现自己需要一些帮助

维基百科关于kD树的文章说:

该算法可以通过简单的修改以多种方式扩展。它可以通过保持k个当前最佳值而不是仅一个来提供点的k个最近邻。分支只有在不能有比k个当前最佳分支更接近的点时才被消除

…但它没有说明如何获得最初的当前最佳成绩。找到第一个最好的已经足够简单了,但我不知道如何在不删除之前的最好并重新搜索的情况下找到剩余的k个当前最好的…这基本上违背了拥有一个快速算法的意义,因为在我的情况下,我必须做k次,17次

如果我有一个17个初始最佳值的填充列表,我相信我的算法会找到正确的点

我道歉,如果这是含糊不清的。如果需要任何代码示例,我很乐意提供它们。虽然对于这个问题有一个简单的解释,但可能没有必要发布它,所以一开始我不会这么说


提前谢谢

一个非常简单的例子展示了如何找到第一个最好的可能是有用的…@tim_yates Wikipedia说:从根节点开始,算法递归地沿着树向下移动,与插入搜索点的方式相同,即根据点是否小于或大于拆分维度中的当前节点向左或向右移动。一旦算法到达一个叶节点,它会将该节点点保存为“当前最佳”。这就是你所说的吗?我现在正在这样做,但我不确定从那里去哪里。