Combinatorics 对两个集合进行配对,以使元素之间的距离最小化

Combinatorics 对两个集合进行配对,以使元素之间的距离最小化,combinatorics,hungarian-algorithm,Combinatorics,Hungarian Algorithm,我有两套S_1和S_2。给定这两个集合,我需要将S_1中的每个元素与S_2中的一个元素配对 这些元素不可重用,因此如果S_1[A]与S_2[D]配对,那么我也不能将S_1[B]与S_2[D]配对 目标是使用所有元素生成配对,从而使配对距离最小化 配对的距离计算为每对之间距离的总和 生成具有最低总成对点数值的结果 是否有任何已知的算法可以有效地解决此类问题? 部分困难在于采取贪婪的方法是行不通的。如果S_1=[A,B,C]和S_2=[D,E,F],distance(A,E)=0.1,dista

我有两套
S_1
S_2
。给定这两个集合,我需要将
S_1
中的每个元素与
S_2
中的一个元素配对

  • 这些元素不可重用,因此如果
    S_1[A]
    S_2[D]
    配对,那么我也不能将
    S_1[B]
    S_2[D]
    配对
  • 目标是使用所有元素生成配对,从而使配对距离最小化
  • 配对的距离计算为每对之间距离的总和
  • 生成具有最低总成对点数值的结果
是否有任何已知的算法可以有效地解决此类问题?

部分困难在于采取贪婪的方法是行不通的。如果
S_1=[A,B,C]
S_2=[D,E,F]
distance(A,E)=0.1
distance(A,E)=0.3
distance(A,F)=0.4
,你不能仅仅因为
A
D
之间的距离最小。假设
距离(B,D)=0.1
距离(B,E)=0.8
距离(B,F)=0.9
。如果您天真地选择在第一次迭代中匹配
(A,D)
,那么您实际上会使总体距离更高,因为这会迫使您匹配
(B,E)
(B,D)
。更好的选择是匹配
(a,E)
,然后允许
(B,D)
匹配。这意味着您不能迭代
S_1
并根据
S_1
的每个元素与
S_2
的其余元素之间的最小距离贪婪地分配匹配项


这似乎类似于赋值问题,我可以使用类似匈牙利算法()的方法来解决这个问题,但我相信该算法允许重用元素,这在我的情况下是行不通的

你已经准备好了一些背景资料并进行了观察。现在你有什么代码可以放在这里,你有一个具体的问题,我们可以帮助吗?我补充了一点更多的信息。问题是,对于这类问题,是否有已知的算法?这个问题可能是您想要的。该站点可能更适合这种类型的问题:)这听起来很像分配问题:“需要执行所有任务,为每个任务分配一个代理,为每个代理分配一个任务,以使分配的总成本最小化。”我不知道你从哪里听说它允许元素被重用。