我有一个数组A[]={3,2,5,11,17}
和B[]={2,3,6}
,B的大小始终小于A.现在我必须将每个元素B映射到A的 distinct 元素总差值sum( abs(Bi-Aj) )
变为最小值(其中Bi已映射到Aj)。什么是算法类型?
对于示例输入,我可以选择2->2=0
,3->3=0
,然后选择6->5=1
。所以总成本是0 + 0 + 1 = 1.我一直在考虑对两个数组进行排序,然后从A中取出第一个sizeof B
元素。这会有用吗?
答案 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