0

假设我有一个ArrayList字符串,如[a, b, c, d, ....]. 任何人都可以帮助我提供一个示例代码,我怎样才能得出一个包含此列表中所有可能的功率子集的结果,其中包括该列表中的特定字符串(单个和空子集除外)?

例如:如果我想a从示例列表中获取所有功率子集,那么输出将是:

[a,b], [a,c], [a,d], [a,b,c], [a,b,d], [a,c,d] without the empty and single subset([a])

同样,如果我想要,b那么输出将是:

[b,a], [b,c], [b,d], [b,a,c], [b,a,d], [b,c,d] without the empty and single subset([b])

由于示例列表中的所有项目都是字符串,因此当子集太丰富时,它们可能是内存问题。因为我需要一次将这些子集保存在内存中以保存一个字符串。就像在为athen 制作子集时一样,我需要这些子集进行进一步处理,然后删除它们,然后 forb等等。因此,我还需要有关此场景的优化解决方案的帮助?

我需要 Java 的帮助。因为我不太擅长Java,如果我犯了任何错误,请原谅我!

4

1 回答 1

1

如果总是只有一个特定元素,我建议从源集中删除目标元素,Sets.powerSet在剩余的集合上使用 Guava,然后将目标元素添加到返回的集合中。就像是...

Set<String> elems = Sets.newHashSet(set);
elems.remove(target);
Set<Set<String>> powerSet = Sets.powerSet(elems);
Collection<Set<String>> subsetsWithTarget = Collections2.transform(
    powerSet, new Function<Set<String>, Set<String>>() {
  public Set<String> apply(Set<String> setWithoutTarget) {
    return Sets.union(setWithoutTarget, Collections.singleton(target));
  }
});

(披露:我为 Guava 做出了贡献。)

于 2012-06-22T17:06:38.257 回答