应用场景:
游戏里面随机抽奖 ,根据权重随机。
代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47/** * 权重随机(效率佳) * 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); }
测试:
复制代码
1public static void main(String[] args) {
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34Map 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复