我知道我做错了,但想不出解决这个问题的正确方法。 我正在使用下面列出的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进行比较,这将给出左侧两点之间的最短距离。然后我为右和中心做同样的事情。我很确定有更快更好的方法,但我无法弄明白。
答案 0 :(得分:3)
你应该看看http://en.wikipedia.org/wiki/Closest_pair_of_points_problem#Planar_case
Here's a better resource for Step 4,但是为了让你开始:在递归中,如果我们已经分别在左右集合中有最小距离d1
和d2
,那么 if < / em>有一对更近的点 - 其中一个来自左边,一个来自右边的集合 - 然后我们只需要检查分界线距离d
内的点,{{1} }。