3

给定一组正整数,我想要那些整数的子集,其总和是超过阈值的最小总和。

4

3 回答 3

4

您的问题是子集和问题的变体,并且是 NP 完全的。

要了解原因,让我们假设您有一个可以解决您的问题的算法,并且它会产生一个带有 sum 的答案。然后你已经证明不存在等于 s - 1 的整数子集,即你有一个子集和问题的解决方案。

如果性能不是问题,您不妨列举所有可能的集合。如果性能是一个问题,您可以尝试在 Wikipedia 页面上查找有关如何优化此类算法的想法,例如使用动态编程。该页面上的算法实际上应该与子集和问题一样有效地解决您的问题。

于 2010-02-25T22:17:27.823 回答
0

“最小和”:有一个经典的“最大和”问题,在这里描述得很好:http ://wordaligned.org/articles/the-maximum-subsequence-problem

这只是一个“超过阈值”条件的微小变化——只是循环中的一个额外的 IF 语句。

于 2010-02-25T22:20:22.273 回答
0

我有同样的问题!如果所有 N 个整数都是正数并且以常数 C 为界,则存在一个解,时间和空间要求为 O(NC)。

Pisinger 发现了一种线性时间动态规划算法,可以找到阈值下的最大值,这就像你的问题的逆。所以,如果你从整数的总和中减去你想要的阈值,你可以使用这个新的阈值和 Pisinger 的算法来找到所有不在想要的集合中的数字。

根据所讨论的整数的大小,这可能可行,也可能不可行。

皮辛格的论文: http ://www.diku.dk/~pisinger/95-6.ps

代码: Pisinger 快速解决子集和算法

于 2013-06-20T20:22:31.560 回答