Java 查找集合(PowerSet)的所有子集
我想找到给定集合的所有子集。 我得到了如下定义的字符串集:Java 查找集合(PowerSet)的所有子集,java,set,Java,Set,我想找到给定集合的所有子集。 我得到了如下定义的字符串集:HashSet L,我想在循环中使用它的所有子集:对于每个do something。 有没有一种简单且复杂度低的方法可以做到这一点?所以你想找到一个集合的所有非空子集,对于集合{ab},它是{a}{b}{ab}? 也许不是最快的解决方案,但您可以逐个检查集合中的所有元素,从第一个元素开始,确定所有非空集合->第一个元素,转到第二个元素,复制到目前为止存储的所有集合,并向所有复制的集合添加新元素和仅包含新元素的新集。现在,您有了以前元素的所
HashSet L
,我想在循环中使用它的所有子集:对于每个do something。
有没有一种简单且复杂度低的方法可以做到这一点?所以你想找到一个集合的所有非空子集,对于集合{ab},它是{a}{b}{ab}? 也许不是最快的解决方案,但您可以逐个检查集合中的所有元素,从第一个元素开始,确定所有非空集合->第一个元素,转到第二个元素,复制到目前为止存储的所有集合,并向所有复制的集合添加新元素和仅包含新元素的新集。现在,您有了以前元素的所有子集,再加上所有这些集合的集合,这些集合添加了额外的元素,再加上一个单独包含新元素的集合。然后可以对所有元素重复此操作,并应给出所有非空子集
Set<String> inputSet = new HashSet<String>();
inputSet.add("a");
inputSet.add("b");
inputSet.add("c");
inputSet.add("d");
List<Set<String>> subSets = new ArrayList<Set<String>>();
for(String addToSets:inputSet) {
List<Set<String>> newSets = new ArrayList<Set<String>>();
for(Set<String> curSet:subSets) {
Set<String> copyPlusNew = new HashSet<String>();
copyPlusNew.addAll(curSet);
copyPlusNew.add(addToSets);
newSets.add(copyPlusNew);
}
Set<String> newValSet = new HashSet<String>();
newValSet.add(addToSets);
newSets.add(newValSet);
subSets.addAll(newSets);
}
for(Set<String> set:subSets) {
for(String setEntry:set) {
System.out.print(setEntry + " ");
}
System.out.println();
}
好的,我使用了这个算法(L
是一组字符串):
powerSet=newhashset();
List mainList=新阵列列表(L);
buildPowerSet(mainList,mainList.size());
以及
private static void buildPowerSet(列表、整数计数)
{
电源集添加(列表);
对于(int i=0;i到目前为止你的家庭作业做得怎么样?@monkjack实际上这不是家庭作业。这只是工作……看看这里(这是谷歌搜索“java中的powerset”的第一个结果)->
d
d b
b
d c
d b c
b c
c
d a
d b a
b a
d c a
d b c a
b c a
c a
a
powerSet = new HashSet<List<String>>();
List<String> mainList = new ArrayList<String>(L);
buildPowerSet(mainList,mainList.size());
private static void buildPowerSet(List<String> list, int count)
{
powerSet.add(list);
for(int i=0; i<list.size(); i++)
{
List<String> temp = new ArrayList<String>(list);
temp.remove(i);
buildPowerSet(temp, temp.size());
}
}