Java 最佳锦标赛池大小

Java 最佳锦标赛池大小,java,algorithm,Java,Algorithm,我被困在一个java项目中。我需要将玩家的总数分成最佳的组。我有两个常量来帮助我完成这项工作(MAX\u POOL\u SIZE和MIN\u POOL\u SIZE) 例如,如果玩家总数为20,则最佳组大小为4x5,而不是3x6+2(使用MAX\u POOL\u size=6)。如果我有9名球员,最佳人数应为3x3,且最大池大小相同 这里最大的困难(无论如何对我来说)是当玩家总数是一个质数时。你还没有告诉我们是什么让一个特定的分组比另一个更好,所以你的问题不能真正回答。然而,根据你给出的几个例子

我被困在一个java项目中。我需要将玩家的总数分成最佳的组。我有两个常量来帮助我完成这项工作(
MAX\u POOL\u SIZE
MIN\u POOL\u SIZE

例如,如果玩家总数为20,则最佳组大小为4x5,而不是3x6+2(使用
MAX\u POOL\u size=6
)。如果我有9名球员,最佳人数应为3x3,且最大池大小相同


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

你还没有告诉我们是什么让一个特定的分组比另一个更好,所以你的问题不能真正回答。然而,根据你给出的几个例子,我猜你想要的东西如下:

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

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

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

考虑到这些假设,这里有一个简单的算法应该可以工作:

  • 让n为玩家总数

  • 设m除以最大组大小,向上取整。我们将把运动员分成m组

  • 设s=n/m,向下四舍五入。设k=n− s×m(或者,等价地,设k=n模m)

  • 将玩家分成k组,每组s+1名玩家和n名玩家− k组s玩家


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

    你对素数的处理方法是什么?您始终可以在xy+z中拆分组,其中x=楼层(sqrt(玩家总数)),y=楼层(玩家总数/x)z=玩家总数-xy。你的问题是什么?@user2302702请定义最佳群组。最佳群组大小必须由程序决定。用户只输入玩家总数。至于程序应该如何做,我们有点自由选择。这和我给出的一样详细。我的问题是有一个公式/算法可以帮助我做到这一点。好的,但你还没有真正告诉我们是什么让一个特定的群体规模比另一个更好。告诉我们,我们可能会帮助你找到最佳的团队规模,不管你对“最佳”的定义是什么。感谢Ilmari,这正是我要找的。很抱歉没有细节。顺便说一句,我刚刚意识到我的算法实际上与你的示例不匹配:对于9名玩家,最大团队规模为6,它建议将玩家分成两组,每组分别有4名和5名玩家,而不是像你的例子中那样分成三组,每组有3名玩家。我将让您决定错误是在我的算法中还是在您的示例中。