java 权重随机算法实现
import java.util.*;
/**
* 权重随机算法实现
* a b c d 对应权重范围 --- [0,1)、[1,3)、[3,6)、[6,10)
*/
public class RandomSF {
private static TreeMap<String, Integer> hm = new TreeMap<>();
public static void main(String[] args) throws Exception {
TreeMap<String, Integer> randomMap = new TreeMap<String, Integer>();
randomMap.put("a", 1);
randomMap.put("b", 2);
randomMap.put("c", 3);
randomMap.put("d", 4);
Integer tmp = 0;
ArrayList<ElementWeight> arr = new ArrayList<ElementWeight>();
for (Map.Entry<String, Integer> entry : randomMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
ElementWeight ew = new ElementWeight(key, tmp, tmp + value);
tmp += value;
arr.add(ew);
}
Random random = new Random();
for (int j = 0; j < 100000000; j++) {
int i = random.nextInt(tmp);
String randomStr = binarySearch(arr, i);
countRandomStr(randomStr);
}
for (ElementWeight ew:arr) {
System.out.println(ew.getElement()+"的权重范围:"+"["+ew.getLow()+","+ew.getHigt()+")");
}
System.out.println(hm);
}
// 二分查找实现
public static String binarySearch(ArrayList<ElementWeight> arr, int num) {
int high = arr.size();
int low = 0;
while (high >= low) {
int middle = (high + low) / 2;
ElementWeight ew = arr.get(middle);
if (num >= ew.getLow() && num < ew.getHigt()) {
return ew.getElement();
} else if (num >= ew.getHigt()) {
low = middle + 1;
} else if (num < ew.getLow()) {
high = middle - 1;
}
}
return null;
}
// 权重元素实体类
static class ElementWeight {
private String element;
private Integer low;
private Integer higt;
public ElementWeight(String element, Integer low, Integer higt) {
this.element = element;
this.low = low;
this.higt = higt;
}
public String getElement() {
return element;
}
public Integer getLow() {
return low;
}
public Integer getHigt() {
return higt;
}
}
// 统计随机string的个数
public static void countRandomStr(String str) {
Integer value = hm.get(str);
if (value == null) {
hm.put(str, 1);
} else {
hm.put(str, ++value);
}
}
}
java 权重随机算法实现的更多相关文章
- 权重随机算法的java实现
一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...
- java实现权重随机算法
权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...
- 权重随机算法Java实现
权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: ? ...
- Java实现 LeetCode 528 按权重随机选择(TreeMap)
528. 按权重随机选择 给定一个正整数数组 w ,其中 w[i] 代表位置 i 的权重,请写一个函数 pickIndex ,它可以随机地获取位置 i,选取位置 i 的概率与 w[i] 成正比. 说明 ...
- hdu 4712 Hamming Distance ( 随机算法混过了 )
Hamming Distance Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 链表
Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...
- Java数据结构和算法 - 简单排序
Q: 冒泡排序? A: 1) 比较相邻的元素.如果第一个比第二个大,就交换它们两个; 2) 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数; 3) 针 ...
- Java数据结构和算法 - 数组
Q: 数组的创建? A: Java中有两种数据类型,基本类型和对象类型,在许多编程语言中(甚至面向对象语言C++),数组也是基本类型.但在Java中把数组当做对象来看.因此在创建数组时,必须使用new ...
随机推荐
- 无需AutoCAD,用C#生成DWG文件
是一个类库:Teigha.NET for .DWG 利用它就可以在无需安装AutoCAD软件的情况下,生成.读取DWG文件,适合那些导入导出的场合. Teigha曾用名OpenDWG .DWGdire ...
- 用Matlab进行部分分式展开
[r p k]=residue[num,den] 例如H(s)=(2s3+5s2+3s+6)/(s3+6s2+11s+6) num=[2 5 3 6]; den=[1 6 11 6]; [r p k] ...
- P1258小车问题
传送 很多人质疑它是二分,但其实它就是二分(我会说我不会解方程吗) 据说有很多人没看懂题干在说些什么,那就不要管题干了.拿样例算一遍,我们看看样例的答案是怎么算出来的. 这是样例.看到这个数,我们很懵 ...
- java 1.8新特性(二) 关于 function 接口的使用
需求1:从user集合中 找出age=15的用户 传统方法 就不说了 举例明一下 java1.8 使用Predicate接口解决该需求: @FunctionalInterface public in ...
- 匿名内部类访问方法成员变量需要加final的原因及证明(转)
https://blog.csdn.net/wjw521wjw521/article/details/77333820 在java编程中,没用的类定义太多对系统来说也是一个负担,这时候我们可以通过定义 ...
- hadoop集群部署
1) 安装jdk 下载jdk-6u21-linux-i586.bin 然后修改/etc/profile: export JAVA_HOME=/usr/local/jdk export CLASSPAT ...
- [UE4]控制流
虽然官方文档说复杂的蓝图循环是会跨域多帧运行,但实际上测试下来,如果在循环体进行大量复杂的运算,不足以在一帧内完成时,游戏就会在当前帧卡住,直到循环结束为止. 一.Switch Switch可以在所有 ...
- Android 中Jackson的简单使用
第一步:下载Jackson的jar包http://pan.baidu.com/s/1qXHwtQ0 第二步:在gradle中导入jar包 第三步:创建ObjectMapper对象的单例 Jackson ...
- javascript-table出现滚动条表格自动对齐
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Delphi根据方法名调用方法
type TForm1 = class(TForm) public published procedure DoJsCall(str:string); ...