封装好的工具类

/*** 随机工具** @author cc* @date 2021/5/18*/
public class RandomUtil {private static final int MAX_WEIGHT = 1;/*** 权重随机算法* 比如传入weightArray={1D,2D,3D,4D} 那么100W次结果返回下标0,1,2,3的概率应为10%,20%,30%,40%* 比如传入weightArray={1D,2D} 那么100W次结果返回下标0,1的概率应为33.33%,66.67%* @param weightArray 权重源数组,不能为空* @return 权重数组下标*/public static int weightWinning(double[] weightArray) {if (weightArray.length == 0) {return -1;}// hutooldouble randomDouble = cn.hutool.core.util.RandomUtil.randomDouble(MAX_WEIGHT);// or java random// double randomDouble = new Random().nextDouble()double sum = 0D;for (double data : weightArray) {sum += data;}int index = 0;double curSum = 0D;for (double data : weightArray) {if (randomDouble < curSum + data / sum) {return index;} else {curSum += data / sum;index++;}}return index;}
}

原理

我来拿具体的实例来说weightArray={1,2,3,4}来说

randomDouble 取到的是大约等于0小于1的小数,比如这次的随机结果是0.38...,那么返回的本次下标是如何实现的呢

我们把weightArray={1,2,3,4}将线段长度为1的线段等权划分出来4分,下标为0段长为0.1,范围是[0~0.1)一次类推下标1为[0.1~0.3)。。总结来说0~0.1,0.1~0.3,0.3~0.6,0.6~1.0 那么本次0.38坐落在下标为2的线段中,返回结果为2。

这个思想就是想象把一块飞盘按权重划分为不同区域的位置,randomDouble坐落在哪个位置就返回什么结果。

测试

100W次的结果

注意

randomDouble 我用的是hutool工具包里单例实现的,尽量避免java实例获取

抽奖算法 中奖算法 权重随机算法实现 中奖概率实现方式 无需配置中奖概率 自我实现相关推荐

  1. java 权重_java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  2. java实现权重随机算法

    权重随机算法在抽奖,资源调度等系统中应用还是比较广泛的,一个简单的按照权重来随机的实现,权重为几个随机对象(分类)的命中的比例,权重设置越高命中越容易,之和可以不等于100: 简单实现代码如下: im ...

  3. 权重随机算法的java实现

    一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...

  4. java 权重_权重随机算法的java实现

    一.概述 平时,经常会遇到权重随机算法,从不同权重的N个元素中随机选择一个,并使得总体选择结果是按照权重分布的.如广告投放.负载均衡等. 如有4个元素A.B.C.D,权重分别为1.2.3.4,随机结果 ...

  5. labuladong的算法小抄pdf_随机算法:水塘抽样算法

    读完本文,你可以去力扣拿下如下题目: 382.链表随机节点 398.随机数索引 -----------我最近在 LeetCode 上做到两道非常有意思的题目,382 和 398 题,关于水塘抽样算法( ...

  6. java random算法_负载均衡--随机算法(Random)

    随机算法是指:从服务器列表中,随机选取一台服务器进行访问.由概率论可以得知,随着客户端调用服务端的次数增多,其实际效果趋近于平均分配请求到服务端的每一台服务器,也就是达到轮询的效果. 一.算法描述 假 ...

  7. 高级算法设计分析-- Max-SAT(随机算法近似算法)

    笔记来源:高级算法设计(孙晓明老师部分) https://en.wikipedia.org/wiki/Maximum_satisfiability_problem#Weighted_MAX-SAT 随 ...

  8. 红包随机算法微信群红包随机算法

    文章目录 1.前言 2.参考微信群红包算法 3.一个可用的随机算法 参考文献 1.前言 因疫情影响,部门 2021 年会以线上直播的形式进行,通过微信小程序展开.为活跃年会氛围,年会直播间会有抢红包环 ...

  9. js实现kmp算法_搜索算法 与 随机算法 (JS实现)

    搜索算法 我们会发现 之前学习的 数据结构与算法 中的 BinarySearchTree 类的 search 方法(二叉搜索树中 )以及 LinkedList 类的 indexOf 方法( 链表中 ) ...

最新文章

  1. SAP新总账 凭证分割
  2. IDEA中maven项目所有文件都识别不了,明明存在的类提示找不到,原来只需一键解决。。。
  3. kafka 思维导图
  4. Qt QString 与char* 相互转换
  5. MD5算法之C#程序 MD5算法描述
  6. HDU 5400 Arithmetic Sequence
  7. Docker 学习总结(71)—— Docker、Docker Compose、Docker Swarm 之间的区别
  8. 吴恩达创建deeplearning.ai讲授AI课程 ,向全世界普及深度学习知识
  9. entity framework扩展实战,小项目重构,不折腾
  10. jquery 引号问题
  11. js和jQuery的总结
  12. Web安全—information_schema数据库详解基础补充
  13. Java 全国省市接口
  14. 医药电商平台解决方案
  15. 苹果电脑怎么登录邮件服务器,Mac系统中的邮箱怎么创建126邮箱帐户?
  16. 测试人的Java之编程那点事
  17. 英文文本大小写的转换
  18. 阿里云ACA证书有什么用?
  19. 安卓打开rpm文件_android打开文件及打开方式(打开程序列表) | 学步园
  20. C++之父 Bjarne Stroustrup

热门文章

  1. 如何方便有效的群发邮件,外贸公司群发邮件平台软件好用吗?
  2. SpringBoot+Vue物流仓储管理系统
  3. 惠普Hp 战66 g3 amdR7-4800U,USB接口以及type-C速率/功能
  4. 2022年全球十大IC设计公司最新排名出炉
  5. 参数化设计类毕业论文文献有哪些?
  6. pb菜单详解和MDI
  7. 嫁人要嫁灰太狼,做人要做喜洋洋
  8. 东华大学人工智能作业2
  9. pygame《外星人入侵》
  10. 无货源店铺是什么?怎么做?