Js 控制随机数概率

摘要:
(新增)控制随机数的概率:https://www.cnblogs.com/whnba/p/10565045.html算法简化如下:取1到10之间的随机数,则其取值范围为:整数区间概率1[0,1)0.12[1,2)0.13[2,3)0.14[3,4)0.15[4,5)0.16[5,6)0.17[6,7)0.18[7,8)0.19[8,9)0.110[9,10)0.1如果调整2的概率为0.5

(新)控制随机数概率: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 控制随机数概率》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iis7+php5.6配置404错误页面的问题jmeter 查看结果树之查看响应的13种方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

js 预览 excel,js-xlsx的使用

js-xlsx 介绍 由SheetJS出品的js-xlsx是一款非常方便的只需要纯JS即可读取和导出excel的工具库,功能强大,支持格式众多,支持xls、xlsx、ods(一种OpenOffice专有表格文件格式)等十几种格式。本文全部都是以xlsx格式为例。 官方github:https://github.com/SheetJS/js-xlsx 本...

js 递归树结构数据查找父级

1.json树数据查找所有父级--完成 json:树结构数据 var arrData =[{ "label": "中国", "City": null, "value": "0", "children": [{ "label": "河北", "City": "0",...

JS反混淆——构造可知DeviceToken、nouce与token

清空所有cookies后打开任意一本书的详情页,打开控制台中的Network。如下图所示,浏览器发出的第一个XHR请求为/bind,其中DeviceToken,nonce,Token均为POST中提交的数据。 找到访问网页的请求,如下图所示,返回头中没有出现set-cookie字段,可以判断DeviceToken,nonce,Token均为js生成的。...

利用js获取图片尺寸与图片大小(高度与宽度)

利用获取图片尺寸与图片大小(高度与宽度)要注意一点的是要等 图片加载完成后才能js 获取图片宽度与高度的,所以要判断在readystate=="complete"的状态下获取大小,如果是利用file上传的话,每次都要点击清除 image=new image(); imgage.width与高度哦。<!doctype html public "-//w...

安全和加密——openssl及自建CA

一、对称加密算法 对称加密:加密和解密使用共用一个秘钥 特点 加密、解密使用同一个秘钥,效率高; 将原始数据分割成固定大小的块,逐个进行加密 缺点 密钥过多,密钥需要分发 数据来源无法确认 1. 使用gpg实现对称加密 对称加密文件gpg -c file 生成 file.gpg 在另一台主机上解密gpg-o file -d file.gp...

js 文件下载

工程WebApi: 点击按钮执行的handler 1 exportClick() { 2 var 3 profile = { 4 content: this.state.profile, 5 type: MappingTypeForSe...