我是靠谱客的博主 和谐橘子,最近开发中收集的这篇文章主要介绍随机数生成算法(伪随机数),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是伪随机数,它和随机数的区别

伪随机就是一个过程看似随机的,但实际还不是随机的。伪随机数都是有一定的周期性的,如使用24小时里面的一个小时,这个就是伪随机数,或者三角函数的一个角度的三角函数值,因为时有周期性所以是伪随机的。

记住一点事要做到真正的随机有:抛硬币,热噪讯号、量子力学的效应、放射性元素的衰退辐射,或使用无法预测的现象等。

计算机里面的随机数主要还是用伪随机数来实现的,例如以当前时间作为种子。

伪随机数实现的算法

  • 线性同余方法
  • 平方取中法
  • M-sequence
  • 梅森旋转算法

线性同余方法

它是根据递归公式:

N_{j+1} equiv (A times N_j + B ) pmod{M}

其中A,B,M是产生器设定的常数。

LCG的周期最大为M,但大部分情况都会少于M。要令LCG达到最大周期,应符合以下条件:

  1. B,M互质;
  2. M的所有质因子都能整除A-1
  3. M是4的倍数,A-1也是;
  4. A,B,N_0都比M小;
  5. A,B是正整数。

平方取中法

算法:

  1. 选择一个m位数N_i作为种子。
  2. 计算N_i^2
  3. N_i^2不足2m个位,在前补0。在这个数选中间m个位的数,即10^{lfloor m/2 rfloor}10^{lfloor m/2 rfloor+m}的数,将结果作为N_{i+1}

M-sequence 

M-sequence ( Maximum length sequence MLS 、最大长度串行)是在基本的通信 电路 设计中,所经常被利用到的一个虚拟随机数字信号《Pseudo Random Sequence》,其主要的方式是利用第一位与其他位暂存器的输出值做ex-or来设计其第一位暂存器的输入值。

梅森旋转法

这个有点难有空再理解:维基百科的解答

内容主要来自维基百科,变成维基百科搬运工了: 点击打开链接


最后

以上就是和谐橘子为你收集整理的随机数生成算法(伪随机数)的全部内容,希望文章能够帮你解决随机数生成算法(伪随机数)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部