使用曼哈顿距离的最近点对

Posted

技术标签:

【中文标题】使用曼哈顿距离的最近点对【英文标题】:closest pair of points using Manhattan distance 【发布时间】: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。 【参考方案1】:

对于L左侧的每个点,右侧最多有6个点与它的距离小于d。这 6 个 点 可以 定位 在 两个 方格 的 六个 角 上 .再加一个,就可以找到距离小于d的一对了。

然后将 L 右侧的点按 y 坐标排序。在y轴上找到离P最近的6个点,这可能会产生更近的距离。

【讨论】:

这适用于曼哈顿距离和欧几里得距离还是特定于其中之一? 一般来说,我们通常讨论欧几里得距离。 这里,我认为它也适用于曼哈顿距离,因为 2d 宽度条也可以。【参考方案2】:

在 5) 步骤中,仅将每个点与具有 cur_y - d

【讨论】:

以上是关于使用曼哈顿距离的最近点对的主要内容,如果未能解决你的问题,请参考以下文章

曼哈顿距离MST

知识点:曼哈顿距离相关

数据挖掘1-推荐算法入门

R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离dist函数计算矩阵中两两元素的曼哈顿距离

Python编程题:编程求两点之间的曼哈顿距离?

Atitti knn实现的具体四个距离算法 欧氏距离余弦距离汉明距离曼哈顿距离