概述
package suanfa;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
/**
*
* @ClassName: WeightRandom
* @Description: 简单实现权重轮询
* @author shidebin
* @date 2019年4月28日
*
*/
public class WeightRandom {
//根据机器的权重保存相同数量的机器,以保证机器出现的概率
private static TreeMap<Integer, Integer> weightMap = new TreeMap<>();
public static void main(String[] args) {
pair.initWeightMap();
int rate[] =new int[4];
int j = 1000000;
for(int i = 1;i<=j;i++) {
//随机取一个值
Integer random = new Double(weightMap.lastKey() * Math.random()).intValue();
NavigableMap<Integer, Integer> tailMap = weightMap.tailMap(random, false);
if(!tailMap.isEmpty()) {
Integer value = tailMap.get(tailMap.firstKey());
rate[value-1]++;
}
}
for(int i = 0;i<=3;i++) {
System.out.println((i+1)+"的概率是:"+new BigDecimal(rate[i]+1).divide(new BigDecimal(j)));
}
}
/**
*
* @ClassName: pair
* @Description: 机器权重类,如机器1的权重是0.1,2是0.2,3是0.3,4是0.4
* @author shidebin
* @date 2019年4月28日
*
*/
public static class pair{
private Integer k;//机器
private double v;//权重
private static Map<Integer,Double> map;
static {
map
= new TreeMap<>();
map.put(1, 0.1);
map.put(2, 0.2);
map.put(3, 0.3);
map.put(4, 0.4);
}
/**
*
* @Title: initWeightMap
* @Description: 根据权重给weightMap加值,key为重复的次数,value为机器号
* @param
参数
* @author shidebin
* @date 2019年4月28日
* @return void
返回类型
* @throws
*/
public static void initWeightMap() {
int j = 1;
for(Integer key:map.keySet()) {
int repeat = new Double(map.get(key) * 10).intValue();
for(int i = 1;i<= repeat;i++) {
weightMap.put(j, key);
j++;
}
}
}
public static int size() {
return map.size();
}
}
}
最后
以上就是如意花生为你收集整理的权重随机算法的简单实现的全部内容,希望文章能够帮你解决权重随机算法的简单实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复