我的Powerset功能是否耗尽内存?

时间:2016-11-18 04:11:18

标签: c# list biginteger powerset

我正在使用powerset来查找一组BigIntegers的所有可能总和(参考System.Numerics)。首先是一个辅助类来对功率集进行求和。

public static class Summer
{
     public static T Sum<T>(this IEnumerable<T> values, IAdder<T> adder)
     {
         T result = adder.Zero;
         foreach (var value in values)
         {
            result = adder.Add(result, value);
         }
         return result;
     }

     public interface IAdder<T>
     {
         T Zero { get; }

         T Add(T a, T b);
     }

     public class BigIntAdder : IAdder<BigInteger>
     {
         public static readonly BigIntAdder Instance = new BigIntAdder();

         public BigInteger Zero { get { return 0; } }

         public BigInteger Add(BigInteger a, BigInteger b) { return a + b; }
     }
 }

然后是获得电源设置的功能。

     public static IEnumerable<IEnumerable<T>> GetPowerSet<T>(List<T> list)
     {
        return from m in Enumerable.Range(0, 1 << list.Count)
               select
                   from i in Enumerable.Range(0, list.Count)
                   where (m & (1 << i)) != 0
                   select list[i];
     }

并调用powerset函数

var result = GetPowerSet(numbers).Select(x => Summer.Sum<BigInteger>(x,new Summer.BigIntAdder())).ToList();

其中number是任意数字列表。我的结果列表中最多只能获得65536个答案。内存不足吗?什么部分内存不足以及如何扩展其内存?

我看到它是2 ^ 16 http://www.thecomputercoach.net/html/65536.html。我认为像List和IEnumerable这样的数据类型达到了int.maxvalue(2 ^ 32)。为什么这只会到2 ^ 16?我怎么能延长这个?

0 个答案:

没有答案