概率算法理论1:随机数的产生
来源:互联网 发布:淘宝拍卖车怎么看到 编辑:程序博客网 时间:2024/05/19 20:40
概率算法中常常会用到随机数。一个好的随机数应该是随机,均匀,独立的。但是计算机受限于字长,计算速度以及算法本身的确定性,无法产生真正意义上的随机数。但是可以利用数学公式产生出符合概率统计特征的伪随机数。
历史上也有很多产生伪随机数的算法。下面介绍一些。
1 最早的称为平方取中法。方法是对一个n位二进制数求平方,然后对平方数取中间的n位,一直这样步进。后来因为这个数列均匀性并不太好,存在小数字偏倚的特点。有人提出了乘积取中法,就是不是对上一个元素做平方,而是上一个元素乘以上上一个元素取中。这些算法的实现比较简单,缺点是随机性依赖于初始值,数列周期比较短。
2 后来出现了针对二进制计算机特点的移位法。具体操作是,对一个元素x0,左移7位得到x01,右移7位得到x02,x01和x02进行指令相加得到x1,一直这样步进。这种算法缺点同样是随机性依赖初始值(不能设置的太小),随机周期比较短。
3 现在计算机中普遍应用的技术是同余法。基本的递推关系为Ij+1 =Ij * a+c (mod m),若c不等于0,a不等于1称为混合同余法(c等于0:乘同余法,a=1:加同余法,很直观),这种方法应用的比较多。这个数列的周期也很大的依赖于a和c参数的选取。引入一个结论:
混合同余数列达到周期为M的充要条件:1)c和M互素 2)对于M的每一个素因子p,a-1为p的整数倍 3)若M为4的倍数,那么a-1为4的倍数。
由上述结论可知:混合同余数列达到最大周期的条件为:在2进制的计算机上,若M=2^s,取a=4*q+1,c=2*p-1;其中q和p取任意正整数。很容易理解。常用的伪随机数发生器采用的同余数列是:Ij+1= ( 25173 * Ij + 13849 ) % 65536,产生16位的随机数(short型)的。
- 概率算法理论1:随机数的产生
- 产生不等概率随机数的简单方法
- 产生概率可操控的随机数
- 不等概率产生随机数产生
- 概率算法 预备知识 用rand()和srand()产生伪随机数的方法总结
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- 给定一个函数rand()能产生0到n-1之间的等概率随机数,问如何产生0到m-1之间等概率的随机数?
- 如何产生已知概率密度函数的随机数?
- #随机数#产生1~n之间的随机数
- 概率/随机数算法
- 概率/随机数算法
- 产生不重复随机数的简便算法
- 一个产生不重复随机数的算法
- 产生不重复随机数的简便算法
- 随机数产生的三种算法
- 随机算法 之随机数的产生
- 随机化算法及随机数的产生
- [SPLUSH WAVE] DragonMahjongg3~天空編~ 1.07版修改器+界面汉化
- python3之模块的显要特性:属性
- [CDMA]写号知识普及
- intellij sdk
- EJB调用机制
- 概率算法理论1:随机数的产生
- python3之import和reload的使用注意事项
- Linux如何访问Windows共享文件
- (未完)函数指针
- VC++多线程编程
- python3之使用exec运行模块文件
- JAVA 中URL链接中文参数乱码的若干处理方法,现在整理收录如下:(抄录)
- gcc 编译器常用的命令行参数一览
- 【BT下载】ubuntu10.10 下bit下载工具 Transmission 或者 wine+uTorrent 【PlayOnLinux:Wine 辅助程序】