是否有任何算法优于O(n ^ 2),只要它们的距离小于常数t,就可以用直线连接任意两个点?
我正在考虑根据x坐标对点进行排序,然后在[x-t,x + t]内寻找另一个点。但最坏的情况仍然是O(n ^ 2)。任何的想法?我们是否有任何特殊的数据结构来加速?
答案 0 :(得分:2)
可能有用的一种方法是为每个点计算一个桶:
int(x/t),int(y/t)
即。点(0.1,0.9),(0.5,0.5),(0.8,0.2)都会进入同一个桶。
将所有点放入这些桶中,然后再次迭代点。
此组织的原因是您只需要针对同一个存储桶或8个相邻存储桶中的点检查点。
在一个不好的情况下,这可能仍然是O(n ^ 2)(例如,如果所有点都在彼此的t之内),但在某些情况下它可能会有所帮助。