JAVA权重抽取

原创 2016年05月31日 20:11:08

一.在项目中要实现按照设计好的权重进行数据的不固定推送,这里贴出已经应用在项目中的算法。


二.代码
1.

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import com.wiimedia.mryl.userportrait.bean.CalcWeightBean;


public class CalcWeightUtil {
        public  Map<String, Integer> getCalc(List<CalcWeightBean> beans){
            Map<String, Integer> showMap = null;
            Double sum = getSum(beans);
            Double random = 0.0;
            CalcWeightBean kw = null;
              showMap = new LinkedHashMap<String, Integer>();
              for(int i = 0; i < 7; i++) {
                random = getRandom(sum);
                 CalcWeightBean cw = getKW(beans, random);
                if(showMap.containsKey(cw.getTag())) {
                  showMap.put(cw.getTag(), showMap.get(cw.getTag()) + 1);
                } else {
                  showMap.put(cw.getTag(),1);
                }
              }
              return showMap;
            }

        public  CalcWeightBean getKW(List<CalcWeightBean> nodes, Double rd) {
            CalcWeightBean ret = null;
            int curWt = 0;
            for(CalcWeightBean n : nodes){
              curWt += n.getWeight();
              if(curWt >= rd) {
                ret = n;
                break;
              }
            }
            return ret;
          }
        public static Double getSum(List<CalcWeightBean> nodes) {
            Double sum = 0.0;
            for(CalcWeightBean n : nodes)
              sum += n.getWeight();
            return sum;
          }
          public static Double getRandom(Double seed) {
            return (double)Math.round(Math.random() * seed);
          }


}

2.

import java.util.Comparator;

/**
 * 
 * @author Songjia
 * 
 * @作用: 进行权重排序的Javabean
 * 
 * @时间:2016-05-06 19:55
 * 
 */
public class CalcWeightBean implements Comparator{
    private double weight;
    private String tag;
    public CalcWeightBean() {
        super();
    }
    public CalcWeightBean(double weight, String tag) {
        super();
        this.weight = weight;
        this.tag = tag;
    }
    public double getWeight() {
        return weight;
    }
    public void setWeight(double weight) {
        this.weight = weight;
    }
    public String getTag() {
        return tag;
    }
    public void setTag(String tag) {
        this.tag = tag;
    }
    public int compare(Object o1, Object o2) {
        CalcWeightBean n1 = (CalcWeightBean)o1;
        CalcWeightBean n2 = (CalcWeightBean)o2;
            if(n1.weight > n2.weight)
              return 1;
            else
              return 0;

    }

}

3.测试类

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import com.wiimedia.mryl.userportrait.bean.CalcWeightBean;
import com.wiimedia.mryl.utils.CalcWeightUtil;

public class Weight {
    public static void main(String[] args) {
        CalcWeightUtil calcWeightUtil = new CalcWeightUtil();
        CalcWeightBean bean1= new CalcWeightBean(31.25,"鼻炎");
        CalcWeightBean bean2= new CalcWeightBean(18.75,"高血压");
        CalcWeightBean bean3= new CalcWeightBean(18.75,"癌症");
        CalcWeightBean bean4= new CalcWeightBean(31.25,"糖尿病");
        CalcWeightBean bean5= new CalcWeightBean(31.25,"关节炎");
        List<CalcWeightBean> beans = new ArrayList<CalcWeightBean>();
        beans.add(bean1);
        beans.add(bean2);
        beans.add(bean3);
        beans.add(bean4);
        beans.add(bean5);

        Map<String, Integer> calc = calcWeightUtil.getCalc(beans);
        System.out.println(calc);
         for (Map.Entry<String, Integer> entry : calc.entrySet()) {
               System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
              }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

java版根据权重抽奖算法

根据权重进行抽取的算法应用比较广泛,其中抽奖便是主要用途之一。正好这几天也正在进行抽奖模块的开发,整个抽奖模块涉及到的地方大概有三处,分别是后台进行奖品的添加(同时设置权重和数量),前台根据后台配置生...
  • a1314517love
  • a1314517love
  • 2015年08月04日 15:19
  • 7759

[Python]基于权重的随机数2种实现方式

代码: https://gist.github.com/orangle/d83bec8984d0b4293710 参考:
  • lzz957748332
  • lzz957748332
  • 2014年10月11日 17:48
  • 3344

C# 权重控制随机抽取率

增加、减少随机抽中几率——此算法可用于题库随机抽题、赌博机控制出彩率,甚至俄罗斯方块等游戏,有广泛的用途!也希望能帮得到你! 强调      在随机的基础上增控制抽中几率,注意随机性!! ...
  • ArmyFai
  • ArmyFai
  • 2013年01月14日 15:48
  • 951

权重随机抽取

[1].[代码] [Java]代码 跳至 [1]?123456789101112131415161718192021222324252627282930313233343536373839404142...
  • yhc13429826359
  • yhc13429826359
  • 2014年07月15日 16:28
  • 885

Java实现根据权重优先返回(速度较快)

下面的实现比我最初写的快了四倍多哟。 实现思路: 我们知道,在10以内的整数里,0~3出现的概率是0.3,3~6出现的概率是0.3,6~7出现的概率是0.1,7~9出现的概率是0.2,9~10出现...
  • zcl_love_wx
  • zcl_love_wx
  • 2016年08月12日 10:58
  • 2849

一种按权重分配的Java算法

现有一需求,就是假设有若干任务执行者执行一定数目的任务,并且任务的分配需按一定的权重比来进行。任务的分配是随机的,分配完毕后需要为每条任务打上执行者的标签(即被谁执行。)分配算法不难,但是用java写...
  • qq_18875541
  • qq_18875541
  • 2017年04月06日 16:12
  • 2785

按照权重选择的java算法

项目中用到此业务,所以自己先写一个,使用的核心是随机函数,Random.nextInt(n),代码如下: import java.util.ArrayList; import java.u...
  • rishengcsdn
  • rishengcsdn
  • 2017年05月03日 11:42
  • 725

权重算法实现

需求:广告按权重展现 基本算法描述如下: 1、每个广告增加权重 2、将所有匹配广告的权重相加sum, 3、以相加结果为随机数的种子,生成1~sum之间的随机数rd 4、.接着遍历所有广告...
  • wzh200x
  • wzh200x
  • 2014年07月12日 00:08
  • 1378

\t\tC# 权重控制随机抽取率

增加、减少随机抽中几率——此算法可用于题库随机抽题、赌博机控制出彩率,甚至俄罗斯方块等游戏,有广泛的用途!也希望能帮得到你! 强调     在随机的基础上增控制抽中几率,注意随机性!! 正文     ...
  • yandavid
  • yandavid
  • 2013年06月09日 15:31
  • 758

java 权重随机数算法

java 权重随机数 算法
  • qq_41399429
  • qq_41399429
  • 2017年12月15日 12:56
  • 136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA权重抽取
举报原因:
原因补充:

(最多只允许输入30个字)