1

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

4

1 回答 1

0

一旦您partitions获得了 Frederick Cheung 给出的链接,请执行以下操作:

partitions.select{|partition| partition.length == 2}
于 2011-12-27T16:11:51.920 回答