一个选人算法

我的游戏中有很多人(约5万人)。

这是一款PVP游戏。

每个玩家都有一个PVP得分和实力(得分用于排名,实力用于第二次选择)。

现在,给一个随机玩家选择对手。

规则是:

1.选择在得分±50之间的所有玩家。

2.在所有在步骤1中得到的玩家中,选择自身实力的80%~120%的玩家中的任一玩家。

我用一个分桶来进行得分排序,每个得分跨度为50, (桶中用一个排序数组)

所以我能够快速找到所有得分±50的玩家,但是对于实力选择,

我必须从一个桶中的数组中从头到尾遍历。

我想要改进我的算法。

我不想要代码,只是想要一些建议。

首先感谢:)

这是我的简要算法

class Bucket{
    Type *array;(一个排序数组)
    int length;
};
BucketPile bp;
bp.setScoreStep(50)
for(i=0; i<n;i++){
  bp.insert(player)
}
对于得分为70,实力为100的玩家
目标得分在20~120之间
目标实力在80~120之间
Bucket b1,b2,b3 = bp.getBucketForScore(70)
b1得分在1-50之间
b2得分在51-100之间
b3得分在101-150之间
Type targets[]
for(i=0;i<b1.length;i++){
   if(b1.array[i].power>=80&&b1.array[i].power<=120){
          将其放入目标数组中
   }
}
从b2,b3中随机选一个目标数组中的玩家
点赞
用户2858170
用户2858170
50,000人是很多的,如果它们在你面前。但是你在谈论在计算机上分析数字。在这里,50,000什么都不是。

排序只会需要额外的时间,而且并不必要,因为你想要一个随机玩家,其得分在你的得分±50和你的能力±20%之间。一个排序列表中的随机玩家仍然是一个随机玩家。这不会有任何区别。

遍历你的玩家列表,构建一个新的玩家列表,其中包含具有有效分数和能力的玩家。然后在该新列表中选择一个随机元素。

在我的平均笔记本电脑上,这需要不到5毫秒。
2017-08-09 06:39:53