在2D平面中的给定点集中找到两个点,其中最小距离小于O(n ^ 2)时间

Dud*_*ude 1 algorithm performance time-complexity data-structures

我在雅虎被问到机器学习档案这个问题.给定一组点(x,y)坐标,我被要求找到O(n)或O(log n)时间内距离最小的点.显然我能够拿出O(n ^ 2)时间但是没有办法接近获得更好的算法.即使问题陈述是为分裂和征服而尖叫,我也无法想出合并步骤的原因.我也在互联网上搜索这个问题并发现它实际上非常受欢迎,但我仍然无法掌握合并步骤的推理.

任何人都可以帮我解决这个问题吗?

输入:(x1,y1),(x2,y2),(x3,y3),(x4,y4),(x5,y5)

syn*_*ned 5

使用递归分而治之的方法可以在O(n log n)时间内解决该问题,例如,如下:

1.根据x坐标排序点.

2.通过垂直线x = xmid将点集分成两个相等大小的子集.

3.在左右子集中递归地解决问题.这分别产生左侧和右侧最小距离dLmin和dRmin.

4.找到一对点之间的最小距离dLRmin,其中一个点位于分割垂直的左侧,第二个点位于右侧.

5.最终答案是dLmin,dRmin和dLRmin中的最小值.

http://en.wikipedia.org/wiki/Closest_pair_of_points