java 按機率生成隨機數算法

最近項目有需求,一組數據按照機率分佈隨機取出一個,至關於抽獎,因此寫了一個算法。算法

 

 1     /**
 2  * 從一組數據按照機率分佈隨機取出一個  3  * @param nums  4  * @return 隨機生成的數據的id  5      */
 6     public static int getRandomNum(List<ModelNum> nums) {  7         List<Double> percent = new ArrayList<>();  8         int sumWeight = 0;  9 
10         //計算總權重
11         for (int i = 0; i < nums.size(); i++) { 12             sumWeight += nums.get(i).getWeight(); 13  } 14 
15         for (int i = 0; i < nums.size(); i++) { 16             //計算出每一個數據所佔百分比,保留兩位小數
17  percent.add(Double.parseDouble(stringFormat(Arith.div(String.valueOf(nums.get(i).getWeight()),String.valueOf(sumWeight))))); 18  } 19 
20         //按照每一個數據對應的機率分佈,生成100個數據
21         List<ModelNum> list = new ArrayList<>(); 22         for (int j = 0; j < percent.size(); j++) { 23             for (int i = 0; i < 100 * percent.get(j); i++) { 24  list.add(nums.get(j)); 25  } 26  } 27 
28         //產生0-99的整數值,也是list的索引
29         int index = (int) (Math.random() * 100); 30         //從生成的100個數據中,隨機取出
31         int rand = list.get(index).getId(); 32         return rand; 33     }

BY LiYingdom

相關文章
相關標籤/搜索