我需要设置点数,比如设置A和B
A的所有点都必须“移动”到B点,但B点不能耦合到A的多个点。
我需要找到最佳组合,其中总(步行)距离(从每对之间的距离相加)是最小的。
我在Java中举了一个示例用于演示目的(目前强制执行每个可能的组合并检查哪个具有最小的总距离)
示例1
示例2
绿色矩形表示集合A中的点,青色表示集合B中的点,忽略橙色正方形
我该如何处理?
答案 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