我一直在解决Subset_sum_problem。
给定一组整数(S),需要计算总和等于给定目标(T)的非空子集。
示例:给定集合,S{4, 8, 10, 16, 20, 22} 目标,T = 52。
约束:集合 S 的元素 N 的数量限制为 8。因此,NP 时间解是可以接受的,因为 N 的上限很小。时间和空间的复杂性并不是真正的问题。
输出:
总和正好等于 T=52 的可能子集是:
{10、20、22}
{4、10、16、22}
Wiki 和其他一些页面中给出的解决方案试图检查是否存在这样的子集(是/否)。
如上例所述,计算所有可能的子集并没有真正的帮助。
此链接上的动态编程方法提供了单个这样的子集,但我需要所有这些子集。
一种明显的方法是使用蛮力计算所有 2^N 组合,但这将是我最后的手段。
我正在寻找一些程序示例(最好是 C++)或算法来计算这些带有插图/示例的子集?