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