根据权重挑选通道的简单算法

根据权重挑选通道的简单算法

当存在一批通道,根据权重,选择哪个通道去使用的简单算法。
利用随机数,数据区间,来获取通道。
通道权重越大,单位时间内使用该通道的概率会大一些。

//利用了一个权重区间的比例问题,抓取随机数的可能性,来体现权重思想
public static void main(String[] args) {
    //定义三个通道的权重,按随机数选拔使用哪个通道。
    //A 10  B 70  C 30
    //从数据库查询出list集合
    ChannelD A=new ChannelD("A",10);
    ChannelD B=new ChannelD("B",70);
    ChannelD C=new ChannelD("C",30);
    List channels=new ArrayList();
    channels.add(A);
    channels.add(B);
    channels.add(C);
    
    Map map=new HashMap();
    Integer sum=0;//记录权重之和
    for (ChannelD channel : channels) {
        sum+=channel.getWeight();
        map.put(sum,channel.getName());
    }
    
    Set set=map.keySet();
    
    for (Integer integer : set) {
        Random r = new Random(System.currentTimeMillis());//随机数
        //radom的取值区间为[0,110)
        // 10--A  80--B  110--C
        //A[0,10]占10个值的可能   B[10,80]占70个值的可能   C[80,110]占30个值的可能
        //set集合是无顺序的,遍历也是无顺序的。
        //余数是随机的。体现了权重思想。
        int radom = Math.abs(r.nextInt())%sum;//取余
        if(integer>radom){
            String channelDName=map.get(integer);
            System.out.println("被选拔出来的通道为:"+channelDName);
        }
    }
}

class ChannelD{
    private String name;//通道名字
    private Integer weight;//权重
    
    public ChannelD(String name,Integer weight){
        this.name=name;
        this.weight=weight;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }
    
    
    
}

你可能感兴趣的:(选举,选举)