gpt4 book ai didi

java - 是否有一种功能可以从一个主组中查找所有子组并过滤某些子组?

转载 作者:行者123 更新时间:2023-12-02 09:47:08 25 4
gpt4 key购买 nike

我正在使用 java 进行编码,因此如果您可以与 java 共享代码那就太好了:)

假设我有一个由 (1,2,3,4,5) 组成的组,并且我想创建该组的所有子组,其最大大小为给定自然数(例如 3)。

我已经找到了一个返回所有子组的代码,但是,在我的项目中,我的组大小可以达到 40,因此我需要花费太多时间来计算,并且非常有问题。我也更喜欢它是一个函数而不是一个对象。效率也很重要,我无法创建所有可能的组然后将它们过滤掉。

public static <T> Set<Set<T>> powerSet(Set<T> originalSet) {
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;
}

我在这里找到了它: Obtaining a powerset of a set in Java .

最佳答案

我看了你的代码并稍微调整了一下。

您现在输入内部集合的最大大小,它将是最大集合的大小。

    public static <T> Set<Set<T>> powerSet(Set<T> originalSet, int size) {
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, size)) {
if(set.size() <= size-1 ){
Set<T> newSet = new HashSet<>();
newSet.add(head);
newSet.addAll(set);
sets.add(newSet);
sets.add(set);
}

}

return sets;
}

关于java - 是否有一种功能可以从一个主组中查找所有子组并过滤某些子组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59854267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com