【问题标题】:How to create balanced groups如何创建平衡组
【发布时间】:2014-06-25 20:03:41
【问题描述】:

我有一个游戏,可以让多组用户互相竞争。这样的组的数量很少,不到10个。玩家的数量是数千。

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

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

【问题讨论】:

    标签: java algorithm balanced-groups


    【解决方案1】:

    保留HashMap<Integer, List<Group>>,重点关注相关组的规模。每个人都从零成员开始。从您拥有的最小非空大小括号顶部弹出一个组,将新成员添加到其中,然后将其推到下一个最大大小。

    You get O(n) 创建它,O(1) 推送和弹出一个组,如果你在调用之间保持缓存,你可以让O(1) 找到最小的组,只要找到下一个你现在的用完了。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        这样的事情怎么样:

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

        【讨论】:

          猜你喜欢
          • 2014-04-07
          • 2018-07-28
          • 1970-01-01
          • 2020-04-07
          • 1970-01-01
          • 2023-04-02
          • 2017-05-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多