从一大组十进制数中找到具有给定总和的所有可能子集(包括负数)

时间:2019-08-02 05:46:54

标签: c# performance memory knapsack-problem

我在Excel文件中有大量的十进制数字(此测试为1000,但可能更多或更少)。在我的C#代码中,我首先将它们读入对象,这些对象将其值保存为浮点数和行号。

我的问题是背包问题。我想找到这些正负十进制数字的所有可能子集,这些子集的总和为给定的总和。我唯一要限制我的问题的事情是子集大小必须大于1(尽管我愿意实施一种解决方案,该解决方案通过手动猜测合理的方法来限制带有参数的子集的最大长度)。 / p>

我目前正在用C#编写代码,但是可以根据需要更改该方法。

我知道在内存方面,这个问题很难解决,至少在我想到的方法上。该方法是首先生成1000个条目中所有可能子集的列表(无论它们的总和),然后从该列表中找到所有具有正确总和的子集。尽管这非常耗时,但我认为1000个条目的可能组合总数为2 ^ 1000 -1,这是一个巨大的数字,我的计算机运行了数小时,直到最终尝试耗尽内存(System.OutOfMemoryException)为止生成这些组合。

我尝试了在SO上找到的多种解决方案,例如Find out which combinations of numbers in a set add up to a given total,以及仅使用Excel Solver加载项。但是,由于我拥有的价值如此之大,他们都不适合我的情况。


编辑:我想补充一点,数字没有特殊顺序,但是如果对我的情况有帮助,我将它们全部读入列表中的对象后,就可以对它们进行排序。

0 个答案:

没有答案
相关问题