最近的一对平面案例

时间:2011-04-24 23:23:11

标签: algorithm closest-points

我正在查看维基百科条目,了解如何解决此问题。它列出了五个步骤

1.沿x坐标分配点

2.通过垂直线x = xmid

将这组点分成两个大小相等的子集

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

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

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

第四步我无法理解。如何选择该行左侧的哪个点与该行的右侧点进行比较。我知道我不应该比较所有的观点,但我不清楚如何选择要比较的点数。请不要给我发送链接,我已经搜索过,去了很多链接,并且没有找到帮助我理解第4步的解释。

由于

亚伦

1 个答案:

答案 0 :(得分:2)

您的问题的答案在维基百科文章的下一段中:

  

事实证明,步骤4可能是   在线性时间完成。再说一次   天真的方法需要   计算所有人的距离   左右对,即二次方   时间。关键的观察是基于   以下的稀疏性属性   点集。我们已经知道了   最近的一对点是没有进一步的   除了dist = min(dLmin,dRmin)。   因此对于左边的每个点p   我们必须分界线   比较距离点   那个位于矩形的   尺寸(dist,2 * dist)到   如图所示,分界线右侧   在图中。更重要的是,这个   矩形最多可包含6个点   成对距离至少   dRmin。因此就足够了   计算最多6n左右   步骤4中的距离。重现   步数的关系可以   写成T(n)= 2T(n / 2)+ O(n),   我们可以使用主人解决   定理得到O(n log n)。

我认为我不能比现有的更清楚,但您对此算法步骤有任何具体问题吗?