子集和算法可以修改为一组单个数字吗?

时间:2015-10-01 19:35:25

标签: algorithm subset-sum

子集求和算法试图找到一个累加到指定值的子集,例如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),这似乎非常高。我是否过度思考这个问题,还是没有办法只改变单个数字的子集和?

0 个答案:

没有答案