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

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

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

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

代码

 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 }

时间: 2024-12-13 03:42:28

根据权重挑选通道的简单算法的相关文章

图的所有简单算法实现

包括邻接链表.有向无向图.带权图.增删顶点和边.查找.连通.DFS和BFS等.这只是一个最初版本,有些复杂的算法还没有实现. package structure; //图的邻接链表的节点 public class GraphListNode { private int vertex;//图的顶点 private int weight;//边的权重 private boolean visited;//是否访问过 //带权重图的节点 public GraphListNode(int vertex,i

权重结构的加权排序算法

权重结构的加权排序算法 开始算法之前,首先介绍一下向量中的排序方式,这里使用的是STL中的std::sort排序方式,具体使用的代码如下: //定义加权排序的结构 template<typename T> struct _sortStru { T _data1; T _data2; T _data3; T _data4; int nWeight[4]; _sortStru() { memset(this, 0, sizeof(_sortStru)); } }; bool _sort_sampl

JS 简单算法

//分别使用while/do-while/for循环实现10的阶乘(使用递归算法) //do-while循环实现10的阶乘 var i=1; var resule=1; do{ resule *= i; i++; }while(i0;i--){ if(a%i == 0 && b%i == 0){ console.log(i); break; } } //for循环求最小公倍数 for(var i=max;ib){ min = b; max = a; }else{ min = a; max

【线性表基础】基于线性表的简单算法【Java版】

本文描述了基于线性表的简单算法及其代码[Java实现] 1-1 删除单链表中所有重复元素 // Example 1-1 删除单链表中所有重复元素 private static void removeRepeat(LinkList L) { Node node = L.head.next; // 首结点 while (node != null) // 一重循环,遍历L中的每一个元素 { // Object data=p.data; Node p = node; // q结点的前驱 Node q =

根据权重随机选取指定条数记录的简单算法实现(C#)

一.应用场景: 有时我们需要从一些列数据中根据权重随机选取指定条数记录出来,这里需要权重.随机,我们根据权重越大的,出现概率越大.例如广告系统:可根据客户支付金额大小来调控客户们的广告出现概率,客户支付金额越大,其广告出现频率越频繁,例如:加入有10条广告,然后每条广告都有一个权重,我们每次要根据权重选取5条广告出来进行显示.有了需求,我们就进行解决,本文章就是利用一种简单的算法来实现根据权重来随机选取. 二.简单算法的实现: 根据我们需求,上网找了不少资料,都没有找到一种比较适合的方案,就自己

暗通道去雾算法的python实现

何凯明博士的去雾文章和算法实现已经漫天飞了,我今天也就不啰里啰唆,直接给出自己python实现的完整版本,全部才60多行代码,简单易懂,并有简要注释,去雾效果也很不错. 在这个python版本中,计算量最大的就是最小值滤波,纯python写的,慢,可以进一步使用C优化,其他部分都是使用numpy和opencv的现成东东,效率还行. import cv2 import numpy as np def zmMinFilterGray(src, r=7): '''最小值滤波,r是滤波器半径''' if

一个简单算法题引发的思考&lt;DNA sorting&gt;(about cin/template/new etc)

首先是昨天在北京大学oj网上看到一个简单的算法题目,虽然简单,但是如何完成一段高效.简洁.让人容易看懂的代码对于我这个基础不好,刚刚进入计算机行业的小白来说还是有意义的.而且在写代码的过程中,会发现自己平时学习中不会发现的问题,所以想写下这个博客,主要是便于自己对算法的理解. 来,上题. DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 91599   Accepted: 36781 Descript

[广告]根据广告权重展示广告次数的算法

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } a { color: #4183C4; text-decoration: none; } a.absent { color: #cc0000; } a.anchor { display: block; padding-left: 30px; margin-left: -30px; cursor: poin

简单算法学习之快速排序详解

转自:http://developer.51cto.com/art/201403/430986.htm 讲的特别浅显易懂,特别感谢博主:啊哈磊 高快省的排序算法 有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢. 假设我们现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序.首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了).为了方便,就让第一个数6作为