码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-04-08 14:41:00      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

代码

技术分享
 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

 

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

标签:

原文地址:http://www.cnblogs.com/shangxiaofei/p/4402144.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!