zoukankan      html  css  js  c++  java
  • 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 LiYing

  • 相关阅读:
    第二章 成员、变量和常量
    Roman To Integer
    Integer To Roman
    Container With Most Water
    搜狗2015前端工程师笔试题
    从网易与淘宝的font-size思考前端设计稿与工作流
    移动端web app自适应布局探索与总结
    CSS 常用代码
    利用 HTML 和 CSS 实现常见的布局
    CSS 尺寸单位
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12370945.html
Copyright © 2011-2022 走看看