给定2-D平面中的n个点,我们必须在它们之间找到每个点的k个最近邻居

时间:2016-10-14 09:08:52

标签: algorithm data-structures geometry nearest-neighbor

我使用min-heap探索了这个方法。对于每个点,我们可以存储大小为k的最小堆,但是对于大n来说它需要太多空间(我的目标是n大约1亿)。当然,必须有更好的方法来利用较小的空间并且不会影响时间复杂性。还有其他一些数据结构吗?

1 个答案:

答案 0 :(得分:4)

此问题是KD-tree的典型设置。这种解决方案具有线性复杂性,但实现起来可能相对复杂(如果没有现成的实现)

另一种方法可能是使用bucketing来降低朴素算法的复杂性。这个想法是将飞机分成“水桶”,即一些大小的方块,并将这些点放在它们所属的桶中。最近的点将来自最近的水桶。在随机数据的情况下,这可能是相当不错的改进,但最坏的情况仍然与天真的方法相同。