geo*_*ord 23 algorithm math computational-geometry
给定平面上的一组点,找到由这两个点中的任何两个点形成的最短线段.
我怎样才能做到这一点?琐碎的方法显然是计算每个距离,但我需要另一种算法进行比较.
小智 31
http://en.wikipedia.org/wiki/Closest_pair_of_points
使用递归分而治之的方法可以在O(n log n)时间内解决该问题,例如,如下:
一种可能性是按X坐标对点进行排序(或者Y - 并不重要,只是一致).然后,您可以使用它来消除与许多其他点的比较.当你看到点[i]和点[j]之间的距离时,如果单独的X距离大于你当前的最短距离,则点[j + 1] ...点[N]可以被消除为好吧(假设i<j- 如果j<i,那么点[0] ......点[i]被淘汰).
如果您的点以极坐标开始,则可以使用相同的变体 - 按原点的距离排序,如果与原点的距离差异大于当前的最短距离,则可以消除该点,以及与您目前正在考虑的原点相比距原点更远(或更接近原点)的所有其他原因.