Вычисление комбинаций подмножеств заданного размера, приводящих к множеству
Я хотел бы получить все возможные подмножества заданной длины, которые приводят к реальному набору. Так что для набора [a,b,c] и подмножеств 1 и 2 я бы хотел рассчитать:
[[a,b],[c]] , [[b,c],[a]] , [[a,c],[b]]
Я экспериментировал с кодом из Algorithm, чтобы вычислить набор мощности (все возможные подмножества) набора в R, но этот алгоритм будет генерировать все подмножества, а не только те, которые приводят к набору.
Я пытаюсь решить эту проблему для размера ~30. Я хочу рассчитать оценку каждой комбинации подмножеств и сохранить только лучшие, таким образом, я надеюсь, что память не составит труда. Выбор языка программирования - Python.
2 ответа
Как насчет создания комбинаций длины 2 и генерирования остатка путем вычисления разницы от исходного набора? Вот что я имею в виду:
from itertools import combinations
s = {'a', 'b', 'c'}
res = [(set(comb), s.difference(comb)) for comb in combinations(s, 2)]
Формирует:
[({'a', 'c'}, {'b'}), ({'b', 'c'}, {'a'}), ({'a', 'b'}, {'c'})]
Вы можете использовать следующий код для определения размера подмножества в списке:
list1=[[1,2,3],[1,3],[2,3,3,4]]
x= len(list1)
while(x>0):
print len(list1[x-1])
x=x-1
выход:
4
2
3