按照权重选择的java算法
来源:互联网 发布:淘宝助理上传宝贝显示0 编辑:程序博客网 时间:2024/05/18 03:55
项目中用到此业务,所以自己先写一个,使用的核心是随机函数,Random.nextInt(n),代码如下:
算法实际没有限制权重值,但是最好限制在0-10的整数值之间,否则太大的数据范围意义也不大。
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;
public class testMain {
public static void main(String[] args) {
HashMap hashCh=new HashMap();
hashCh.put("ChoiName", "王一");
hashCh.put("Weight", 0);
HashMap hashCh2=new HashMap();
hashCh2.put("ChoiName", "张二");
hashCh2.put("Weight", 1);
HashMap hashCh3=new HashMap();
hashCh3.put("ChoiName", "李三");
hashCh3.put("Weight", 5);
HashMap hashCh4=new HashMap();
hashCh4.put("ChoiName", "延四");
hashCh4.put("Weight", 2);
ArrayList choiceList=new ArrayList();
choiceList.add(hashCh);
choiceList.add(hashCh2);
choiceList.add(hashCh3);
choiceList.add(hashCh4);
for(int i=0;i<40;i++){
System.out.println(weightChoice(choiceList));
}
}
/**
* 将选择项和权重,按随机方法选出,输入数据结构:ChoiName 选择项名称,Weight权重(整数值,0-10,0表示不选择。10表示最高权重)
* @param listChoice
* @return
*/
public static String weightChoice(ArrayList<HashMap> listChoice){
ArrayList<HashMap<String, Comparable>> choiceList=new ArrayList<HashMap<String, Comparable>>(); //选择器列表,剔除不需要选择的选项,权重为0,不进选择列表。转变权重为上下限值。
Integer minR=0,maxR=-1; //上下限
for(HashMap temp:listChoice){
String ChoiName=(String )temp.get("ChoiName");
Integer weight=(Integer) temp.get("Weight");
if(weight==0) continue;
minR=maxR+1;
maxR=minR+weight-1;
HashMap hashCh=new HashMap();
hashCh.put("ChoiName", ChoiName);
hashCh.put("minR", minR); //下限
hashCh.put("maxR", maxR); //上限
choiceList.add(hashCh);
}
//System.out.println(JSON.toJSON(choiceList));
Random random = new Random();
int index =random.nextInt(maxR+1); //产生大于等于0,小于maxR+1的整数
//System.out.println(index);
for(HashMap temp:choiceList){
Integer mini=(Integer)temp.get("minR");
Integer maxi=(Integer)temp.get("maxR");
if( mini<=index && index<=maxi) {
String choName=(String)temp.get("ChoiName");
//System.out.println(choName);
return choName;
}
}
return "";
}
}
============================================================
算法可能输出结果:
李三
李三
李三
李三
延四
延四
延四
李三
张二
李三
李三
李三
李三
李三
延四
张二
延四
李三
李三
李三
张二
李三
张二
张二
延四
延四
张二
李三
张二
延四
延四
李三
李三
李三
延四
李三
张二
张二
李三
李三
- 按照权重选择的java算法
- 权重选择算法Java实现
- LMS算法中权重的选择
- 按权重选取目标的java算法
- 一种按权重分配的Java算法
- Java权重分配的实现算法
- 权重随机算法的java实现
- java 权重随机数算法
- LinearLayout权重的算法
- 依赖权重的随机选择
- 权重随机算法Java实现
- java实现权重随机算法
- 带权重的随机算法
- 带权重的随机算法
- 文本分类入门:特征选择算法之开方检验、信息增益;特征选择与特征权重计算的区别
- 带权重(>0)的随机选择
- 了解css选择符的权重问题
- 按照权重随机抽取元素
- linux命令
- 2017年最佳编程语言学习
- activiti
- ping 原理与ICMP协议
- 小总结git
- 按照权重选择的java算法
- (17)mapreduce 提交任务两种方式
- 使用visio 2010绘制组织结构图
- [leetcode]: 455. Assign Cookies
- 4815: [Cqoi2017]小Q的表格
- poj1163——The Triangle(简单dp)
- Java-try_catch_finally中带有return语句的执行顺序
- Android 面试知识库
- VR/AR动手玩(三):Android使用jni调用opencv