【问题标题】:What is wrong with my logic for the divide and conquer algorithm for Closest Pair Problem?我对最近对问题的分治算法的逻辑有什么问题?
【发布时间】:2012-07-04 10:42:45
【问题描述】:

我一直在关注 Coursera 的算法课程,并想出了一个关于最近配对问题的分治算法的想法,我想澄清一下。

根据 Roughgarden 教授的算法(如果您有兴趣,可以查看 here): 对于给定的一组点 P,我们有两个副本 - 在 X 和 Y 方向上排序 - Px 和 Py,算法可以给出为

最近对(Px,Py):

  1. 将点分成左半部分 - Q 和右半部分 - R,并沿 x 和 y 方向形成两半的排序副本 - Qx,Qy,Rx,Ry
  2. 让closestPair(Qx,Qy)为点p1和q1
  3. 设最接近对(Rx,Ry)为p2,q2
  4. 令 delta 为 dist(p1,q1) 和 dist(p2,q2) 的最小值
  5. 这是不幸的情况,让 p3,q3 成为最接近的SplitPair(Px,Py,delta)
  6. 返回最佳结果

现在,我想要的说明与第 5 步有关。 我应该事先说一下,我的建议几乎没有任何改进,但如果您仍然感兴趣,请继续阅读。

R 教授说,由于点已经在 X 和 Y 方向上排序,为了在步骤 5 中找到最佳对,我们需要迭代宽度为 2*delta 的条带中的点,从下到上开始,并且在内部循环中,我们只需要 7 次比较。这可以改善到只有一个吗?

我觉得怎么可能用纯文本解释起来有点困难,所以我画了一张图,写在纸上,然后上传到这里:

由于没有其他人想出是,我很确定我的思路有一些错误。 但我现在已经想了好几个小时了,我只好发布这个。这就是我脑海中的一切。

谁能指出我哪里出错了?

【问题讨论】:

    标签: algorithm divide-and-conquer


    【解决方案1】:

    您在第 5 点中的结论是不正确的。尝试将点 A 画在离分界线更近的位置。

    你可以在 A 的 delta 范围内有两个点(一个在上面,一个在下面),它们不在彼此的 delta 范围内。

      | B
      | 
     A|
      | 
      | C
    

    这里,dist(A,B) = dist(A,C) < dist(B,C)

    这是一个完美的例子,说明为什么图片有助于获得直觉,但仍然需要证据来支持你的结论。

    【讨论】:

    • 你是对的,我在第 5 条中的结论是错误的。半径 delta 的同一圆中的两个点的距离可能超过 delta 的距离。但是,在这种情况下,正如您所指出的,一个点将低于所考虑的点,而另一个点将高于另一个点。而且由于我们是从下到上,考虑垂直条中y坐标递增顺序的点,我们不需要检查与所考虑点下方的点的距离,对吧?在您的示例中,当我考虑 A 时,我不会检查 C 与 A 的距离,因为(续..)
    • 因为..在考虑A之前,我已经考虑过C,并且在那段时间我必须检查C和A之间的距离。所以为了找出最小距离,仍然只需要在考虑的点之上考虑一点,对吧?
    猜你喜欢
    • 1970-01-01
    • 2021-10-21
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多