2D最近坐标的算法

时间:2011-04-22 20:16:10

标签: algorithm closest

我知道我做错了,但想不出解决这个问题的正确方法。 我正在使用下面列出的12个点。 (1,2)(1,11)(7,8)(9,9)(12,13),(13,4),(20,8),(22,3),(23,12), (24,14),(26,7),(31,10)

我把它分成两个子集

左=(1,2)(1,11)(7,8)(9,9)(12,13),(13,4)

右=(20,8),(22,3),(23,12),(24,14),(26,7),(31,10)

进一步减少

LLeft =(1,2)(1,11)(7,8)

RLeft =(9,9)(12,13),(13,4)

LRight =(20,8),(22,3),(23,12)

RRight =(24,14),(26,7),(31,10)

找出每组的最小距离。

LLeft(1,2)(1,11)为9,(1,11)(7,8)为6.7,(1,2)(7,8)为8.48

最小值为6.7

RLeft(9,9)(12,3)为6.70,(9,9)(13,4)为6.4,(12,3)(13,4)为1.14

分钟是1.14

LRight(20,8)(22,3)是5.38(20,8)(23,2)是5,(22,3)(23,12)是9.05

分钟是5

RRight(24,14)(26,7)是7.28(24,14)(31,10)是8.06(26,7)(31,10)是5.83

分钟是5.83

所以现在我有LLeft,RLeft,LRight和RRight。我需要找到的是LRLeft,RLLEft_Right(中间的值)和LRRight。这是我感到困惑的地方。我能想到获得LRLeft的唯一方法是采用LLeft和RLEft中的每个点并找到两者之间的距离。然后使用该距离并将其与LLeft和RLeft进行比较,这将给出左侧两点之间的最短距离。然后我为右和中心做同样的事情。我很确定有更快更好的方法,但我无法弄明白。

1 个答案:

答案 0 :(得分:3)

你应该看看http://en.wikipedia.org/wiki/Closest_pair_of_points_problem#Planar_case

Here's a better resource for Step 4,但是为了让你开始:在递归中,如果我们已经分别在左右集合中有最小距离d1d2,那么 if < / em>有一对更近的点 - 其中一个来自左边,一个来自右边的集合 - 然后我们只需要检查分界线距离d内的点,{{1} }。