Вычисление комбинаций подмножеств заданного размера, приводящих к множеству

Я хотел бы получить все возможные подмножества заданной длины, которые приводят к реальному набору. Так что для набора [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
Другие вопросы по тегам