部分和查找/部分和集分配

时间:2011-02-18 05:36:04

标签: arrays algorithm math

我有以下问题需要解决。与输入一样,我有2个十进制数组。两者的要素总和是相等的。 Actuall问题是通过部分和将值从一个数组赋值给第二个数组 - 如果一个数组中的某个元素是第二个数组中任意数量元素的总和 - 它们应该相互分配。

的Sample1:

Array1:25.0,25.0,50.0,50.0 Array2:50.0,100.0

预期结果:50.0是25.0和25.0的总和,100.0是50.0和50.0的总和
(0-> 0,1; 1-> 2,3)

样品2:

Array1:20.0,70.0,80.0,130.0 Array2:100.0,200.0

预期结果: 100 = 20 + 80,200 = 70 + 130(0-> 0,2; 1-> 1,3)

想法是返回指定的数组元素索引,并尽可能少地返回。

1 个答案:

答案 0 :(得分:2)

这称为subset sum problem

不幸的是,这是NP完全的,这意味着您必须检查所有可能的组合。

但是,如果您的问题只有少量的部分金额(例如您的示例),那么就会蛮力。


Moron是正确的,并非所有NP完全问题都需要检查所有可能的组合 不过我相信subset sum is one that does