我试图实现一个二维树的递归近邻算法。
递归(和展开递归)对我来说仍然有点混乱,我找到的最好的伪代码来自这个stackoverflow问题:
2D KD Tree and Nearest Neighbour Search
然而,答案使用“中值”,我不知道如何计算维基百科关于kd树的文章还有一个不使用中值的近邻伪代码。
我想知道是否有可能在不使用中值的情况下构造近邻算法的递归版本。如果有人能为我提供伪代码,我将不胜感激。
最佳答案
如果你不顾一切地不使用中位数,你可以用平均数Here,有一个简单的方法:
例1:这些数字是什么意思?
6,11,7号
Add the numbers: 6 + 11 + 7 = 24
Divide by how many numbers (there are 3 numbers): 24 / 3 = 8
平均值是8
但是,我强烈建议您使用中间值,因为在您的情况下,维度允许使用中间值。
示例:求12、3和5的中值
按顺序排列:
3,5,12号
中间的数字是5,所以中间的数字是5。
Source
你真的不需要分类。伪排序就足够了,例如使用Quickselect。
以C++为例,可以使用使用nth_element()有效地找到中值。你可以看到我的问题here,我需要一般维度的中值在二维情况下,它肯定可以简化。
关于algorithm - 二维树最近邻居算法澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29883269/