我的游戏中有这么多人(约5万人)
这是一款PVP游戏。
每位玩家都有PVP得分和力量(得分用于第二次选择的等级和用力)
现在,让随机玩家选择对手。
规则是:
1.选择score±50 all players
2.在步骤1中的所有玩家中,选择我的power*80%~power*120%
并随机选择其中一个
我使用BucketPile
进行分数排序,每Bucket
分数增量为50,
(Bucket使用排序数组)
所以我可以快速找到所有score±50 players
,但对于电源选择,我
必须通过Bucket中的数组从一个到长度。
我想改进我的算法。
我不是在寻找代码,只是为了任何建议。
先谢谢:)
这是我的抽象算法
class Bucket{
Type *array;(a sorted array)
int length;
};
BucketPile bp;
bp.setScoreStep(50)
for(i=0; i<n;i++){
bp.insert(player)
}
for score 70 and power 100
the target score between 20~120
the target power between 80~120
Bucket b1,b2,b3 = bp.getBucketForScore(70)
b1 score is 1-50
b2 score is 51-100
b3 score is 101-150
Type targets[]
for(i=0;i<b1.length;i++){
if(b1.array[i].power>=80&&b1.array[i].power<=120){
push to an array targets
}
}
for b2,b3,random one player in the targets
答案 0 :(得分:2)
如果你有在他们面前,他们会有很多人。但是你在谈论在计算机上处理数字。这里50.000什么都没有。
排序只需要额外的时间而且没有必要,因为你想要一个得分为±50且你的力量为±20%的随机玩家。排序列表的随机播放器仍然是随机播放器。它没有任何区别。
迭代您的玩家列表,建立一个具有有效分数和权力的新玩家列表。然后选择该新列表的随机元素。
在我的普通笔记本电脑上,这需要不到5微秒。