如何生成特定大小的集合分区?
我想以特定的方式为集合生成分区:我需要在生成这些分区的过程中过滤掉所有不是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}