两个数组中元素的相同总和

时间:2016-12-09 22:05:56

标签: algorithm

我有两个长度相同的整数数组v1v2。我想找到v1的最大元素子集,其总和与v2中相应元素的总和相同。例如,让

v1 = [1 2 3 1] 
v2 = [2 3 1 2]

两个数组中第2个,第3个和第4个元素的总和为6,因此这将是我要查找的子集。

有没有办法计算这个?

提前多多感谢。 切萨雷

1 个答案:

答案 0 :(得分:2)

计算增量,问题减少到subset sum problem。换句话说,创建第三个数组,其中每个元素是两个输入数组中相应元素之间的差异。

例如,给定输入数组v1v2,创建包含差异的第三个数组v3

       0  1  2  3   <-- index into the array
v1 = [ 1  2  3  1] 
v2 = [ 2  3  1  2]
v3 = [-1 -1  2 -1]

然后v3中添加到0的任何子集都是一个解决方案。在此示例中,解决方案由索引集表示:{0,1,2}{0,2,3}{1,2,3}