IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]权重随机算法

    liuzhoulong发表于 2015-02-15 14:48:17
    love 0

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

    简单实现代码如下:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    
    public class WeightRandom {
    	static List  categorys = new ArrayList();
    	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;
    	}
    }




沪ICP备19023445号-2号
友情链接