我正在尝试为2d-Tree实现递归最近邻居算法。 递归(和展开递归)仍然让我感到困惑,我发现的最好的伪代码来自StackOverflow这个问题:
2D KD Tree and Nearest Neighbour Search
然而,答案使用“中位数”值,我不知道如何计算。关于kd-tree的维基百科文章也有一个不使用中值的最近邻伪代码。
我想知道是否可以在不使用中值的情况下构建最近邻算法的递归版本。如果有人能为我提供伪代码,我将不胜感激。
答案 0 :(得分:1)
如果您不想使用中位数,可以使用均值。 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。
你真的不需要对它们进行排序。伪分类就足够了,例如使用Quickselect。
例如,在C ++中,您可以使用use nth_element()来有效地找到中位数。你可以看到我的问题here,我需要一般尺寸的中位数。在2D的情况下,它可以确保简化。