【发布时间】:2011-04-27 05:14:58
【问题描述】:
我有一个 2D 数组,并且想要生成一个 3D 数组,该数组将显示所有集合的最有效分组。示例:
[[1, 2],
[1, 2, 3, 4],
[3, 4],
[1, 2, 5]]
结果:
[[[1, 2]],
[[1, 2], [3, 4]],
[[3, 4]],
[[1, 2], [5]]]
我想我需要做一个嵌套循环并确定交集和差异来生成 3D 数组。但是,inject(&:&) 似乎可以更优雅地解决它,尽管我有点新注入并且不确定如何为这个问题实现它。这将在 Ruby 中完成。
感谢任何帮助。谢谢!
--更新--
通过有效分组,我的意思是通过找到最大的重复集来找到在结果中生成最少总集的最佳组合。
另一个例子:
[[1, 2, 3, 4],
[1, 4],
[1, 3, 4],
[1, 2, 3, 4, 5],
[2, 5]]
可能的结果(共8组):
[[[1, 3, 4], [2]],
[[1, 4]],
[[1, 4], [3]],
[[1, 3, 4], [2, 5]],
[[2, 5]]]
这是一个不错的结果,但第一组可以优化。
更好的结果(共 7 组):
[[[1, 2, 3, 4]],
[[1, 4]],
[[1, 4], [3]],
[[1, 2, 3, 4], [5]],
[[2, 5]]]
两个结果共包含 5 个不同的集合。较好结果的集合是 (1, 2, 3, 4), (1, 4), (3), (5), 和 (2, 5)。较好结果中的总组数为 7,而可能结果中为 8。我们想要最少的集合。
【问题讨论】:
-
我认为您需要详细说明“有效分组”。
-
为什么不 (((1, 2, 3, 4)), ((1, 4)), ((1, 3, 4)), ((1, 2, 3 , 4, 5)), ((2, 5))) 在你的第二个例子中是最好的吗?总共只有5套,所以不到7套。
标签: ruby multidimensional-array intersection