在经典的子集和问题中,存在一个集合 S 和一个目标 t,目标是找到 S 的一个子集,其和为 t。该变体具有伪多项式时间解。
在子集和问题的一个变体中,目标是找到 S 中所有和为 t 的子集。此变体没有伪多项式时间解;请参阅此处的答案:使用动态规划在 Python 上从子集和问题中获取所有子集。其中一条评论解释说,在最坏的情况下,当你有 N 个零,并且所需的和也为零时,你将需要输出所有 2^n - 1 个子集——因此不可能比 O(2^n) 更优。
如果我们不区分两个具有相同值的项目(例如,如果两个集合由一些具有相同值的项目组成,则它们被视为同一集合)——输出总和为 t 的所有不同子集的运行时复杂度是多少?