小编kho*_*r J的帖子

获取集合中所有可能的分区

在Java中,我有一个集合,我想获取它们的并集构成主要集合的子集的所有可能组合。(划分集合),例如:

set={1,2,3}
Run Code Online (Sandbox Code Playgroud)

结果应该是:

{ {{1,2,3}} , {{1},{2,3}} , {{1,2},{3}} , {{1,3},{2}}, {{1},{2},{3}}}
Run Code Online (Sandbox Code Playgroud)

一组n元素的可能分区B(n)称为贝尔数

到目前为止的代码:

public static <T> Set<Set<T>> powerSet(Set<T> myset) {
        Set<Set<T>> pset = new HashSet<Set<T>>();
        if (myset.isEmpty()) {
            pset.add(new HashSet<T>());
            return pset;
        }
        List<T> list = new ArrayList<T>(myset);
        T head = list.get(0);
        Set<T> rest = new HashSet<T>(list.subList(1, list.size()));
        for (Set<T> set : powerSet(rest)) {
            Set<T> newSet = new HashSet<T>();
            newSet.add(head);
            newSet.addAll(set);
            pset.add(newSet);
            pset.add(set); 
        }

        return pset;
    }
Run Code Online (Sandbox Code Playgroud)

输出数组的幂集:

[[], [1], [2], [1, …
Run Code Online (Sandbox Code Playgroud)

java collections partitioning set

6
推荐指数
1
解决办法
915
查看次数

标签 统计

collections ×1

java ×1

partitioning ×1

set ×1