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

  • 相关阅读:
    根据JumpServer官方文档搭建服务流程
    Dockerfile常用指令总结(转载)
    高可用集群-lvs
    k8s 基于Kubeadm部署高可用集群
    Docker部署GitLab
    文本处理三剑客-grep
    文件权限
    Docker监控平台
    Redis占用大量内存问题分析
    Annotation
  • 原文地址:https://www.cnblogs.com/widgetbox/p/12370945.html
Copyright © 2011-2022 走看看