基于权重的随机算法
游戏开发中经常会碰到这样的需求:从一系列道具中随机抽出一个发给玩家,由于道具的价值不一样,所以抽取的概率并不是平均的。后台会处理成高价值的东西很难得到,要实现这种效果,需要给每个道具指定一个权重。比如道具A的权重是99,道具B的权重是1,那么99%的概率会抽到道具A,这就是基于权重的随机算法。
实现按权重随机的最简单方法是线性扫描,大概过程是先计算出所有道具的权重总和S,然后调用随机函数得到一个区间在[0, S)的随机值,接着从头向后扫描道具列表,并不断从S减掉每个道具的权重值,当S小于某个道具的权重值时,这个道具就是抽中的那一个。