1

我有 3 支球队,他们有 2 名球员、3 名球员和 7 名球员。有18名球员坐在场边等待分配。

每个玩家都有自己的技能水平,这意味着 1 级不会击败 10 级。

我想将球队平衡到每队 10 名球员。我想尽量让所有 3 支球队的技术水平相同。但是我不想删除已经在一个团队中的球员。

但我不确定我将如何做到这一点。我也不确定是否有一个简单的答案,或者计算成本是否很高。

技能水平是我已经拥有的数字。所有球队都有相同数量的球员。这意味着技能水平是唯一变化的数字。

一个例子是。第 1 队有 3 名球员,总水平为 4。第 2 队有 6 名球员,总水平为 8。第 3 队有 8 名球员,总水平为 9。

我有 13 名球员需要分配,所以每支球队有 10 名球员。我想尝试匹配总技能水平。

4

3 回答 3

1

在这里不可能给出一个可靠的答案,因为真正重要的是排名方案有多准确,以及它是否满足一些逻辑属性。

可加性:如果排名是完美的,那么它可能在某种意义上是可加的。我的想法来自桥牌,但任何可以让玩家排名并可以组队的任务都适用。因此,如果 10 级和 1 级玩家组队时,对于由 5 级和 6 级玩家组成的组合来说,这将是一个很好的匹配。(根据我的阅读,从对数意义上来说,桥梁排名可能更准确。)

协同作用:在一个团队中,一些人一起工作是否比其他人更好?同样,这是一个排名问题,因为您与一个人的排名可能比与其他人的排名更好。这里经常有协同作用。以避免桥牌为例,我想到的是高尔夫。把两个人放在一个高尔夫球场上,如果一个人是经常说话的人,而另一个人需要沉默来集中注意力,那么从逻辑上讲,他们会一起打得很差。

于 2013-03-05T03:25:08.370 回答
1

这对我来说就像您试图将(多)组数字(“技能水平”)划分为大小相等的块(“团队”),以便平均值(“总技能水平”)接近相等尽可能。

为了解决这个问题,我将首先计算平均技能水平,即技能水平的总和除以玩家数量,称为这个数字s。如果有m队伍总数,每个队伍都有k队员,给出队员总数m*k,那么每个队伍的目标技能水平是k*s

由于您的团队已经部分填满,因此您遇到的问题基于您的示例

我有 3 支球队,他们有 2 名球员、3 名球员和 7 名球员。有18名球员坐在场边等待分配。

如下:

  • A 队,以目前的技术水平a,需要 8 名球员,这样p1 + ... + p8 + a = 10*s
  • B 队,以目前的技术水平b,需要 7 名队员,这样q1 + ... + q7 + b = 10*s
  • C 队,以目前的技术水平c,需要 3 名队员,这样r1 + r2 + r3 + c = 10*s

对于蛮力解决方案,首先找到 C 队的球员,然后使用剩余的球员为 A 队和 B 队求解。

对于更聪明的解决方案,您需要意识到这实际上是一个子集和问题,并使用一种众所周知的算法来解决这个问题。我推荐链接文章中描述的动态编程解决方案。

于 2013-03-05T04:46:48.233 回答
0

一个实用的方法会给你一个很好的答案,就是将排名最高的球员分配给排名最低的球队,直到所有球员都被分配,你可以通过对球队球员的排名求和来计算球队的排名。

于 2013-03-05T01:55:45.333 回答