我正在查看维基百科条目,了解如何解决此问题。它列出了五个步骤
1.沿x坐标分配点
2.通过垂直线x = xmid
将这组点分成两个大小相等的子集3.在左右子集中递归地解决问题。这将分别给出左侧和右侧最小距离dLmin和dRmin。
4.找到一对点之间的最小距离dLRmin,其中一个点位于分割垂直的左侧,第二个点位于右侧。
5.最终答案是dLmin,dRmin和dLRmin中的最小答案。
第四步我无法理解。如何选择该行左侧的哪个点与该行的右侧点进行比较。我知道我不应该比较所有的观点,但我不清楚如何选择要比较的点数。请不要给我发送链接,我已经搜索过,去了很多链接,并且没有找到帮助我理解第4步的解释。
由于
亚伦
答案 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)。
我认为我不能比现有的更清楚,但您对此算法步骤有任何具体问题吗?