Как мне создать набор разделов определенного размера? - PullRequest
1 голос
/ 27 декабря 2011

Я хотел бы создать разделы для набора определенным образом: мне нужно отфильтровать все разделы, которые не имеют размер N, в процессе создания этих разделов. Общее решение: « Генерация всех« уникальных »подмножеств набора (не powerset) ».

Для набора S со следующими подмножествами:

[a,b,c]
[a,b]
[c]
[d,e,f]
[d,f]
[e]

и следующие «уникальные» элементы:

a, b, c, d, e, f

результат выполнения функции / метода с аргументом N = 2 должен быть:

[[a,b,c], [d,e,f]]

Хотя следующие разделы должны быть отфильтрованы функцией / методом:

[[a,b,c], [d,f], [e]]
[[a,b], [c], [d,e,f]]
[[a,b], [c], [d,f], [e]]

Базовая структура данных не важна и может быть массивами, наборами или чем-то еще.


Причина: мне нужно отфильтровать некоторые разделы до того, как у меня будет полный набор всех разделов, потому что функция / метод, который генерирует все разделы, требует больших вычислительных ресурсов.


Согласно « Генерация разделов набора », число возможных разделов может быть огромным: 44152005855084346 для 23 элементов. Мои данные содержат 50-300 элементов в начальном наборе, поэтому мне определенно необходимо отфильтровать разделы, размер которых не равен N, прежде чем я сохраню их в любом месте.

1 Ответ

0 голосов
/ 27 декабря 2011

Получив partitions от Фредерика Ченга, который вы связали, выполните:

partitions.select{|partition| partition.length == 2}
...