给定正整数的集合,我想要那些总和是超过阈值的最小总和的整数的子集。
答案 0 :(得分:4)
您的问题是Subset Sum Problem的变体,并且是NP完整的。
要了解原因,我们假设你有一个算法可以解决你的问题,并产生一个带和的答案。然后你已经证明没有等于s - 1的整数子集,即你有一个子集和问题的解决方案。
如果性能不是问题,您也可以枚举所有可能的集合。如果性能是一个问题,您可以尝试在维基百科页面上查看如何优化此类算法的想法,例如使用动态编程。该页面上的算法实际上应该像子集和问题一样有效地解决您的问题。
答案 1 :(得分:0)
“最小总和”:这是一个经典的“最大总和”问题,在此处有详细描述:http://wordaligned.org/articles/the-maximum-subsequence-problem
这只是一个微小的变化,具有“超过阈值”条件 - 只是循环中的额外IF语句。
答案 2 :(得分:0)
我遇到了同样的问题!如果所有N个整数都是正整数并且以常数C为界,则有一个解决方案,其时间和空间要求为O(NC)。
Pisinger发现了一种线性时间动态编程算法,可以在阈值下找到最大值,这与问题的倒数相反。因此,如果从整数的总和中减去所需的阈值,则可以使用Pisinger算法的新阈值来查找不在所需集合中的所有数字。
根据所讨论的整数的大小,这可能是也可能不可行。