我被困在一个java项目上。我需要将玩家总数分成最优组。我有两个常数来帮助我(MAX_POOL_SIZE
和MIN_POOL_SIZE
)。
例如,如果玩家总数为20,最佳团队规模将是4x5,而不是3x6+2(MAX_POOL_SIZE=6
)。如果我有9个玩家,最佳数字应该是3x3与相同的MAX_POOL_SIZE
。
这里最大的困难(至少对我来说)是当玩家总数是素数时。
您实际上并没有告诉我们是什么使一个特定的分组比另一个分组更好,所以您的问题不能真正回答。然而,根据您给出的几个例子,我将猜测您想要以下内容:
-
每组的尺寸必须在最小和最大尺寸之间
-
在满足上述约束条件的情况下,必须尽量减少分组总数
-
如果有多种有效的方法将玩家分成相同数量的组,那么最小和最大组之间的大小差异最小(或者可能是组大小的最小方差,或类似的东西)的方法是最好的。
考虑到这些假设,下面是一个简单的算法:
-
设n为玩家总数
-
令m等于n除以最大组大小,取整。我们将把玩家分成m组
-
让 s = n /,四舍五入。令k = n &减; s 报;(或者等价,让k = n mod )。
-
将玩家分成k组,s + 1个玩家,n & -; k s 组球员。
请注意,这里我没有明确地考虑到最小组大小,但是我认为这个规则永远不会违反它(假设可能不违反它),因为它实际上旨在最大化最小组的大小。