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

时间:2011-12-27 15:39:15

标签: ruby set data-partitioning powerset

我想以特定的方式为集合生成分区:我需要在生成这些分区的过程中过滤掉所有不是N大小的分区。一般的解决方案是“Generate all “unique” subsets of a set (not a 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]]

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


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


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

1 个答案:

答案 0 :(得分:0)

如果你已经链接了Frederick Cheung给出的partitions,请执行:

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