mysql 根据权重抽取随机数_根据权重产生随机数
假如一个抽奖如下信息
int w_list[5] = { 20, 10, 40, 15, 15 };
string names[5] = { "电饭锅", "牙刷", "挨粪叉", "pier子", "蒸馍" };
对应权值 电饭锅–>20,牙刷–>10 以此类推,可见抽到挨粪叉的概率即权值最大
用C++ 实现
先或得随机数
1. 初始化随机数发生器
用法: void srand(unsigned int seed)
所在头文件: stdlib.h
srand()用来设置rand()产生随机数时的随机数种子。参数seed必须是个整数,如果每次seed都设相同值,rand()所产生的随机数值每次就会一样。
获得0–权重和 之内的随机数
int w_sum = 0;
int length = sizeof(w_list) / sizeof(int);
for (int i = 0; i < length; i++)
{
w_sum += w_list[i];
}
/*for (int i = 0; i < length; i++) { cout << "rand()-" << i << "-" << rand() % w_sum << endl; }*/
int randVal = rand() % w_sum;
奖励
int rward代表奖励的下标
int rward = 0;
for (int i = 0; i < length; i++)
{
if (randVal <= w_list[i])
{
rward = i;
break;
}
randVal -= w_list[i];
//printf("randVal = %d rward = %d \n", randVal, rward);
}
//printf("length = %d w_sum = %d randVal = %d rward = %d \n", length, w_sum, randVal, rward);
printf("恭喜获得一个%s", names[rward].c_str());
解释
首先设置各个奖励的权重,这里的权重之和不必非要是100,我的这段代码设置的权重之和位100,是为了方便读者了解到各个奖励抽中的概率,所以这样设置的,理论上说,数值大一点,产生的随机数更大,也更加随机。这里只将权重放大数组中,一般情况下,需要策划提供相关的配表,然后从配表中读取数值,这样,在应用中,可以通过跟新配表,来事实更新权重信息。由于通过配表设置了权重,所以,奖励种类不确定,因此,通过sizeof函数,获取数所占空间,然后,除以int所占内存空间,获得数组长度。然后,求权重总和,再调用自己创建的随机函数,产生随机数。下面就是判断这个随机数在那种奖励的权重范围了。将获取的随机送randVal和权重数组中的数进行比较,首先和a[0]作比较,加入获取的随机数是41,a[0]=5,41>a[0],那么,将41 – 5 等于36,继续和第二个数a[1]也就是10进行比较,36比10大,就减去10,变成26,然后继续和a[2]也就是15比较,还是大,就减去15变为16,然后和a[3] 也就是25比较,这时,比25小,也就是说,此时随机到了这个奖励
完整代码
#include
#include
using namespace std;
int main()
{
srand((unsigned)time(NULL));
int w_list[5] = { 20, 10, 40, 15, 15 };
string names[5] = { "电饭锅", "牙刷", "挨粪叉", "pier子", "蒸馍" };
int w_sum = 0;
int length = sizeof(w_list) / sizeof(int);
for (int i = 0; i < length; i++)
{
w_sum += w_list[i];
}
int randVal = rand() % w_sum;
int rward = 0;
for (int i = 0; i < length; i++)
{
if (randVal <= w_list[i])
{
rward = i;
break;
}
randVal -= w_list[i];
}
printf("恭喜获得一个%s", names[rward].c_str());
getchar();
return 0;
}
mysql 根据权重抽取随机数_根据权重产生随机数相关推荐
- 熵值法计算权重有异常值_指标权重确定方法 1-熵值法
在信息论中,熵是对不确定性或随机性的一种度量,不确定性越大,熵值就越大,不确定性越小,熵值就越小.不确定性越大,表明随机性越大,数据越离散,则包含的信息就越大,在确定权重的时候往往就越小. 熵值法确定 ...
- java生成不重复随机数_生成不重复随机数 java
生成不重复随机数 java java生成随机数可以使用Math类中的方法.不随机可以使用List进行判断存储.(推荐教程:java教程 ) 1 . 调用java.lang下面Math类中的random ...
- java 生成随机数_不会生成随机数?我们来看看java生成随机数的10种方法
1.引言 本文将探讨用 Java 生成随机数的不同方法. 2.Java API Java API 提供了几种随机数生成方法.让我们一起来了解一下. 2.1.java.lang.Math Math 类中 ...
- java生成指数分布随机数_生成特定分布随机数的方法
生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...
- mysql大表数据抽取_从云数据迁移服务看MySQL大表抽取模式
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...
- 二进制空间权重矩阵_空间权重矩阵(SWM)
基本原理 如何利用数学(如用面积.距离等)建立空间数据和非空间数据之间的关系?对于空间统计而言,空间权重矩阵是一种有效的表达空间关系的方式.因此,它是用量化的方法表示了数据之间的"空间结构& ...
- 神经网络权重是什么意思,神经网络权重调整方法
神经网络权值怎么确定? 神经网络的权值是通过对网络的训练得到的.如果使用MATLAB的话不要自己设定,newff之后会自动赋值.也可以手动:{}= ; {}=.一般来说输入归一化,那么w和b取0-1的 ...
- MYSQL的随机抽取实现方法
MYSQL的随机抽取实现方法.举个例子,要从tablename表中随机提取一条记录,大家一般的写法就是:SELECT * FROM tablename ORDER BY RAND() LIMIT 1. ...
- 从云数据迁移服务看MySQL大表抽取模式
摘要:MySQL JDBC抽取到底应该采用什么样的方式,且听小编给你娓娓道来. 小编最近在云上的一个迁移项目中被MySQL抽取模式折磨的很惨.一开始爆内存被客户怼,再后来迁移效率低下再被怼.MySQL ...
最新文章
- Nmap (网络映射器)好东西啊
- phrases practice_七年级短语、固定搭配练习题Phrases practice for Grade seven
- python中%符号详解
- strncmp用法说明
- const 和readonly
- python查找文件是否存在_python脚本查找文件是否存在的方法
- 2017.3.25 矩阵快速幂 求斐波那契数列第n项
- 组装我的计算机社会实践活动,暑期电脑销售社会实践心得体会
- 三星Note10 Pro电池曝光:容量高达4500mAh
- mysql按时间月份查询数据
- 关于卸载vmwave虚拟机后键盘不能输入的问题
- linux内核奇遇记之md源代码解读之一
- charles安卓抓包步骤详解
- 2021年T电梯修理免费试题及T电梯修理考试试卷
- HBuilderX 配置 夜神模拟器
- 关于win10微软商店打不开的99%解决办法
- me909嵌入式linux,树莓派驱动ME909s-821
- STM32使用M/T法检测单路脉冲
- android 表情包下载,表情包制作pro
- nginx单点故障的 处理方案keepalived