我有一个包含约400个项目的数据集。使用递归方法,我计算选择大小为n的子集的不同组合的数量。例如,如果集合是{1,2,3,4,5}并且n = 3,那么我将从列表中选择从中挑选3个项目的所有不同组合。这导致IEnumerable<IEnumerable<T>>
的集合,其大小计算如下n! /(k!*(n - k)!)其中n =要选择的项目数,k是原始集合的大小。如你所见,这个数字非常大!
我希望能够对此数据集做什么是根据内部集合的总和选择组合,例如使用上面的集合,如果我只想选择内部集合的总和为6的结果,例如我期望得到包含1,2,3的集合,因为1 + 2 + 3 = 6。由于它的大小,迭代生成的集合不是一个可行的解决方案。
我一直在考虑尝试做某种快速排序,然后使用二进制搜索来选择可能的组合,但我不知道如何在代码中执行此操作,无论是否可行或是否可行解决此类问题的最佳方法。
对此有任何想法将不胜感激!