Js 控制随机数概率
(新)控制随机数概率:https://www.cnblogs.com/whnba/p/10565045.html 算法精简了一下
如:
取 1~10 之间的随机数,那么他们的取值范围是:
|
整数 |
区间 |
概率 |
|
1 |
[0,1) |
0.1 |
|
2 |
[1,2) |
0.1 |
|
3 |
[2,3) |
0.1 |
|
4 |
[3,4) |
0.1 |
|
5 |
[4,5) |
0.1 |
|
6 |
[5,6) |
0.1 |
|
7 |
[6,7) |
0.1 |
|
8 |
[7,8) |
0.1 |
|
9 |
[8,9) |
0.1 |
|
10 |
[9,10) |
0.1 |
如果调整2的概率为0.5,那么1~10之间的随机数取值区间与其它值的概率都会发现变化 如下:
最小取值范围 = 0
最大取值范围 = 最小取值范围 + 概率 * 10(分成10份)
|
整数 |
区间 |
概率 |
|
1 |
[0,0.55) |
≈ 0.055 |
|
2 |
[0.55,5) |
0.5 |
|
3 |
[5,5.55) |
≈ 0.055 |
|
4 |
... |
≈ 0.055 |
|
5 |
... |
≈ 0.055 |
|
6 |
... |
≈ 0.055 |
|
7 |
... |
≈ 0.055 |
|
8 |
... |
≈ 0.055 |
|
9 |
... |
≈ 0.055 |
|
10 |
... |
≈ 0.055 |
然后调用随机函数生成1~10之间的随机数,如果生成的随机数在某个整数的取值范围内,那么就输出当前整数。
/*
* @Author: 破壳而出的蝌蚪
* @博客:https://www.cnblogs.com/whnba/
* @Date: 2019-01-03 15:03:33
* @Last Modified by: mikey.zhaopeng
* @Last Modified time: 2019-01-03 15:04:17
*/ 'use strict'; class GLRandom {
/**
* 构造函数
* @param {number} min 最小整数值
* @param {number} max 最大整数值
* @param {Map} percentage 概率数 [值,百分比]
*/
constructor(min, max, percentage = new Map()) {
this.min = Math.trunc(min);
this.max = Math.trunc(max);
this.MATH_RANGE = 100; // 分成100份
this.percentage = percentage;
} get percentage() {
if (!this._percentage) {
this._percentage = new Map();
}
return this._percentage;
} /**
* 分配比例
* @param {Map} map 设置 值-百分比
*/
set percentage(map) {
let result = Array.from(map.values()).reduce((p, v, a) => {
return p - v;
}, 1);
for (let i = this.min; i < this.max; i++) {
if (map.has(i)) {
this.percentage.set(i, map.get(i));
} else {
this.percentage.set(i, result / (this.max - this.min - map.size));
}
}
} /**
* 根据比例生成取值范围
*/
range() {
let [start, random, keys] = [0, this.MATH_RANGE, Array.from(this.percentage.keys())];
for (let i = 0; i < keys.length; i++) {
let temp = this.percentage.get(keys[i]);
this.percentage.set(keys[i], [start, start += temp * random]);
}
} /**
* 生成随机数
*/
create() {
let num = Math.random() * this.MATH_RANGE;
for (let data of this.percentage.entries()) {
if (num >= data[1][0] && num < data[1][1]) {
return data[0];
}
}
return null;
}
}
// 样本
{
// 随机数范围 :40~900
let random = new GLRandom(40, 100); // 调整概率
random.percentage = new Map([
[41,0.2], // 调整值为41的数值,概率为20%
[46,0.5], // 调整值为46的数值,概率为50%
[90,0.05] // 调整值为90的数值,概率为5%
]); // 生成值区间
random.range(); // 生成概率随机数
console.log(random.create());
}
百度经验地址:https://jingyan.baidu.com/article/5553fa827bfe7d65a239341d.html
源码地址:https://pan.baidu.com/s/1ieOhaYe34nAhA8jfHhFzaw
Js 控制随机数概率的更多相关文章
- js 控制随机数生成概率
基本思路:把Math.random()生成的数看着百分比,然后定义每个整数值取值范围. 'use strict'; export default class GL { /** * 构造函数 * @pa ...
- js控制随机数生成概率代码实例
基本思路:把Math.random()js随机数生成的数看着百分比,然后定义每个整数值取值范围. 具体内容如下,供大家参考 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 真的了解js生成随机数吗
由js生成一切随机数的基础都是Math.random()这个方法,这个方法比较特别,生成的随机数落在的区间是[0,1),进行一次操作的话,js只能生成一个类似于[n,m)这样,左闭右开的区间.所以当有 ...
- js控制Bootstrap 模态框(Modal)插件
js控制Bootstrap 模态框(Modal)插件 http://www.cnblogs.com/zzjeny/p/5564400.html
- js控制文本框只能输入中文、英文、数字与指定特殊符号.
先在'' 里输入 onkeyup="value=value.replace(/[^\X]/g,'')" 然后在(/[\X]/g,'')里的 X换成你想输入的代码就可以了, 中文u4 ...
- JS控制flash的方法
JS控制flash的一些方法:Play() ---------------------------------------- 播放动画 StopPlay()---------------------- ...
- js 控制Div循环显示 非插件版
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数 ...
- JS 控制CSS样式表
JS控制CSS所使用的方法: <style> .rule{ display: none; } </style> 你想要改变把他的display属性由none改为inline. ...
随机推荐
- Java核心技术卷一基础知识-第6章-接口与内部类-读书笔记
第6章 接口与内部类 本章内容: * 接口 * 对象克隆 * 接口与回调 * 内部类 * 代理 接口技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现(implement)一 ...
- Ubuntu16.04.1 安装Nginx
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev ...
- MySQL:刷脏页
1. 脏页,干净页 当内存数据页和磁盘数据页上的内容不一致时,我们称这个内存页为脏页: 内存数据写入磁盘后,内存页上的数据和磁盘页上的数据就一致了,我们称这个内存页为干净页. 2. 刷脏页的时机 2. ...
- ssh免密码快速登录配置
使用ssh登录服务器的时候,需要输入ip地址.端口.用户名.密码等信息,比较麻烦,容易输错.还好,通过客户端和服务器的配置参数,可实现免密码快速登录.服务器可通过保存客户端的公钥,用于验证客户端的身份 ...
- 利用vi编辑器创建和编辑正文文件(一)
1. vim是vi的升级版本. 2. vi所UNIX和Linux系统内嵌的标准文编辑器,可执行,修改,复制,移动,粘贴和删除正文等命令,也可以进行移动光标,搜索字符和退出vi的 ...
- Android--UI之ImageSwitcher
前言 这篇博客来聊一聊AndroidUI开发中ImageSwitcher控件的使用.ImageSwitcher控件与ImageView类似,都可以用于显示图片,但是ImageSwitcher通过名字可 ...
- Selenuim自动化测试模型
本章内容: 概念介绍 自动化测试模型 一.概念 自动化测试库.框架.工具之间的区别: 库是由代码集合成的一个产品,供程序员调用,面向对象的代码组织形成的库叫类库,面向过程的代码组织形成的库叫函数库. ...
- Spring Boot SOAP Webservice例子
前言 本文将学习如何利用Spring boot快速创建SOAP webservice服务: 虽然目前REST和微服务越来越流行,但是SOAP在某些情况下,仍然有它的用武之地: 在本篇 spring b ...
- Nginx里Header修改
有时候,我们可能有修改Nginx默认Header的需求.本文就将常见的方法列出来供大家参考. 修改普通请求的Header Nginx内置的模块暂时仅支持修改响应头,使用add_header.其中: a ...
- Ajax 上传input type file 文件
Html: <div class="attach-img"> <label><input type="file" id=" ...