我有两套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, D) = 0.1
,distance(A, E) = 0.3
,distance(A, F) = 0.4
,您无法将A
与D
天真地匹配因为它具有该组的最低距离。假设distance(B, D) = 0.1
,distance(B, E) = 0.8
和distance(B, F) = 0.9
。如果您天真地选择在第一次迭代中匹配(A, D)
,那么您实际上会使总距离更高,因为这会强制您匹配(B, E)
或(B, D)
。匹配(A, E)
然后允许(B, D)
匹配是更好的选择。这意味着您无法迭代S_1
并根据S_1
的每个元素与S_2
的其余元素之间的最低距离贪婪地分配匹配项。
这看起来类似于赋值问题,我可以使用匈牙利算法(https://en.wikipedia.org/wiki/Hungarian_algorithm)来解决这个问题,但我相信算法允许重用元素,这对我的情况不起作用。