如果两点间的距离小于一个常量t,有没有比O(n^2)更好的算法将这两个点用一条直线连接起来?
我在考虑按照它们的x坐标对点进行排序,然后在[x-t,x+t]范围内寻找另一个点。但最坏情况仍为O(n^2)。有什么想法吗?我们有任何特殊的数据结构可以加速吗?
如果两点间的距离小于一个常量t,有没有比O(n^2)更好的算法将这两个点用一条直线连接起来?
我在考虑按照它们的x坐标对点进行排序,然后在[x-t,x+t]范围内寻找另一个点。但最坏情况仍为O(n^2)。有什么想法吗?我们有任何特殊的数据结构可以加速吗?
有一种可能会有所帮助的方法是对于每个点计算一个bucket,具体如下:
int(x/t),int(y/t)
将点(0.1,0.9)、(0.5,0.5)、(0.8,0.2)放入同一个桶中。
将所有点放入这些桶中,然后再次迭代点。
这种组织方式的原因是您只需要检查点与同一桶中的点或相邻8个桶中的点。
在最坏情况下,仍可能达到O(n ^ 2)(例如,如果所有点都在t之内),但在某些情况下可能会有所帮助。