给定单位圆轮廓上的n个点,我想计算最接近的2个点.
这些点没有订购,我需要在O(n)中完成(所以我不能顺时针排序……)
我曾经知道解决方案,但忘记了……解决方案包括散列,并将圆分割成n个或更多个切片.
如果你发现一个算法只计算距离,而不是特定点,那就足够了..
最佳答案 这是一个
solution that purports to be O(n log log n),用于找到一条线上最近的一对点.这是对你的问题的一个微不足道的转变 – 每一点
单位圆上的(x,y)映射到线段[0,2pi]中的线性坐标x’,
其中x’= atan2(y,x).一旦你将它转换为一维问题,这个想法就是
大致开始将x’坐标散列到桶中,重新划分大桶
较小的桶,直到每桶最多一个点,然后遍历列表
并找到最近的一对. (你还有一张额外的支票,看看是否有
最小和最大x’坐标的点形成比线性更接近的对
最小的.)