我正在构建一个应用程序来帮助管理飞盘“帽子锦标赛”。这个想法是人们报名参加这个“帽子锦标赛”。当他们注册时,他们会向我们提供一个介于 1 到 6 之间的数值,代表他们的技能水平。
目前,我们正在收集庞大的注册人员名单,并尝试根据每个玩家的技能水平手动创建团队。我想,我可以通过创建一种尽可能平均分配团队的算法来自动执行此操作。
输入的唯一数据是“球员”数组和所需的“球队数量”。一般来说,我们会考虑 120 名选手和 8 支球队。
我目前的想法基本上是为每个团队提供一个连续的“分数”。此运行分数是所有指定玩家技能水平的总和。我遍历每个技能级别。在技能水平循环中,我会进行几轮选择。每轮根据球队的跑分重新计算选秀顺序。
这实际上工作得很好,但并不完美。例如,我的示例数据数组中有一个 5 pts 的范围。我可以非常轻松地手动交换球员,并使团队之间的差异不超过 1 分。问题是以编程方式完成的。
到目前为止,这是我的代码:http://pastebin.com/LAi42Brq
数据片段:
[2] => Array
(
[user__id] => 181
[user__first_name] => Stephen
[user__skill_level] => 5
)
[3] => Array
(
[user__id] => 182
[user__first_name] => Phil
[user__skill_level] => 6
)
谁能想到更好、更简单、更有效的方法来做到这一点?非常感谢!!
最佳答案
我认为你把事情搞得太复杂了。如果你有 T 队,请根据他们的技能水平对你的球员进行排序。选择顶尖的 T 球员作为球队的队长。然后,从队长 1 开始,每位队长依次选择他想要加入球队的球员。这可能是未选择玩家列表顶部的人。
这个算法已经在 Playground (而且,我敢说在加利福尼亚的飞盘场)工作了很长一段时间,并将产生与任何更复杂的伪统计方法一样“公平”的结果。
关于php - 基于数字技能值创建 "teams"的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9717278/