如何从列表中快速有效地创建子集或powerSet?

时间:2012-06-25 11:30:40

标签: java memory-leaks arraylist subset powerset

我正在经历一个从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}....

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

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

Obtaining a powerset of a set in Java
  Calculating all of the subsets of a set of numbers
  how to make all possible power set(or subset) from arrayList objects?

但那些大型列表需要花费很多时间才能获得结果,因为我的netbeans IDE被绞死了!

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

谢谢!

1 个答案:

答案 0 :(得分:3)

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

我的建议是动态建立动力装置的元素并随时处理它们,所以你不需要存储所有这些元素。