在 Java 中查找幂集:一种有效的方法
集合的幂集包含原始集合的所有可能子集。对于大小为 n 的集合,幂集包含 2^n 个元素。在 Java 中,通常使用高效的算法来处理幂集的创建。
考虑以下示例:
Set
mySet.add(1);
mySet.add(2);
mySet.add(3);
Set
通过此设置,任务是设计 getPowerset 函数,以最佳时间复杂度生成 mySet 的幂集。
最佳时间复杂度: O (2^n)
如上所述,幂集包含 2^n 个元素。因此,生成所有这些元素本质上需要 O(2^n) 时间复杂度。
实现
以下代码提供了通用且高效的实现:
公共静态
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
System.out.println(s);
}
输出将为:
{}
{1}
{2}
{1, 2}
{3}
{1, 3}
{2, 3}
{1, 2, 3}
这演示了以 O(2^n) 时间复杂度创建指定集合的幂集。
以上是如何在Java中高效生成集合的幂集?的详细内容。更多信息请关注PHP中文网其他相关文章!