php - 基于数字技能值创建 "teams"的算法

标签 php algorithm

我正在构建一个应用程序来帮助管理飞盘“帽子锦标赛”。这个想法是人们报名参加这个“帽子锦标赛”。当他们注册时,他们会向我们提供一个介于 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/

相关文章:

php - 如何使用 jQuery 通过 ajax 提交表单?

php - 在 jquery 中使用 #urls

PHP 不会在 Apache2 上解析 - CentOS 7

javascript - $.post 期间数据丢失

java - 在最短时间内找到不包括某些元素的数组的最大公约数(GCD)

c++ - 回溯N皇后算法

javascript - Firefox 是如何优化这个循环的?

algorithm - 最大化对由值界定的排序数组的总和做出贡献的因素数

python - 在按关注者数量排名的推文中找到主题的好算法?

php - 检查用户友谊