• 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;  
            }  
        }  
  • 相关阅读:
    JavaScript设计模式与开发实践
    ECMAScript 6入门
    时间管理微课程:值得永久收藏的25条时间管理技巧
    day14.生成器迭代器作业
    windows下创建MySQL定时备份与删除脚本
    day14.生成器进阶,推导式
    day13.装饰器进阶,迭代器
    day12.生成器;wraps初识
    day11.装饰器初识
    day10.函数升级
  • 原文地址:https://www.cnblogs.com/exmyth/p/7100738.html
Copyright © 2020-2023  润新知