Я кодирую с java, поэтому, если вы можете поделиться кодом с java, было бы неплохо:)
Допустим, у меня есть группа (1,2,3,4,5) и я хочу создать все подгруппы этой группы с максимальным размером данного натурального числа (например, 3).
Я уже нашел код, который возвращает все подгруппы, однако в моем проекте размер группы может достигать до 40, поэтому мне требуется слишком много времени для расчета и это очень проблематично c. Я также предпочитаю, чтобы это была функция, а не объект. Эффективность также важна, я не могу создать все возможные группы и затем отфильтровать их.
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;
}
Я нашел это здесь: Получение набора мощности набора в Java.