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 ...
随机推荐
- 【剑指offer】二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 思路:将原数字与1按位进行与操作. public class Solution { public int NumberOf1(int ...
- Ubuntu 14.10 下Hadoop FTP文件上传配置
最近老板提出一个需求,要用Hadoop机群管理生物数据,并且生物数据很多动辄几十G,几百G,所以需要将这些数据传到HDFS中,在此之前搭建了HUE用来图形化截面管理HDFS数据,但是有个问题,上面使用 ...
- Android开发之选项菜单(optinosMenu)
android一共有三种形式的菜单: 1.选项菜单(optinosMenu) 2.上下文菜单(ContextMenu) ...
- HashSet的自定义实现
package com.cy.collection; import java.util.HashMap; /** * HashSet自定义实现 * 是使用hashMap实现的 * 可以看一下HashS ...
- 学习笔记之DevOps
DevOps - Wikipedia https://en.wikipedia.org/wiki/DevOps DevOps (a clipped compound of "developm ...
- Zabbix 创建触发器
#1 配置 主机名10.0.0.33 触发器 点击创建触发器 #2 #4 点击添加 #触发器添加完毕
- android 5.0安装应用冲突问题
公司二款产品无法同时安装 为了查看原因 用adb命令安装((adb 命令要配置环境环境,path 盘符+adt-bundle-windows-x86-20140702\sdk\platform-too ...
- 聊天,发朋友圈可以不打字,但是表情怎么能少呢?那么如何用win10自带的微软拼音输入法打出表情呢?
Step1:将光标定位到你要输入的地方 Step2:将输入法切换为中文,win10是[Win+空格] Step3:打出想要的表情类型,例如开心,(切记输完后不要选择文字,就保持拼音状态),保持下图的样 ...
- Python:员工信息增删改查
一:需求 homework.txt文件中有如下格式的人员信息: 1,Jack Wang,28,13451024608,HR,2015‐01‐072,Rain Wang,21,13451054608,I ...
- Java项目部署服务器操作
有 2个工具需要下载,我使用的是 xshell(操作Linux命令),xftp5(操作文件传输) 需要知道服务器 ip ,账号,密码 xshell连接时,协议选择SSH连接,其他正常输入. xftp5 ...