http://www.glassdoor.com/Interview/Google-Interview-RVW2382108.htm
我试图找到解决这个问题的方法。但是我没有成功。任何人都可以给我一个关于如何处理这个问题的提示。
我将分别拿2对两分。也就是说,我将制作2个和弦。找出他们的垂直平分线。使用这些平分线,我会找到圆圈的中心......
而且,我会想出圆圈的等式。并找到点M与圆的交点......那应该是最近点。但是,该点在N点集合中可能存在也可能不存在
感谢。
答案 0 :(得分:5)
假设圆周上的点是“按顺序”(即按圆圈中心的角度排序),您可以使用基于角度的二分搜索,它应该达到O(log(n))
边界。
A
点到圆圈中心的角度M
- O(1)
。I
,其中最大角度小于A
- O(log(n))
。M
的最近点是I
或I+1
。计算两者的距离并取最小值 - O(1)
。 答案 1 :(得分:1)
要找到最接近M的点,我们需要根据平面切割进行二进制点消除。需要对输入点进行一点预处理,之后我们可以在O(lgn)时间内找到最接近任何给定点M的点。
请注意,最接近M的点的简单二进制搜索在此处不起作用,例如
使用平面切割执行搜索操作
如果数据偏斜并且不均匀地分布在圆圈中,我们可以优化我们的平面切割,使得每个切割通过搜索操作中留下的那些点的中值(基于角度)。