我在看维基百科的条目,看看如何解决这个问题它列出了五个步骤
1.沿X坐标排序点
2.通过垂直线x=xmid将点集拆分为两个大小相等的子集
3.在左、右子集中递归求解这将分别为左侧和右侧提供最小距离dLmin和dRmin。
4.求一点位于垂直分界线左侧,第二点位于右侧的点对之间的最小距离dlrmin。
5.最终答案是dlmin、drmin和dlrmin中的最小值。
第四步我理解有困难如何选择线左侧的点与线右侧的点进行比较。我知道我不应该比较所有的点,但我不清楚如何选择点进行比较。请不要给我一个链接,我已经搜索,去了无数的链接,并没有找到一个解释,帮助我理解步骤4。
谢谢
亚伦
最佳答案
你的问题的答案在维基百科文章的下一段:
原来第四步可能是
在线性时间内完成。再一次,A
天真的方法需要
所有距离的计算
左右对,即二次型
时间。关键的观察是基于
的以下稀疏性
点集。我们已经知道
最近的一对点不再是
除了dist=min(dLmin,dRmin)。
因此对于左边的每个点p
分界线的一部分
将距离与点进行比较
位于
尺寸(距离,2*dist)
分界线右侧,如图所示
在图中更重要的是,这个
矩形最多可包含6个点
至少有成对距离
明博士。因此,只要
最多计算6n左右
步骤4中的距离复发
步骤数的关系可以
写为t(n)=2t(n/2)+o(n),
我们可以用大师来解决
得到o(n logn)的定理。
我想我不能说得比他们已经说得更清楚,但是你对算法的这一步有什么具体的问题吗?