【发布时间】:2012-01-28 14:30:27
【问题描述】:
我想以特定方式为集合生成分区:我需要在生成这些分区的过程中过滤掉所有大小不是 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”,可能的分区数可能很大:44152005855084346 表示 23 个元素。我的数据是起始集中的 50-300 个元素,所以我肯定需要过滤掉大小不等于 N 的分区,然后再将它们保存在任何地方。
【问题讨论】:
-
您使用的是
Set对象还是数组? -
为什么
N=2生成包含三个元素的集合?您是否使用从零开始的计数?还是结果集中子集的数量? -
@Phrogz,N 是结果集中子集的数量。
-
如果你使用数组,你应该在问题中这样写。在问题中,你写的好像它们是集合一样,这会让人感到困惑。
-
你是说
S = [["a", "b", "c"], ["a", "b"], ["c"], ["d", "e", "f"], ["d", "f"], ["e"]]吗?
标签: ruby set data-partitioning powerset