计算最接近给定数字的数字总和

时间:2012-11-29 19:45:51

标签: c# arrays algorithm sum

我想知道在C#中执行此操作的最佳方法是什么: 我有一个数组让我们说20个数字,然后再增加一个额外的变量。 我想得到最接近给定变量的数字之和。 可以说,我有1.1,1.5,1.7,1.9,2.2,3.1,3.2,1,5,4.5,4.1。然后附加变量的值为5。 我想得到数组中最接近给定数字的一些数字的总和,一旦我得到那个数字,从列表中删除这些数字并将它们添加到一个新数组。 欢迎发表评论。 感谢

1 个答案:

答案 0 :(得分:4)

您正在描述 Subset Sum Problem 的优化问题。

问题是NP-Complete,因此没有已知的多项式解决方案。

然而,由于输入是相当小的规模 - 检查所有子集的指数解决方案是可行的,因为只有2 ^ 20~ = 1000000(实际上多一点,但足够接近估计运行时间)

伪代码应该是这样的:

getClosestSum(list,sum,number):
  if (list is empty):
      return sum
  candidate1 <- getClosest(list[1:],sum,number)
  candidate2 <- getClosest(list[1:],sum+list[0],number)
  if (abs(number-candidate1) < abs(number-candidate2)):
      return candidate1
  else:
      return candidate2