平衡价值观

时间:2010-06-25 21:06:10

标签: algorithm

所以我正在开发一个有趣的小程序,并遇到了这个相当有趣的问题: 我有几组预定义的设置大小的值。这些都是更大的值池的唯一子集。每个数字子集的平均值应尽可能地相互接近。这不需要是完美的,但应该足够接近以使所有集合彼此“平衡”。

ex:{1,2,3,6,9,10,15,23,27}全球平均值:10.66 需要分为2组2组和1组5个

可接受的结果: {1,27} {2,23} {3,6,9,10}

在实践中,这些值的范围在60到200之间,而这些值的范围从6到20不等。

我尝试了几种不同的算法,取得了不同程度的成功,但我很想知道StackOverflow的优秀人才。

我最好的, 扎克

2 个答案:

答案 0 :(得分:2)

这让我想起了RubyQuiz#65,"Splitting the Loot"。主要的区别在于,这个问题正在寻找完全相同的分裂,而不是几乎相等。也许其中一些解决方案可以帮到你。

答案 1 :(得分:0)

这听起来很有趣。我很想知道这是什么的实际应用。

可以肯定的是,猜测你的意思是非相交的子集和子集的总和大致相等(而不是平均值)

另外,在这个例子中我无法理解你是如何决定(肯定的)制作2组2和5中的一组。

我可以想到一个贪婪的次优解决方案。

  1. 按数字降序排序 订购。 (较小的数字惊喜 以后更少处理它们)
  2. 决定您将拥有的套数。不太确定 关于这个
  3. 逐个浏览设置元素并将它们放入子集中 总和最低(圆形 知道相同数量的罗宾)
  4. 但这并不总能为您提供最佳解决方案。

    有关 1,2,3,6,9,10,15,23,27 逆转:27,23,15,10,30,06,03,02,01

    27 3 2 1 = 33

    23 09 = 30

    15 10 06 = 31