获得两组点之间最近对的最佳组合

时间:2015-10-21 16:08:38

标签: java algorithm closest-points

我需要设置点数,比如设置A和B

  • A和B大小相等
  • A的每个元素都耦合到B
  • 的元素

A的所有点都必须“移动”到B点,但B点不能耦合到A的多个点。

我需要找到最佳组合,其中总(步行)距离(从每对之间的距离相加)是最小的。

我在Java中举了一个示例用于演示目的(目前强制执行每个可能的组合并检查哪个具有最小的总距离)

示例1

Example img 1

示例2

Example img 2

绿色矩形表示集合A中的点,青色表示集合B中的点,忽略橙色正方形

我该如何处理?

2 个答案:

答案 0 :(得分:2)

这是一个assignment problem,可以通过Hungarian algorithm O n ³)时间内解决。找到源代码或自己实现源代码应该不会太难。

答案 1 :(得分:1)

loop over A points
  find closest B point NOT already connected to A point

这将提供一个体面的起始解决方案,处理时间最短

如果您还有一些额外的时间,请尝试通过

进行改进
loop over connections
   loop over connections with index greater then selected in previous loop
      sum total length of two connections
      swap connection pairs
      sum total length of swapped connections
      if swap is less
         replace original with swapped
      if reached time budget
         end