algorithm - 算法-尝试在拥有相等数量的玩家的同时平衡团队技能水平

标签 algorithm math balance

我有3支球队,他们有2名球员,3名球员和7名球员。
有18名球员坐在场边等待分配。
每个玩家都有自己的技能等级,这意味着一级不会打败十级。
我想让每个队都有10名队员我想让这三支球队在技术上尽可能的平等。但我不想把已经在一个队里的队员撤走。
但我不知道我该怎么做。
我也不确定是否有一个简单的答案,或者这将是昂贵的计算。
技能等级是我已经掌握的一个数字。
各队都有同等数量的队员。这意味着技能水平是唯一不同的数字。
一个例子是。
一队有3名队员,总技术水平为4级。
2队有6名队员,总技术水平为8级。
第三队有8名队员,总技术水平为9级。
我有13名队员需要分配,所以每个队有10名队员。
我想试着达到总的技能水平。

最佳答案

在我看来,这就像你试图将一组(多个)数字(“技能水平”)划分为大小相等的块(“团队”),以便平均值(“总技能水平”)尽可能接近相等。
要解决这个问题,我首先要计算平均技能水平,即技能水平除以玩家数量的总和,称这个数字为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队的问题。
对于更聪明的解决方案,您需要认识到这实际上是一个subset sum problem,并使用一个著名的算法来解决这个问题。我推荐链接文章中描述的动态编程解决方案。

关于algorithm - 算法-尝试在拥有相等数量的玩家的同时平衡团队技能水平,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15213195/

相关文章:

java - java中数组求和的优化

algorithm - 如何在在线绘图应用程序中为随机用户客户端唯一分配颜色/线条图案?

windows - 测试排序算法的程序

Python pandas 将绝对值加到一个系列中的正数/负数

Scala:确保大括号是平衡的

c++ - 检查二叉树是否平衡

java - 加到 n 的 1 + 2 的所有组合

Java Math.min/max 性能

c++ - 如何在 C++ 中将一点移向另一点?

java - 平衡鹅卵石问题