【发布时间】:2012-07-04 10:42:45
【问题描述】:
我一直在关注 Coursera 的算法课程,并想出了一个关于最近配对问题的分治算法的想法,我想澄清一下。
根据 Roughgarden 教授的算法(如果您有兴趣,可以查看 here): 对于给定的一组点 P,我们有两个副本 - 在 X 和 Y 方向上排序 - Px 和 Py,算法可以给出为
最近对(Px,Py):
- 将点分成左半部分 - Q 和右半部分 - R,并沿 x 和 y 方向形成两半的排序副本 - Qx,Qy,Rx,Ry
- 让closestPair(Qx,Qy)为点p1和q1
- 设最接近对(Rx,Ry)为p2,q2
- 令 delta 为 dist(p1,q1) 和 dist(p2,q2) 的最小值
- 这是不幸的情况,让 p3,q3 成为最接近的SplitPair(Px,Py,delta)
- 返回最佳结果
现在,我想要的说明与第 5 步有关。 我应该事先说一下,我的建议几乎没有任何改进,但如果您仍然感兴趣,请继续阅读。
R 教授说,由于点已经在 X 和 Y 方向上排序,为了在步骤 5 中找到最佳对,我们需要迭代宽度为 2*delta 的条带中的点,从下到上开始,并且在内部循环中,我们只需要 7 次比较。这可以改善到只有一个吗?
我觉得怎么可能用纯文本解释起来有点困难,所以我画了一张图,写在纸上,然后上传到这里:
由于没有其他人想出是,我很确定我的思路有一些错误。 但我现在已经想了好几个小时了,我只好发布这个。这就是我脑海中的一切。
谁能指出我哪里出错了?
【问题讨论】:
标签: algorithm divide-and-conquer