一.随机数的意义

现实生活中,有很多场景需要用到“随机数”:

  • 彩票
  • 棋牌游戏中的洗牌和掷骰子
  • 游戏掉宝率

其中大部分是靠计算机软件生成的的“伪随机数”。伪随机数一般是由随机种子和随机算法计算生成的,也就是说,在随机种子和随机算法一定的情况下,伪随机数是可重复、可预测的。
简单来说,伪随机数具有循环长度。什么叫循环长度?就是如果第一次产生数字55,第二个产生数字107,那么循环多少次后,会继续产生55,107……这样的序列。大部分简单算法的循环长度都是2^32左右。

引用:https://www.jianshu.com/p/1904a2ef20cb

二.产生算法

1.乘同余算法

其中,N是随机数列周期,一般选取为大素数,0<a<N为乘因子,b为加因子,通常选择0或者1,0<w(0)<N是数列的初始值,成为随机种子。

该算法对a,b的取值具有较大的依赖性。一般来说,我们可以使用以下两种取值,来获得长周期和不相关序列:

a=16807,b=0,N=

a=69069,b=1,N=

上述两种配置均可以获得周期N=的随机序列。

2. Wichman-Hill算法
这种算法的思想是将多个随机数发生器进行组合,可以极大提高输出序列的周期,其生成公式如下:

X(n) = 171 * X(n-1) Mod 30269
Y(n) = 172 * X(n-1) Mod 30307
Z(n )= 170 * X(n-1) Mod 30323
U(n) = {X(n)/30269 + Y(n)/30307 + Z(n)/30323}

所产生的序列周期大约为:N=30268*30306*30322

3.Marsaglia-Zaman算法

该算法也是递推模式,生成公式如下:

该算法随机性好,占用内存少,在计算机上容易实现,并且产生随机数的速度快。

均匀分布随机数产生算法相关推荐

  1. 均匀分布随机数的生成算法简介

    均匀分布随机数的生成算法简介 关键词:均匀分布随机数,线性同余法,反馈位寄存器法,组合随机数发生器 一.引言 \qquad设随机变量 X X 的分布函数为F(X)F(X), {Xi,i=1,2,⋯} ...

  2. c++产生均匀分布随机数赋值_不随机的随机数:高斯随机数生成器综述

    随机数的使用非常广泛,例如在从统计总体中抽取有代表性的样本时,或者在将实验动物分配到不同的试验组的过程中,或者在进行蒙特卡洛模拟法计算的时候等等.事实上,这些统计技术中使用的随机数均为"伪随 ...

  3. Javascript 产生随机数——服从均匀分布随机数、服从正态分布(高斯分布)随机数、服从柯西分布随机数

    文章目录 1 产生服从均匀分布随机数 2 产生服从正态分布随机数 3 产生服从柯西分布随机数 1 产生服从均匀分布随机数 大家都知道Math.random是 javascript 中返回伪随机数的方法 ...

  4. 使用均匀分布随机数产生器构造任意分布的随机数产生器

    一.算法原理      在概率论中,有下面重要的结论:设随机变量Y的概率分布函数F(y)为连续函数,而X是在(0,1)上均匀分布的随机变量,设,则Z与Y有相同的分布.     因此,理论上,我们可以用 ...

  5. 【MATLAB统计分析与应用100例】案例008:调用rand函数生成均匀分布随机数

    文章目录 1. 生成随机数分布直方图 2. 生成随机数矩阵,服从均匀分布 1. 生成随机数分布直方图 x = rand(10) % 生成10行10列的随机数矩阵,其元素服从[0,1]上均匀分布 y = ...

  6. java随机数排序算法_理解快速排序算法

    快速排序在平均状况下,排序n个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n^2)次比较,但这种状况并不常见.事实上,快速排序通常明显比 其他Ο(n log n)算法更快,因为它的内部循环 ...

  7. Javascript 随机数函数 学习之一:产生服从均匀分布随机数

    大家都知道Math.random是 javascript 中返回伪随机数的函数,但查看 MDN, The Math.random() function returns a floating-point ...

  8. 随机数大家都会用,但是你知道生成随机数的算法吗?

    作者 | 梁唐 来源 | TechFlow(ID:techflow2019) 头图 |  CSDN 下载自东方IC 今天我们来和大家聊聊随机数. 大家如果学过编程对于随机数应该都不陌生,应该或多或少都 ...

  9. [0,1]上均匀分布随机数的产生

    文章目录 自然取中法 倍积取中法 一阶线性同余法 自然取中法 步骤: 任取一个N位整数做初值 将该数平方,取中间N位数,作为第一个随机整数 再将第一个随机整数平方,取中间N位数,得到第二个随机整数 以 ...

最新文章

  1. windows下怎么安装protobuf for python
  2. (一)为什么要UML
  3. python小细节之else
  4. C 虚函数表及多态内部原理详解
  5. 算法导论4--求最大和数组
  6. setuptools Declaring Dependencies
  7. Drupal 忘记密码怎么办?重设管理员密码的几种方法
  8. matlab平行因子_基于MATLAB某客车悬置系统优化与运动仿真
  9. 销售订单(SO)-API-给已有的销售订单增加一行
  10. PHP肥料源码_PHP农场养殖游戏巨人农场复利平台源码带抽奖
  11. 网络编程技术-----windows网络编程
  12. 混合云架构下的安全风险分析和安全解决方案建议
  13. Quartz 源码解析(一) —— 基本介绍
  14. Mint20系统安装微信
  15. Predict(生成图像)
  16. 小旋风万能蜘蛛池x9.02开心版/站长必备SEO/永久使用/带教程
  17. 10分钟教你用python如何正确把妹
  18. yarn : 无法加载文件 xxxxxxxxx,因为在此系统上禁止运行脚本。
  19. TexStudio 编辑 Latex 时插入算法伪代码描述块一直报错:Missing \endcsname inserted. \While
  20. sd和sem啥区别_SD与SEM区别

热门文章

  1. http session介绍
  2. 今天继续去新交房的小区地推
  3. 服务器命令栏不显示,Linux栏 Linux指令(未完)
  4. XML格式字符串 与 FarPoint互转
  5. 使用RSA生成一对公钥和私钥
  6. 面试题: 你在工作/学习过程中遇到过什么深刻问题吗?怎么克服?
  7. flash 上传类 带自动压缩功能
  8. PHP 二维数组排序
  9. 写写代码,开开车--科目二考试经验
  10. python3GUI--音乐播放器(精简版)By:PyQt5(附下载地址)