How do I generate set partitions of a certain size

2019-08-01 15:05发布

I would like to generate partitions for a set in a specific way: I need to filter out all partitions which are not of size N in the process of generating these partitions. The general solution is "Generate all “unique” subsets of a set (not a powerset)".

For the set S with the following subsets:

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

and the following 'unique' elements:

a, b, c, d, e, f

the result of the function/method running with the argument N = 2 should be:

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

While the following partitions should be filtered out by the function/method:

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

The underlying data structure is not important and could be arrays, sets or whatever.


Reason: I need to filter some partitions out before I have the full set of all partitions, because the function/method which generates all partitions is rather computationally intensive.


According to "Generating the Partitions of a Set", the number of possible partitions can be huge: 44152005855084346 for 23 elements. My data is 50-300 elements in the starting set, so I definitely need to filter out partitions that have size not equal to N before I save them anywhere.

1条回答
Fickle 薄情
2楼-- · 2019-08-01 15:57

Once you have the partitions as given by Frederick Cheung that you linked, do:

partitions.select{|partition| partition.length == 2}
查看更多
登录 后发表回答