【问题标题】:Find efficient maximum of groupings in all sets在所有集合中找到有效的最大分组
【发布时间】: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


【解决方案1】:

您绝对应该解释“最有效的分组”是什么意思。同时,如果您只需要将数组拆分为 2 元素块,只需组合 mapeach_slice

arr.map{|a| a.each_slice(2).to_a}
# => [[[1, 2]], [[1, 2], [3, 4]], [[3, 4]], [[1, 2], [5]]] 

【讨论】:

  • 我已更新问题以帮助澄清“最有效的分组”。它并不总是 2 元素块。
【解决方案2】:

首先,您应该弄清楚您想要做什么的伪代码算法(它不是现在让您退缩的 Ruby)。然后去使用这些红宝石原语来实现它

http://ruby-doc.org/core/classes/Enumerable.html

http://www.ruby-doc.org/core/classes/Array.html

http://corelib.rubyonrails.org/classes/Set.html

【讨论】:

    猜你喜欢
    • 2014-07-11
    • 2011-12-15
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多