java按权重随机算法

 /**
     * @Description 方法描述:权重随机
     * @author leon 2018年1月26日 下午3:54:32
     * @CopyRight leon
     * @param map
     * @return
     */
    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();
            int weight = Integer.valueOf(map.get(weightStr));
            for (int i = 0; i <= weight; i++) {
                weights.add(weightStr);
            }
        }
        int idx = RandomUtil.getRandomNum(weights.size());
        return weights.get(idx);
    }


     public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();
        map.put("a", "5");
        map.put("b", "2");
        map.put("c", "2");
        map.put("d", "1");
        for (int v = 1; v <= 10; v++) {
            System.out.println("第" + v + "批次执行");
            int aT = 0;
            int bT = 0;
            int cT = 0;
            int dT = 0;
            for (int i = 0; i < 1000; i++) {
                String result = weightRandom(map);
                if (result.equals("a")) {
                    aT++;
                } else if (result.equals("b")) {
                    bT++;
                } else if (result.equals("c")) {
                    cT++;
                } else if (result.equals("d")) {
                    dT++;
                }
            }
            System.out.println("a出现" + aT + "次");
            System.out.println("b出现" + bT + "次");
            System.out.println("c出现" + cT + "次");
            System.out.println("d出现" + dT + "次");
        }
    }

main方法运行10批次,每批次执行1000次,达到预期效果:按权重随机

第1批次执行
a出现417次
b出现222次
c出现196次
d出现165次
第2批次执行
a出现416次
b出现231次
c出现221次
d出现132次
第3批次执行
a出现419次
b出现208次
c出现215次
d出现158次
第4批次执行
a出现432次
b出现199次
c出现220次
d出现149次
第5批次执行
a出现443次
b出现201次
c出现217次
d出现139次
第6批次执行
a出现401次
b出现234次
c出现220次
d出现145次
第7批次执行
a出现411次
b出现226次
c出现203次
d出现160次
第8批次执行
a出现448次
b出现206次
c出现210次
d出现136次
第9批次执行
a出现444次
b出现197次
c出现232次
d出现127次
第10批次执行
a出现437次
b出现212次
c出现216次
d出现135次

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章