我试图解决子集求和问题(https://en.wikipedia.org/wiki/Subset_sum_problem或https://www.cs.cmu.edu/~ckingsf/class/02713-s13/lectures/lec15-subsetsum.pdf)。
但是,我有一些特殊情况。集合S由一千到一万个巨大浮点数(约10 ^ 8)组成,目标总和W也是非常巨大(约10 ^ 9)浮点数。
现在我想获得一个子集,其中元素sum与W一样接近。我想用动态编程来解决它。但是存储中等结果的表的大小太大而不能被接受。同时,内环(对于i = 1到W)也是不可接受的。
有没有有效的算法来解决这种子集问题?
答案 0 :(得分:0)
重要的是要注意,在这种情况下,大数字的作用非常小,因为双精度的极限大约是10 ^ 310(给出或采取几个数量级)。更大的问题是有2 ^ n个子集,因此任何大于30的n都太大了。在您链接的维基百科页面的末尾,有一个多项式时间近似值,这可能值得深入研究。
此外,dp解决方案需要固定数量的数值。考虑到你正在考虑浮动精度,这是不可行的。