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

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

    简单实现代码如下:

    ?

    importjava.util.ArrayList;  
    importjava.util.List;  
    importjava.util.Random;  
       
    publicclass WeightRandom {  
        staticList<WeightCategory>  categorys = newArrayList<WeightCategory>();  
        privatestatic Random random = newRandom();  
           
        publicstatic void initData() {  
            WeightCategory wc1 = newWeightCategory("A",60); 
            WeightCategory wc2 = newWeightCategory("B",20); 
            WeightCategory wc3 = newWeightCategory("C",20); 
            categorys.add(wc1); 
            categorys.add(wc2); 
            categorys.add(wc3); 
        } 
       
        publicstatic 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();  
              } 
       
                 
        } 
       
    } 
       
    classWeightCategory {  
        privateString category;  
        privateInteger weight;  
           
       
        publicWeightCategory() {  
            super(); 
        } 
       
        publicWeightCategory(String category, Integer weight) {  
            super(); 
            this.setCategory(category); 
            this.setWeight(weight); 
        } 
       
       
        publicInteger getWeight() {  
            returnweight;  
        } 
       
        publicvoid setWeight(Integer weight) {  
            this.weight = weight;  
        } 
       
        publicString getCategory() {  
            returncategory;  
        } 
       
        publicvoid setCategory(String category) {  
            this.category = category;  
        } 
    }


  • 相关阅读:
    链接脚本之LMA VMA解释
    centos6.2+nginx-1.2.3+php-5.3.17安装脚本
    _itemFailedToPlayToEnd: { kind = 1; new = 2; old = 0; }
    mongodb 学习笔记 04 -- 游标、索引
    WordPress中文汉字username不能注冊怎么办?
    UVALive 6665 Dragonas Cruller
    eclipse开发c++时cout和endl报错
    iOS 四种延时的方法
    有一种设计风格叫RESTful
    MySQL分区表
  • 原文地址:https://www.cnblogs.com/yan456jie/p/5369444.html
Copyright © 2011-2022 走看看