解释这个子集求和函数

时间:2015-12-14 20:04:08

标签: c# algorithm subset-sum

这段代码是解决子集求和问题变体的函数,但我真的不明白它是如何得到答案的。

该函数返回最接近该值的子集和,如果它与该值相同,那么它只返回该值,如果两个子集的总和等于该值,则返回更大的和。

这就是它

2*value+1

我理解标准内容,但我不知道循环中是什么。

我的主要问题是

  • 为什么需要一组apply个集合?

  • 循环中是怎么回事?

1 个答案:

答案 0 :(得分:3)

不知何故,你问题中的代码是实现此算法的这个(我的 1 answer的精确副本。我同意算法本身并不新鲜,但代码结构和变量都表示复制。如果您仔细阅读了问题(和答案),您可能会发现正在解决的问题是最接近的子集求和问题。这意味着如果不能构造这样的集合,则返回具有最小差异的集合。

现在因为这样的集合可以更大所需的总和,你需要最多 2 K + 1 集合 K 所需的数量,因为您的集合中最小的数字可能是 K-1 。比如说,给定的数字是{2,5,8,10},并且您希望构建6的子集,而不是最近的子集和是{2,5}。您需要足够的“集合”来存储可能更大的子集。

循环中发生的事情在链接的答案中解释。

1 谁写的答案是无关紧要的,但是更容易发现自己的工作。