Java 根据权重获取数据 基础 极简 准确率高
时间:2019-10-30
本文章向大家介绍Java 根据权重获取数据 基础 极简 准确率高,主要包括Java 根据权重获取数据 基础 极简 准确率高使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
package sl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class AssignRule {
/**
* user_1 2
* user_2 3
* user_3 4
* user_4 1
*
* target
*
* getRandom() return user_id
*
* 若 user_1 权重 1 则 1 list1 id1
* user_2 权重 2 则 2,3 list2 id2
* user_3 权重 3 则 4,5,6 list3 id3 map<id,List<>>
* user_4 权重 4 则 7,8,9,10 list4 id4
*
* random 8 => id4
* random 3 => id2
*/
public static int getRandomUserId( Map<Integer,Integer> rawMap){
Map<Integer, List<Integer>> idMapper=new HashMap<>();
int count=0;
for(int k:rawMap.keySet()){
List<Integer> numList=new ArrayList<>();
for(int i=0;i<rawMap.get(k);i++){
count++;
numList.add(count);
}
idMapper.put(k,numList);
}
int max=count,min=1;
int rand = (int) (Math.random()*(max)+min);
for(int k:idMapper.keySet()){
for(int v:idMapper.get(k)){
if(v==rand){
return k;
}
}
}
return -1;
}
public static void main(String[] args) {
/**
* key target
* val ratio
*/
Map<Integer,Integer> rawMap=new HashMap<>();
rawMap.put(1,1);
rawMap.put(2,2);
rawMap.put(3,3);
rawMap.put(4,4);
Map<Integer,Integer> map=new HashMap<>();
map.put(1,0);
map.put(2,0);
map.put(3,0);
map.put(4,0);
for(int i=0;i<100000;i++){
for(int k:map.keySet()){
if(k==getRandomUserId(rawMap)){
int v=map.get(k);
map.put(k,v+1);
}
}
}
for(int k:map.keySet()){
System.out.println(k+" = "+map.get(k));
}
}
}
原文地址:https://www.cnblogs.com/java-01/p/11765150.html
- 对自己的上网搜索记录进行爬虫是怎样一种体验
- HLS Lesson13-for循环优化:合并
- HLS Lesson12-for循环优化:基本性能指标
- HLS Lesson11-c/c++ testbench书写续2
- 【机器学习】实例详解机器学习如何解决问题
- 企业网站架构之Nginx+tomcat+memcached集群
- 企业级Docker Registry开源工具Harbor的介绍以及使用指南
- HLS Lesson8-基本操作
- Windows渗透测试工具:RedSnarf
- HLS Lesson7-复合数据类型
- matlab GUI基础3
- 【Python环境】《Python数据科学入门》试译 第一章 简介
- HLS Lesson20-实例分析
- WannaCry勒索病毒详细解读
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 算法集锦(10)| 自动驾驶、机器人 | 物品图像动态检测算法实现
- Hystrix仪表盘
- Centos7 Nginx的SSL证书安装
- 算法集锦(11)| 自动驾驶 | 基于HOG和SVM的车辆识别算法
- 剑指offer(一):找出数组中重复的数字
- 剑指offer(二):不修改数组找出重复的数字
- 漫画:什么是树状数组?
- poiAndEasyExcel学习(五)
- 两分钟真能搞懂桶排序
- SpringMVC文件上传下载
- 学弟不懂原码反码补码,气的我给女朋友讲了一夜
- 使用 HanLP 统计二元语法中的频次
- 算法集锦(13)|自然语言处理| Python代码的语义搜索引擎创建
- 特征锦囊:彻底了解一下WOE和IV
- Nginx专辑|05 -如何使用Nginx配置正向代理