【问题标题】:Divide the set into group of two将集合分成两组
【发布时间】:2013-02-19 12:17:39
【问题描述】:

Given 是一组元素。您必须将它们分成两组,以使单个组的元素总和之间的差异最小。

示例:

5
4 6 7 2 1

两组是:{4,6}{7,2,1}

我的方法:我只遇到过这个问题的蛮力解决方案,即使用位移技术生成集合的所有子集(2^n)

我正在寻找更好的解决方案。

【问题讨论】:

  • @H2CO3 这不起作用我可以给你一个反例:{1,2,2,2,7}
  • H2CO3,请将您的答案发布为答案,而不是 cmets。
  • @IvayloStrandjev 请证明,我看不出那个特殊情况有什么问题。
  • @H2CO3 您将把 1 和 7 放在同一组中作为最小和最大元素,而最佳解决方案实际上是 {1,2,2,2}{7} 相差 1

标签: arrays algorithm data-structures set


【解决方案1】:

我不会给你解决方案,而是给你两个提示:

  1. 计算所有元素的总和,而不是解决原始问题。表示此S。解决如下所述的问题 - 找到总和不超过S/2 的给定数字的子集。剩余的数字将形成另一个子集。

  2. 我上面描述的问题非常简单knapsack problem,所有元素的成本相同。同样,它可以使用dynamic programming 来解决(但在这种情况下,它会比用于经典背包问题的方法简单得多)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2020-04-11
    • 2012-01-01
    相关资源
    最近更新 更多