最佳比赛池大小

时间:2013-04-21 11:43:04

标签: java algorithm

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

例如,如果玩家总数为20,则最佳组大小为4x5而不是3x6 + 2(MAX_POOL_SIZE=6)。如果我有9个玩家,那么最佳数字应该是3x3且具有相同的MAX_POOL_SIZE

这里最大的困难(无论如何)是当球员总数是素数时。

1 个答案:

答案 0 :(得分:0)

你实际上并没有告诉我们是什么让一个特定的分组比另一个更好,所以你的问题无法按照要求回答。但是,基于你给出的几个例子,我将猜测你想要的东西如下:

  • 每组的大小必须介于给定的最小和最大尺寸之间。

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

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

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

  1. n 为玩家总数。

  2. m n 除以最大组大小,向上舍入。我们要将玩家分成 m 组。

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

  4. 将玩家分为 + 1名玩家的 k 组和 n - k s 球员。

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