如何生成特定大小的集合分区?

我想以特定的方式为集合生成分区:我需要在生成这些分区的过程中过滤掉所有不是N大小的分区。 一般的解决方案是“ 生成所有”唯一的“集合子集(不是幂集) ”。

对于具有以下子集的集合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]] 

底层数据结构并不重要,可能是数组,集合等等。


原因:我需要在拥有所有分区的完整集合之前过滤掉一些分区,因为生成所有分区的函数/方法计算量很大。


根据“ 生成集合的分区 ”,可能的分区数量可能很大:23个元素的44152005855084346。 我的数据在起始集中是50-300个元素,所以在将它们保存到任何地方之前我绝对需要过滤掉大小不等于N的分区。

一旦你有了你链接的Frederick Cheung给出的partitions ,你可以:

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