按概率生成随机结果,自己控制字符结果的生成类似彩票系统

2023-11-23 04:10

本文主要是介绍按概率生成随机结果,自己控制字符结果的生成类似彩票系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 目录
  • 定义概率集
  • 改造概率集
  • 随机生成概率集索引
  • 通过率索查找元素
  • 测试数据验证
  • 加入战队
    • 微信公众号

随机数是专门的随机实验的结果,在统计学的不同技术中需要使用随机数,比如在从统计总体中抽取有代表性的样本的时候,或者在将实验动物分配到不同的实验组的过程中,或许在进行蒙特卡罗模拟法计算的时候等等。产生随机数有多种不同的方法,这些方法被称为随机数发生器。随机数量重要的特性是:他所产生的后面的那个数与前面的那个数毫无联系。

今天我们讨论的问题就是基于随机数展开的。总所周知,彩票就是一种随机的发生,但是在这随机的表面下实际上是一种有目的行的控制的随机。简而言之是在大概率下的随机生成

定义概率集
改造概率集
随机生成概率集索引
通过率索查找元素
测试数据验证
加入战队

目录

定义概率集


/*** 定义一个连续集合* 集合中元素x满足:(minElement,maxElement]* 数学表达式为:minElement < x <= maxElement**/
public class ContinuousList {private double minElement;private double maxElement;public ContinuousList(double minElement, double maxElement){if(minElement > maxElement){throw new IllegalArgumentException("区间不合理,minElement不能大于maxElement!");}this.minElement = minElement;this.maxElement = maxElement;}/*** 判断当前集合是否包含特定元素* @param element* @return*/public boolean isContainKey(double element){boolean flag = false;if(element > minElement && element <= maxElement){flag = true;}return flag;}}

首先通过一个类ContinuousList来存储概率集的对象,用来表示在宿主轴1上。这里友情提醒一下,这里的概率集并不一定需要概率和为100% , 这里的概率提供方只需要提供一个权重就行了,我们在投射到宿主轴2上的时候自动会一次补全的,最后也是通过随机数看在那块权重对应的索引上的。就好想将权重类似铺砖一样依次铺满就行,然后随机扔一个石子看在那一块就行。

构造概率因子

概率平铺示意图

示意图

改造概率集

上面我们提到供应方提供的是权重,图一提供{10,10,5,5,30,10,5,25},总和为100(不是必须是100,这里100只是为了方便观测)这些表示的意思是生成第0位的该路为10/100=10%。现在加入我们有一个数组集合为{“a”,"b","c","d","e","f","g","h"}这八个字符。那么现在通过图一的构造,那么生成a~h的概率分别是{10%,10%,5%,5%,30%,10%,5%,25%}
那么如何通过权重转变为概率的呢。

  • 首先第一个元素权重为10,则其在宿主轴3上的分布范围为 0~10
  • 第二个元素权重10,对应的分布范围则为10~20
  • 第三个元素权重5,对应的分布范围则为20~25
  • 第四个元素权重5,对应的分布范围则为25~30
  • 第五个元素权重30,对应的分布范围则为30~60
  • 第六个元素权重10,对应的分布范围则为60~70
  • 第七个元素权重5,对应的分布范围则为70~75
  • 第八个元素权重25,对应的分布范文责问75~100

分布图

随机生成概率集索引


/*** 进行抽奖操作* 返回:奖品的概率list集合中的下标*/
public int randomColunmIndex(){int index = -1;Random r = new Random();double d = r.nextDouble() * maxElement;  //生成0-1间的随机数if(d == 0d){d = r.nextDouble() * maxElement;     //防止生成0.0}int size = lotteryList.size();for(int i = 0; i < size; i++){ContinuousList cl = lotteryList.get(i);if(cl.isContainKey(d)){index = i;break;}}if(index == -1){throw new IllegalArgumentException("概率集合设置不合理!");}return index;}

现在我们的宿主轴4已经构建好了,下面我们基于各个读者使用的语言生成0~1的随机数,然后按宿主轴5的比例放大至宿主轴6上。
例如: 随机生成0.5238 , 上述的宿主轴7长度是100 , 则此次生成的随机数0.5238对应宿主轴8上的52.38。52.38在30~60这个区间范围,所以此次随机生成的所以则为30~60对应的索引3(从0开始)

通过率索查找元素

上面52.38对应的概率集合中的索引是3,这里就解释了为什么概率集和结果集个数要对应上。因为通过宿主轴9我们生成了索引,概率集和结果集个数一样就保证了我们一定会获取到结果。通过索引3我们获取到的结果是d

测试数据验证

上面介绍了改算法的执行原理集流程,纸上得来终觉浅,现在我们将通过该算法随机生成100000条数据,生成的同时我们加上统计数量的算法。最后我们对比下计划生成的概率和实际生成概率就可以验证改算法了。

结果

到这里也该和读者说再见了,今天的按概率生成随机数就结束了,如果读者对随机数生成原理感兴趣的话,可以对次软文拥有者建议,后续我会根据情况进行原理分析的。

加入战队

源码提供

个人网站

[个人微信] zxh870775401

微信公众号

微信公众号


  1. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  2. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  3. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  4. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  5. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  6. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  7. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  8. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

  9. 宿主轴是将概率的整体分布抽象为一条射线,不同的概率投影在该条射线上。↩

转载于:https://www.cnblogs.com/zhangxinhua/p/11345989.html

这篇关于按概率生成随机结果,自己控制字符结果的生成类似彩票系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/415235

相关文章

使用C#如何创建人名或其他物体随机分组

《使用C#如何创建人名或其他物体随机分组》文章描述了一个随机分配人员到多个团队的代码示例,包括将人员列表随机化并根据组数分配到不同组,最后按组号排序显示结果... 目录C#创建人名或其他物体随机分组此示例使用以下代码将人员分配到组代码首先将lstPeople ListBox总结C#创建人名或其他物体随机分组

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

TP-LINK/水星和hasivo交换机怎么选? 三款网管交换机系统功能对比

《TP-LINK/水星和hasivo交换机怎么选?三款网管交换机系统功能对比》今天选了三款都是”8+1″的2.5G网管交换机,分别是TP-LINK水星和hasivo交换机,该怎么选呢?这些交换机功... TP-LINK、水星和hasivo这三台交换机都是”8+1″的2.5G网管交换机,我手里的China编程has

详解Java中如何使用JFreeChart生成甘特图

《详解Java中如何使用JFreeChart生成甘特图》甘特图是一种流行的项目管理工具,用于显示项目的进度和任务分配,在Java开发中,JFreeChart是一个强大的开源图表库,能够生成各种类型的图... 目录引言一、JFreeChart简介二、准备工作三、创建甘特图1. 定义数据集2. 创建甘特图3.

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

AI一键生成 PPT

AI一键生成 PPT 操作步骤 作为一名打工人,是不是经常需要制作各种PPT来分享我的生活和想法。但是,你们知道,有时候灵感来了,时间却不够用了!😩直到我发现了Kimi AI——一个能够自动生成PPT的神奇助手!🌟 什么是Kimi? 一款月之暗面科技有限公司开发的AI办公工具,帮助用户快速生成高质量的演示文稿。 无论你是职场人士、学生还是教师,Kimi都能够为你的办公文