0

我被困在一个java项目上。我需要将玩家总数分成最佳组。我有 2 个常量可以帮助我做到这一点(MAX_POOL_SIZEMIN_POOL_SIZE)。

例如,如果玩家总数为 20,则最佳组大小将是 4x5 而不是 3x6+2(带有MAX_POOL_SIZE=6)。如果我有 9 名球员,最佳人数应该是 3x3 相同MAX_POOL_SIZE

这里最大的困难(无论如何对我来说)是当玩家总数是质数时。

4

1 回答 1

0

您实际上并没有告诉我们是什么使特定分组比另一个分组更好,因此您的问题无法真正按要求回答。但是,根据您给出的几个示例,我您想要以下内容:

  • 每个组的大小必须在给定的最小和最大大小之间。

  • 受限于上述限制,组的总数必须最小化。

  • 如果有多种有效的方法可以将玩家分成相同数量的组,那么最小组和最大组之间大小差异最小的组(或者可能是组大小的最小方差,或类似的东西)是最好的。

鉴于这些假设,这是一个应该有效的简单算法:

  1. n为玩家总数。

  2. m除以最大组大小,向上取整。我们将把玩家分成m组。

  3. s = n / m,向下舍入。令k = n - s × m(或者,等价地,让k = n mod m)。

  4. 将玩家分成ks +1个玩家和n - ks个玩家。

请注意,我在这里没有明确考虑最小组大小,但我认为这个规则永远不会违反它(假设有可能不违反它),因为它实际上旨在最大化最小组的大小团体。

于 2013-04-21T12:29:43.343 回答