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次

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