zoukankan      html  css  js  c++  java
  • java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100;

    简单实现代码如下:

        import java.util.ArrayList;  
        import java.util.List;  
        import java.util.Random;  
          
        public class WeightRandom {  
            static List<WeightCategory>  categorys = new ArrayList<WeightCategory>();  
            private static Random random = new Random();  
              
            public static void initData() {  
                WeightCategory wc1 = new WeightCategory("A",60);  
                WeightCategory wc2 = new WeightCategory("B",20);  
                WeightCategory wc3 = new WeightCategory("C",20);  
                categorys.add(wc1);  
                categorys.add(wc2);  
                categorys.add(wc3);  
            }  
          
            public static void main(String[] args) {  
                  initData();  
                  Integer weightSum = 0;  
                  for (WeightCategory wc : categorys) {  
                      weightSum += wc.getWeight();  
                  }  
          
                  if (weightSum <= 0) {  
                   System.err.println("Error: weightSum=" + weightSum.toString());  
                   return;  
                  }  
                  Integer n = random.nextInt(weightSum); // n in [0, weightSum)  
                  Integer m = 0;  
                  for (WeightCategory wc : categorys) {  
                       if (m <= n && n < m + wc.getWeight()) {  
                         System.out.println("This Random Category is "+wc.getCategory());  
                         break;  
                       }  
                       m += wc.getWeight();  
                  }  
          
                    
            }  
          
        }  
          
        class WeightCategory {  
            private String category;  
            private Integer weight;  
              
          
            public WeightCategory() {  
                super();  
            }  
          
            public WeightCategory(String category, Integer weight) {  
                super();  
                this.setCategory(category);  
                this.setWeight(weight);  
            }  
          
          
            public Integer getWeight() {  
                return weight;  
            }  
          
            public void setWeight(Integer weight) {  
                this.weight = weight;  
            }  
          
            public String getCategory() {  
                return category;  
            }  
          
            public void setCategory(String category) {  
                this.category = category;  
            }  
        }  
  • 相关阅读:
    新概念第二册(1)--英语口语听力课1
    外企面试课程(一)---熟悉常见的缩略词
    公司 邮件 翻译 培训 长难句 结课
    workflow
    公司 邮件 翻译 培训 长难句 20
    公司 邮件 翻译 培训 长难句 19
    Engineering Management
    公司 邮件 翻译 培训 长难句 18
    公司 邮件 翻译 培训 长难句 17
    第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头
  • 原文地址:https://www.cnblogs.com/exmyth/p/7100738.html
Copyright © 2011-2022 走看看