子集求和算法试图找到一个累加到指定值的子集,例如X = 30.但是如果我的set只包含单个数字,即1-9,那么示例集(已排序)可以是
S = {1,1,1,3,4,5,6,9,9,9,9}.
那么我可以运行一个总是在多项式时间运行的修改子集和吗?我考虑过而不是:
if lastNum > X
removing lastNum from S
我可以删除所有号码,i,其中i * num_i_in_set
> X.例如,在伪代码中:
count = 1
if num == previousNum
count++ // for 9, this will get up to 4
if num*count > X //
remove num // remove one of the digits, also removes any num > X
count = 0
...
如果我等于9,则有4个9,9个4,大于30,所以我可以删除9个中的一个并减小我的集合的大小。我无法看到这将如何提高传统子集和算法的性能。我想说我的时间复杂度会增加到O(n ^ 9),这似乎非常高。我是否过度思考这个问题,还是没有办法只改变单个数字的子集和?