我想了解最近的对算法。我理解将这一组分成两半。但我无法理解如何递归计算最近的一对。我理解递归,但不明白如何通过递归计算最接近的对。如果你有(1,2)(1,11)(7,8)递归如何在这些上工作?
答案 0 :(得分:8)
算法的基本思想是这个。
你有一组点P,你想找到P中两个点之间距离最短的点。
一个简单的强力逼近将遍历P中的每一对,计算距离,然后选择距离最短的一对。这是一个O(n²)算法。
然而,您所谈论的算法可能会更好。该想法首先是根据其中一个坐标对所有点进行排序,例如, x坐标。现在,您的集合P实际上是一个排序的点列表,按其x坐标排序。该算法现在将其作为输入而不是一组点,而是一个排序的点列表。让我们调用ClosestPair(L)算法,其中L是作为参数给出的点列表。
ClosestPair(L)现在以递归方式实现,如下所示:
答案 1 :(得分:7)
如果您的意思是this algorithm,请执行以下操作:
递归包含与上面相同的步骤。例如。用(1,2)和(1,11)调用:
答案 2 :(得分:1)
我想我知道你在说什么算法。我自己可以在这里重新讲述它,但Introduction to Algorithms中给出的描述远远超出了我的能力。这一章也可以在谷歌书籍上找到:enjoy。 (其他人也可以在那里找到问题描述)
答案 3 :(得分:0)
也许Linear-time Randomized Closest Pair算法会有所帮助。在那里,您可以在预期的时间O(n)中找到该对。