对于最近对问题的分而治之算法,我的逻辑有什么问题?

时间:2012-07-03 23:06:27

标签: algorithm divide-and-conquer

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

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

closestPair(PX,PY):

  1. 将分为左半部分 - Q和右半部分 - R,并沿x和y方向形成两半的分类副本 - Qx,Qy,Rx,Ry
  2. 让nearestPair(Qx,Qy)为点p1和q1
  3. 让nearestPair(Rx,Ry)为p2,q2
  4. 设delta为dist(p1,q1)和dist(p2,q2)
  5. 的最小值
  6. 这是不幸的情况,让p3,q3成为最近的SplitPair(Px,Py,delta)
  7. 返回最佳结果
  8. 现在,我想要的澄清与第5步有关。 我应事先说出来,我所建议的,几乎没有任何改善,但如果你还有兴趣,请提前阅读。

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

    我认为有可能在纯文本中解释有点困难,所以我画了一张图并将其写在纸上并上传到这里:

    enter image description here

    由于没有其他人想出来,我很确定我的想法中存在一些错误。 但我现在一直在考虑这个问题,我只是想发布这个。这就是我的想法。

    有人能说出我出错的地方吗?

1 个答案:

答案 0 :(得分:5)

你在第5点的结论是不正确的。尝试将点A拉近分界线。

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

  | B
  | 
 A|
  | 
  | C

此处dist(A,B) = dist(A,C) < dist(B,C)

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