如何创建平衡的群体

时间:2014-06-25 20:03:42

标签: java algorithm balanced-groups

我有一个可以由彼此竞争的用户组玩的游戏。这些团体的数量非常少,不到10人。玩家人数是数千人。

当用户购买票证时,会为他分配一个组。目前,将一个组分配给一个玩家是随机完成的,但这可能会导致一组中有很多玩家而其他玩家很少。

我遇到的问题是如何分配组号,使组具有可比较的大小。

3 个答案:

答案 0 :(得分:2)

保持HashMap<Integer, List<Group>>,键入相关群组的大小。每个人都从零成员支架开始。在您拥有的最小非空尺寸括号的顶部弹出一个组,将新成员添加到其中,然后将其推到下一个最大尺寸。

You get O(n)创建它,O(1)推送和弹出一个组,如果你保持缓存,你可以让O(1)找到最小的组只要你当前的一个用完就打电话,找到下一个。

答案 1 :(得分:1)

这些组的某些子集目前具有最小尺寸。 (如果所有组都具有相同的大小,则可以是整组。)从这组最小尺寸组中,随机选择一个,并将新玩家添加到其中。

如果你从一开始就遵循这个策略,那么任何两个组的大小都不会超过1.这是可实现的最小差异大小差异。

答案 2 :(得分:1)

这样的事情怎么样:

GroupManager::AssignGroup(Player player)
{
   groupAssignments[groupIndex].add(player); 
   groupIndex++; 
   if ( groupIndex == GROUP_MAX )
      groupIndex == 0; 
}