【发布时间】:2014-06-25 20:03:41
【问题描述】:
我有一个游戏,可以让多组用户互相竞争。这样的组的数量很少,不到10个。玩家的数量是数千。
当用户购买票时,会为他分配一个组。目前,将一个组分配给一个玩家是随机完成的,但这会导致一个组中有很多玩家而其他组中的玩家很少。
我遇到的问题是如何分配组编号以使组具有可比较的大小。
【问题讨论】:
标签: java algorithm balanced-groups
我有一个游戏,可以让多组用户互相竞争。这样的组的数量很少,不到10个。玩家的数量是数千。
当用户购买票时,会为他分配一个组。目前,将一个组分配给一个玩家是随机完成的,但这会导致一个组中有很多玩家而其他组中的玩家很少。
我遇到的问题是如何分配组编号以使组具有可比较的大小。
【问题讨论】:
标签: java algorithm balanced-groups
保留HashMap<Integer, List<Group>>,重点关注相关组的规模。每个人都从零成员开始。从您拥有的最小非空大小括号顶部弹出一个组,将新成员添加到其中,然后将其推到下一个最大大小。
You get O(n) 创建它,O(1) 推送和弹出一个组,如果你在调用之间保持缓存,你可以让O(1) 找到最小的组,只要找到下一个你现在的用完了。
【讨论】:
当前组的某些子集将具有最小大小。 (这可能是整组组,如果所有组都具有相同的大小。)从这组最小大小组中,随机选择一个,并将新玩家添加到其中。
如果您从一开始就遵循此策略,那么任何两个组的大小差异都不会超过 1。这是可实现的最坏情况下的最小大小差异。
【讨论】:
这样的事情怎么样:
GroupManager::AssignGroup(Player player)
{
groupAssignments[groupIndex].add(player);
groupIndex++;
if ( groupIndex == GROUP_MAX )
groupIndex == 0;
}
【讨论】: