本文主要是介绍伪随机数生成算法-梅森旋转(Mersenne Twister/MT)算法介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
今天主要是来研究梅森旋转算法,它是用来产生伪随机数的,实际上产生伪随机数的方法有很多种,比如线性同余法,
平方取中法等等。但是这些方法产生的随机数质量往往不是很高,而今天介绍的梅森旋转算法可以产生高质量的伪随
机数,并且效率高效,弥补了传统伪随机数生成器的不足。梅森旋转算法的最长周期取自一个梅森素数,
由此命名为梅森旋转算法。常见的两种为基于32位的MT19937-32和基于64位的MT19937-64。
由于梅森旋转算法是利用线性反馈移位寄存器(LFSR)产生随机数的,所以我们先来认识线性反馈移位寄存器。
首先,移位寄存器包括两个部分
(1)级,每一级包含一个比特,比如11010110是一个8级的移位寄存器产生的
(2)反馈函数,线性反馈移位寄存器的反馈函数是线性的,非线性反馈移位寄存器的反馈函数是非线性的
一个级的移位寄存器产生的序列的最大周期为,当然这个最大周期跟反馈函数有很大关系,线性反馈函数实
际上就是这个级的移位寄存器选取“某些位”进行异或后得到的结果,这里的“某些位”的选取很重要,得到线性反馈
函数之后,把这个移位寄存器的每次向右移动一位,把最右端的作为输出,把“某些位”的异或结果作为输入放到最左
端的那位,这样所有的输出对应一个序列,这个序列叫做M序列,是最长线性移位寄存器序列的简称。
上面“某些位”的选取问题还没有解决
这篇关于伪随机数生成算法-梅森旋转(Mersenne Twister/MT)算法介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!