首页 > Java > java教程 > 如何在Java中高效生成集合的幂集?

如何在Java中高效生成集合的幂集?

Barbara Streisand
发布: 2024-11-30 22:07:12
原创
871 人浏览过

How to Efficiently Generate the Powerset of a Set in Java?

在 Java 中查找幂集:一种有效的方法

集合的幂集包含原始集合的所有可能子集。对于大小为 n 的集合,幂集包含 2^n 个元素。在 Java 中,通常使用高效的算法来处理幂集的创建。

考虑以下示例:

Set mySet = new HashSet();
mySet.add(1);
mySet.add(2);
mySet.add(3);
Set> ; powerSet = getPowerset(mySet);

通过此设置,任务是设计 getPowerset 函数,以最佳时间复杂度生成 mySet 的幂集。

最佳时间复杂度: O (2^n)

如上所述,幂集包含 2^n 个元素。因此,生成所有这些元素本质上需要 O(2^n) 时间复杂度。

实现

以下代码提供了通用且高效的实现:

公共静态;设置> powerSet(SetoriginalSet) {

Set<Set<T>> sets = new HashSet<>();
if (originalSet.isEmpty()) {
    sets.add(new HashSet<>());
    return sets;
}
List<T> list = new ArrayList<>(originalSet);
T head = list.get(0);
Set<T> rest = new HashSet<>(list.subList(1, list.size()));
for (Set<T> set : powerSet(rest)) {
    Set<T> newSet = new HashSet<>();
    newSet.add(head);
    newSet.addAll(set);
    sets.add(newSet);
    sets.add(set);
}
return sets;
登录后复制

}

示例

利用前面提供的示例:

设置 mySet = new HashSet();
mySet.add(1);
mySet.add(2);
mySet.add(3);
for (Set s :powerSet(mySet)) {

System.out.println(s);
登录后复制

}

输出将为:

{}
{1}
{2}
{1, 2}
{3}
{1, 3}
{2, 3}
{1, 2, 3}

这演示了以 O(2^n) 时间复杂度创建指定集合的​​幂集。

以上是如何在Java中高效生成集合的幂集?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板