数组区分逻辑

时间:2011-11-12 23:28:36

标签: algorithm

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)。做这个的最好方式是什么?计算机如何最快找到假/不正确的对?

另外,我欠那个能给出最好(和最好)答案的人喝啤酒。

1 个答案:

答案 0 :(得分:1)

  

现在,数组B总数为99. 60-99 = -39,这意味着我们必须找到数组B中所有数字组合等于39。

只有当您知道所有错误的数字都应为零时才会出现这种情况。

数组中的任何或所有数字都可能会导致错误,因为错误的总数为39。

话虽如此,找到添加到特定总和的数字列表子集的问题与Subset Sum problem有关,尽管问题的正常陈述仅验证了这样一个子集的存在,你正在寻找所有这些子集的列表。

我认为大型集合不存在有效的解决方案,而且暴力解决方案呈指数级增长。