zoukankan      html  css  js  c++  java
  • 根据权重挑选通道的简单算法

    当存在一批通道,根据权重,选择哪个通道去使用的简单算法。

    利用随机数,数据区间,来获取通道。

    通道权重越大,单位时间内使用该通道的概率会大一些。

    代码

     1 //利用了一个权重区间的比例问题,抓取随机数的可能性,来体现权重思想
     2 public static void main(String[] args) {
     3     //定义三个通道的权重,按随机数选拔使用哪个通道。
     4     //A 10  B 70  C 30
     5     //从数据库查询出list集合
     6     ChannelD A=new ChannelD("A",10);
     7     ChannelD B=new ChannelD("B",70);
     8     ChannelD C=new ChannelD("C",30);
     9     List<ChannelD> channels=new ArrayList<OrderChannelServiceImpl.ChannelD>();
    10     channels.add(A);
    11     channels.add(B);
    12     channels.add(C);
    13     
    14     Map<Integer,String> map=new HashMap<Integer, String>();
    15     Integer sum=0;//记录权重之和
    16     for (ChannelD channel : channels) {
    17         sum+=channel.getWeight();
    18         map.put(sum,channel.getName());
    19     }
    20     
    21     Set<Integer> set=map.keySet();
    22     
    23     for (Integer integer : set) {
    24         Random r = new Random(System.currentTimeMillis());//随机数
    25         //radom的取值区间为[0,110)
    26         // 10--A  80--B  110--C
    27         //A[0,10]占10个值的可能   B[10,80]占70个值的可能   C[80,110]占30个值的可能
    28         //set集合是无顺序的,遍历也是无顺序的。
    29         //余数是随机的。体现了权重思想。
    30         int radom = Math.abs(r.nextInt())%sum;//取余
    31         if(integer>radom){
    32             String channelDName=map.get(integer);
    33             System.out.println("被选拔出来的通道为:"+channelDName);
    34         }
    35     }
    36 }
    37 
    38 class ChannelD{
    39     private String name;//通道名字
    40     private Integer weight;//权重
    41     
    42     public ChannelD(String name,Integer weight){
    43         this.name=name;
    44         this.weight=weight;
    45     }
    46 
    47     public String getName() {
    48         return name;
    49     }
    50 
    51     public void setName(String name) {
    52         this.name = name;
    53     }
    54 
    55     public Integer getWeight() {
    56         return weight;
    57     }
    58 
    59     public void setWeight(Integer weight) {
    60         this.weight = weight;
    61     }
    62     
    63     
    64     
    65 }
    View Code
  • 相关阅读:
    管理者应有意识地提高以下八项能力
    weblogic调优
    嵌入式软件的基本测试方法
    LoadRunner Interview Questions
    测试类型概念解析
    要是下次他们放手机时戴了手套怎么办?
    外企面试智力题
    贴张我家养的狗狗们的照片!
    一样一句
    软件测试工程师面试英语
  • 原文地址:https://www.cnblogs.com/shangxiaofei/p/4402144.html
Copyright © 2011-2022 走看看