如何将玩家划分为不同的组别?
假设我们有一个两人游戏,其中一名玩家总是获胜(不能平局)。
问题是:如果我们对n个玩家的技能一无所知,如何将他们分为k个组呢?每个级别应由相同数量的球员组成,最好的球员应在第一级别,最差的球员应在最后级别,依此类推。还有一个额外的限制 - 玩家不能玩超过 p 场游戏(p 大于 k)。
PS:这个问题的灵感来自星际争霸战网。
Lets say we have a two players game, where one player always wins (there can't be draw).
The question is: How to divide n players into k divisions if we don't know anything about their skills? Each division should consist of the same number of players, and the best players players should be in first division, worst players in last division, and so on. There is additional constraint - player can't play more than p games (p is greater than k).
PS: This question is inspired by starcraft battle.net.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你能做的最好的事情就是使用类似瑞士的初赛来解决它们,然后你就知道了他们的技能,这样你就可以将他们相应地划分为不同的组别。
我正在这样做并且效果很好。
The best thing you can do is use a swiss-like preliminary round to sort them out, and then you know their skills so you can divide them into divisions accordingly.
I'm doing that and it works great.
在对球员进行分组之前,你能对他们进行一些观察吗?如果没有,你没有信息,只能随机分配,经过几场比赛后调整他们所在的分区。如果我们对玩家一无所知,只需将玩家 n 分配给 n mod k 分区。
“一轮比赛结束后”(这可能是你提到的p比赛),每个部门内可能会有一个内部排名。由于每个组别(本质上)都是随机的,因此在一个(随机)组别中排名靠前的人可能会比那些排名较差的人属于“更高”的组别。因此,在第一轮之后,根据“到目前为止获胜”对每个玩家进行排序,然后将 n/k 首先分配给第一分区,然后将下一个 n/k 分配给第二分区,依此类推。
Can you do any observations about the players before you divide them into divisions? If not, you have no information and so can only do a random assignment, then adjust what division they're in after a number of games. If we know absolutely nothing about the players, just assign player n to division n mod k.
The "after one round of games" (this may be the p games you mention), there's probably going to be an internal ranking within each division. Since each division is (essentially) random, people who placed well in one (random) division will probably belong in a "higher" division than those who placed badly. So, after an initial round, sort each player according to "wins so far", then assign the n/k first to the first division, then next n/k to the second division and so on.