如何在两个阵列之间取得平衡,例如差异最小化?

时间:2013-10-29 09:23:53

标签: c++ algorithm

我有一个数组A[]={3,2,5,11,17}B[]={2,3,6},B的大小始终小于A.现在我必须将每个元素B映射到A的 distinct 元素总差值sum( abs(Bi-Aj) )变为最小值(其中Bi已映射到Aj)。什么是算法类型?

对于示例输入,我可以选择2->2=03->3=0,然后选择6->5=1。所以总成本是0 + 0 + 1 = 1.我一直在考虑对两个数组进行排序,然后从A中取出第一个sizeof B元素。这会有用吗?

1 个答案:

答案 0 :(得分:3)

可以将其视为不平衡Assignment Problem

成本矩阵应为B [i]和A [j]的值之差。您可以向B添加虚拟元素,以便使问题变得平衡并使成本相关联。

然后可以应用Hungarian Algorithm来解决它。

对于示例案例A [] = {3,2,5,11,17}和B [] = {2,3,6},成本矩阵应为:

.   3  2  5 11 17
2   1  0  3  9 15
3   0  1  2  8 14
6   3  4  1  5 11
d1 16 16 16 16 16
d2 16 16 16 16 16