【发布时间】:2016-03-31 12:17:02
【问题描述】:
我想计算字符串数组的幂集(将其视为一个集合)。当我超过 26 个元素时,它会抛出内存不足异常。
List<int> ff = new List<int>();
double length = Math.Pow(2, 29);
for (int i = 0; i < length; i++)
{
ff.Add(1);
}
如果您运行上面的代码,它将产生该异常。集合的大小可能会达到 1000。因此该集合的幂集大小将是 2^1000。
我该如何处理?
编辑:
我知道上面的代码不是幂集的函数。我只是在检查 c# 能够容纳多大的数组。
private static Dictionary<int, object> PowerSetB(string[] input)
{
int n = input.Length;
// Power set contains 2^N subsets.
int powerSetCount = 1 << n;
var ans = new Dictionary<int, object>();
for (int setMask = 0; setMask < powerSetCount; setMask++)
{
var s = new ArrayList();
for (int i = 0; i < n; i++)
{
// Checking whether i'th element of input collection should go to the current subset.
if ((setMask & (1 << i)) > 0)
s.Add(input[i]);
}
ans[setMask] = s;
}
return ans;
}
以上代码是我的幂集函数。
提前谢谢你。
【问题讨论】:
-
你需要一个能够容纳这么大数字的类型。
-
会是这样吗?
-
您不能在 64 位(即 2^64)地址空间中容纳 2^1000 个整数。您不能购买 2^64,即16 exbibytes 的内存。 1 GB 是 2^30。将数据存储到文件中。但是,您可以创建一个大缓冲区并在它填满时将其写出,而不是存储每个数字
-
什么是实际问题,即你想用
ff列表做什么?
标签: c# out-of-memory