2010-06-25 61 views
3

所以我正在研究一个有趣的小程序,并跑过这个相当有趣的问题: 我有几套预定义集合的值。这些都是更大价值池的独特子集。每个数字子集的平均值应该尽可能接近。这并不需要是完美的,但应该足够接近以至于所有的套都相互“平衡”。平衡值集

例如:{1,2,3,6,9,10,15,23,27}全球平均:10.66 需要被分类成2台2和一组5

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

在实践中,这些值将介于60和200之间,而套将范围从大小为6〜20。

我已经尝试了几种不同的算法,并获得了不同程度的成功,但是我很想看看StackOverflow中的优秀人物在想什么。

我最好的, 扎克

+0

我认为,为了测试(或品尝)所提议的算法的好处,可能需要更详细地指定“每个数字子集的平均值应尽可能接近于彼此”的条件。 – 2010-06-25 21:14:57

回答

0

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

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

此外,在例子中,我不明白你怎么决定(肯定的),以使2组2和5之一。

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

  1. 排序数字递减顺序 顺序。 (较小的数字意外 减去所以后来处理它们)
  2. 决定你将有的套数。不太清楚 这个
  3. 通过一个经过一组元素之一,并把它们放到它有最低金额(圆 罗宾在同等资金的情况下)的子集

这将永远别放弃尽管你是最佳解决方案。

对于 1,2,3,6,9,10,15,23,27 颠倒:27,23,15,10,09,06,03,02,01

27 3 2 1 = 33

23 09 = 30

15 10 06 = 31

+0

我正在编写一个基于回合的策略空间游戏,我和我的朋友都在我们的业余时间编码。每个玩家开始于一个由6颗行星组成的星系,中央星系由(numPlayers)* 4颗行星组成。每个行星都有几个不同的随机生成的属性,但也有一个“价值”属性,用来衡量行星对玩家的近似值。当我产生各种星系时,我想要平衡游戏,以便没有玩家从优秀的星系开始。因此,试图使每个星系行星的平均值接近所有其他起始星系是至关重要的。 – 2010-06-28 13:25:26

+1

没问题,所以决定子集的数量。这是因为每个星系都有一个星系。 看起来像这个阿尔戈应该为你工作。 但我会建议,而不是决定给予每个玩家的价值的净值(您可以使这个值本身随机生成) 一旦完成每个属性生成一个随机配额从剩余的有价值的网络被分配。所以你得到随机属性,随机总值的星系给每个玩家。当然它对每个玩家都是同等价值的。 – 2010-06-28 14:33:52

+0

是。您的评论指出了一个更好的策略。我同意。 – 2010-06-28 17:44:06

2

这使我想起RubyQuiz#65,"Splitting the Loot"。主要的区别是,这个问题是寻找完全相等的分裂,而不是几乎相等。也许有些解决方案可以帮助你。

+0

“分裂Loot”是我正在尝试做的一个很好的例子。这与当前问题的另一个很大的区别是,一些宝石没有分配给海盗,例如,4个海盗,每个宝石将获得40个宝石中的6个,剩下16个宝石无人认领。 – 2010-06-28 19:09:24