【发布时间】:2014-08-13 21:29:37
【问题描述】:
我正在阅读CLR 中的一节,该节描述了使用分而治之的方法来使用两点之间的欧几里得距离找到最近的一对点。
有一个问题要求使用相似的方法使用两者之间的曼哈顿距离找到最近的一对点。但是,我无法掌握两者之间的区别。以下是我能想到的:
1) X 和 Y 是两个数组,点分别在 x 和 y 坐标上排序。
2) 找到一条线'l',它划分子集 Pl 和 Pr 之间的点集,所有小于或等于 'l' 的点都流向 Pl,否则流向 Pr。使用 Xl 和 Xr 作为两个数组,其中包含来自 Pl 和 Pr 的点。 Yl 和 Yr 也是如此。
3) 递归直到我们的点子集
4) 最小距离可以是任何递归调用返回的距离 - 称之为 d。
5) 找到围绕线 'l' 的 2d 宽度内的所有点,然后为每个这样的点找到它与该条带内 (all ??) 点的曼哈顿距离?
6) 返回步骤 (5) 和 (4) 中的最小值
在第 5 步)我被卡住了。无法弄清楚选择要比较的点数背后的逻辑。
更具体地说:在CLR 中提到,对于欧几里得距离,我们只需要检查 7 个点,并且在谷歌搜索后this reference 指出对于曼哈顿距离,我们需要考虑 12 个点。我无法理解这种点选择如何取决于我们所寻求的距离类型的逻辑。
【问题讨论】:
-
正确的拼写是曼哈顿距离。
-
... 和科门。但是这本书通常被称为 CLRS。
标签: algorithm computational-geometry