一系列xy坐标中的最短距离

时间:2012-12-02 03:47:36

标签: c# algorithm brute-force divide-and-conquer

我有一个分配比较2个不同算法的问题。这是问题所在:

假设我有一系列像这样的xy坐标:

A(2,3), B(5,6), C(7,8), d(6,2), E(5,5)等。

我想找到两条距离最短的坐标。其中一个解决方案是使用蛮力(逐个匹配),但还有另一种使用“分而治之”方法的解决方案。

你能帮我解决“分而治之”的方法吗?

2 个答案:

答案 0 :(得分:5)

递归分而治之的方法如下:

  

1)根据x坐标对点进行排序   2)拆分组   通过垂直线x = xmid指向两个相等大小的子集。

     

3)在左右子集中递归地解决问题。这
  产生左侧和右侧最小距离dLmin和dRmin,   分别。

     

4)找到其中的一对点中的最小距离dLRmin   一点位于分隔垂直和左边的左侧   点在于右边。

     

5)最终答案是dLmin,dRmin和dLRmin中的最小值。   (source

它的复杂性为O(n log n)。还有一个伪代码实现here和方法here的直观描述。

答案 1 :(得分:0)

想想"划分"和"合并"零件意味着。显然"划分"意味着将问题分成两个较小的单独的问题。怎么样?那么,鉴于你解决了2个较小的问题,你如何将它们合并在一起?两种方法的时间复杂度是多少?如果您需要更多说明,请发表评论。