使用曼哈顿距离的最近点

时间:2014-06-23 18:22:25

标签: algorithm computational-geometry

我正在浏览Coreman中的一个部分,该部分描述了使用分而治之的方法,使用两点之间的欧氏距离来找到最接近的点对。

有一个问题是要求使用类似方法使用两者之间的manhatten距离找到最接近的点对。但是,我无法理解两者之间的区别。以下是我能想到的:

1)X和Y是两个数组,点分别在x和y坐标上排序。

2)找到一条线'l',它将子集P1和Pr之间的点集分开,所有点小于或等于'l'将转向P1,否则转为Pr。使用Xl和Xr是包含来自P1和Pr的点的两个数组。 Yl和Yr也一样。

3)递归到我们的点子集< = 3(在这种情况下使用蛮力)

4)最小距离可以是任何递归调用返回的距离 - 称之为d。

5)找到线'l'周围2d宽度内的所有点,然后对于每个这样的点,用该条带内的 (all ??) 点找到它的manhatten距离?

6)从步骤(5)和(4)返回最小值

在步骤5)我被卡住了。无法弄清楚选择与之比较的点​​数背后的逻辑。

更具体一点:在Coreman中提到,对于欧几里德距离,我们只需要检查7个点,并且在搜索谷歌this reference后,对于曼哈顿距离,我们需要考虑12分。我无法理解这种点的选择如何依赖于我们所寻求的距离类型的逻辑。

2 个答案:

答案 0 :(得分:3)

enter image description here

对于L左边的每个点,右边最多有6个点,距离小于d。这6个点可以定位在两个方位的六个角落。还有一个,可以找到距离小于d的一对。

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

答案 1 :(得分:0)

在5)步骤中,仅将每个点与具有cur_y - d< = y< = cur_y的点进行比较就足够了(如果它们被x坐标分开,则cur_y是当前点的y坐标) ),因为任何低于cur_y-d的点肯定比当前点的d更远。