我是靠谱客的博主 舒适吐司,这篇文章主要介绍权重随机算法(java 版),现在分享给大家,希望可以做个参考。

应用场景:

游戏里面随机抽奖 ,根据权重随机。

代码如下:

/**
* 权重随机(效率佳)
* 200003|200004|200005|200005
4000|2000|1000|500
*
4000/7500
* map
*
*0----500---1000-------2000-------4000
*/
public static int random(Map<String ,String> map){
Set<Map.Entry<String, String>> entries = map.entrySet();
Random random = new Random();
int sum=0;
for (Map.Entry<String, String> entry : entries) {
String value = entry.getValue();
int valueInt = Integer.parseInt(value);
sum+=valueInt;
}
int randomInt = random.nextInt(sum)+1;
int sum_temp = 0;
for (Map.Entry<String, String> entry : entries) {
String value = entry.getValue();
int valueInt = Integer.parseInt(value);
sum_temp += valueInt;
if (randomInt <= sum_temp)
{
return Integer.parseInt(entry.getKey());
}
}
return -1;
}
// 按照权重随机(效率不太好)
public static String weightRandom(Map<String, String> map) {
Set<String> keySet = map.keySet();
List<String> weights = new ArrayList<String>();
for (Iterator<String> it = keySet.iterator(); it.hasNext();) {
String weightStr = it.next();//key
int weight = Integer.valueOf(map.get(weightStr));
for (int i = 0; i <= weight; i++) {
weights.add(weightStr);
}
}
Random random = new Random();
int idx = random.nextInt(weights.size());
return weights.get(idx);
}

测试:

public static void main(String[] args) {
Map map=new HashMap<String,String>();
//200003|200004|200005|200006
4000|2000|1000|500
map.put("200003","40");
map.put("200004","30");
map.put("200005","20");
map.put("200006","10");
int sum200003=0;
int sum200004=0;
int sum200005=0;
int sum200006=0;
for (int i = 0; i < 1000; i++) {
int random = random(map);
//
String randomStr = weightRandom(map);
//
int random = Integer.parseInt(randomStr);
if(random==200003){
sum200003++;
}
if(random==200004){
sum200004++;
}
if(random==200005){
sum200005++;
}
if(random==200006){
sum200006++;
}
}
System.out.println("sum200003:"+sum200003);
System.out.println("sum200004:"+sum200004);
System.out.println("sum200005:"+sum200005);
System.out.println("sum200006:"+sum200006);

}

最后

以上就是舒适吐司最近收集整理的关于权重随机算法(java 版)的全部内容,更多相关权重随机算法(java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(101)

评论列表共有 0 条评论

立即
投稿
返回
顶部