0

我遇到了一个从 arrayList 制作子集或 powersets 的问题,其中可能是 70 或 80 个或更多 String 元素,然后进一步处理这些子集(或 powersets)。例如,我有一些 arrayLists 具有不重复的字符串作为元素,如下所示(字符串实际上有多个字符):

List<String> list = new ArrayList<>();
list.add("a");
list.add("c");
list.add("g");
list.add("n");
list.add("f");
and so on...

然后我需要让子集(或 powersets)包含第一个元素。例如:{a,g}, {a,b}, {a,n,f}, {a,g,n,f}....

我已经完成了这项工作,方法是获取除第一个之外的列表元素的 powerset,然后将第一个元素与这些子集相加。但这适用于像 7 或 8 这样的少数元素,但如果列表增长则无法工作。是否需要像我为这份工作做的那样做一个 powerSet 算法?如果没有,那么我怎样才能得到预期的结果。我认为存在内存泄漏问题。因为我需要存储这些结果以进行进一步处理。

我按照以下链接的一些建议完成了这项工作:

在Java中获取一个集合
的幂集计算一组数字的所有子集
如何从arrayList对象生成所有可能的幂集(或子集)?

但是对于大型列表来说,这些需要花费很多时间并且最终无法获得结果,因为我的 netbeans IDE 被绞死了!

我需要一些与此方案相关的建议或示例代码。

谢谢!

4

1 回答 1

3

由于幂集的基数是2^n开始n集中元素的数量,我会说你不会计算一组 2^70 个元素。

我的建议是动态构建电源组的元素并随时处理它们,因此您不需要存储所有这些元素。

于 2012-06-25T11:34:12.913 回答