0K,问题在这里,我会尽量让它尽可能清楚。
因此,我们在形式唯一的id =>中有一组键值对。号。
伪代码数组A= array(0 => 17, 1 => 26, 2 => 17, 3 => 2, 4 => 7, 5 => 8);
我们看到这些数字的总数是60.这一直是正确的,所以在阵列中的总数一直是正确的。
现在我们有阵列B. 在数组B中,也是唯一的id =>值对,但这里的一些值是PHONY / INCORRECT,而total(数组B)-total(数组A)必须是0.
即。对于上面的示例数组A= array(6 => 22, 7 => 11, 8 => 8, 9 => 9, 10 => 5, 11 => 10, 12 => 7, 13 => 17, 14 => 10);
现在,阵列B的总数是99. 60-99 = -39,这意味着我们必须找到所有数组的组合,这些数字在数组B中等于39.在这种情况下,只看@眼睛似乎只有2这种组合是可能的:唯一的ID 10,12,13,14是不正确的,或者10,11,12,13是PHONY / INCORRECT(5 + 7 + 17 + 10 = 39)。现在,使用这样的小数组,很容易找到这些使用循环并迭代所有可能的选项,但数组范围数千(唯一ID)。做这个的最好方式是什么?计算机如何最快找到假/不正确的对?
另外,我欠那个能给出最好(和最好)答案的人喝啤酒。
答案 0 :(得分:1)
现在,数组B总数为99. 60-99 = -39,这意味着我们必须找到数组B中所有数字组合等于39。
只有当您知道所有错误的数字都应为零时才会出现这种情况。
数组中的任何或所有数字都可能会导致错误,因为错误的总数为39。
话虽如此,找到添加到特定总和的数字列表子集的问题与Subset Sum problem有关,尽管问题的正常陈述仅验证了这样一个子集的存在,你正在寻找所有这些子集的列表。
我认为大型集合不存在有效的解决方案,而且暴力解决方案呈指数级增长。