http://www.glassdoor.com/Interview/Google-Interview-RVW2382108.htm
我试图找到解决这个问题的方法。但我没有成功..任何人都可以给我一个关于如何处理这个问题的提示。
我将每人取 2 对两分。也就是说,我会制作2个和弦。找出它们的垂直平分线。使用这些平分线,我会找出圆的中心......
此外,我将提出圆的方程。并找到点 M 与圆的交点......那应该是最近的点。但是,该点可能存在也可能不存在于 N 个点的集合中
谢谢。
http://www.glassdoor.com/Interview/Google-Interview-RVW2382108.htm
我试图找到解决这个问题的方法。但我没有成功..任何人都可以给我一个关于如何处理这个问题的提示。
我将每人取 2 对两分。也就是说,我会制作2个和弦。找出它们的垂直平分线。使用这些平分线,我会找出圆的中心......
此外,我将提出圆的方程。并找到点 M 与圆的交点......那应该是最近的点。但是,该点可能存在也可能不存在于 N 个点的集合中
谢谢。
假设圆的圆周上的点是“有序的”(即按围绕圆中心的角度排序),您可以使用基于角度的二分搜索,这应该可以实现O(log(n))边界。
A点M到圆心的角度 - O(1)。I在圆周上找到最大角度小于A-的点O(log(n))。M是I或I+1。计算两者的距离并取最小值 - O(1)。 为了找到最接近 M 的点,我们需要基于平面切割对点进行二元消除。需要对输入点进行一点预处理,之后我们可以在 O(lgn) 时间内找到最接近任何给定点 M 的点。
请注意,最接近 M 的点的简单二进制搜索在这里不起作用,例如,
要使用平面切割执行搜索操作,

如果数据是倾斜的并且没有均匀地分布在圆圈中,我们可以优化我们的平面切割,使每个切割都通过搜索操作中留下的那些点的中值(基于角度)。