梅森素数旋转法

梅森素数旋转法是一种伪随机数生成算法,基于梅森素数2^19937-1,广泛应用于各种编程语言。该算法包括旋转和提取两个步骤,通过线性反馈移位寄存器实现,满足623-distributed to 32-bit accuracy,确保生成的随机数序列在长周期内均匀分布。
摘要由CSDN通过智能技术生成

算法定义

伪随机数

伪随机数就是可以通过特定的初始值可以得出特定的伪随机数,这些伪随机数在统计上具有均匀性、独立性。所以在现实生活中,我们可以通过伪随机数生成算法来满足生成随机数的需求。

梅森素数旋转法

它是一种伪随机数生成算法,它能够根据某个初始种子生成随机串。由于该该算法的"旋转"特性,生成的随机串是有周期的。在周期外的数是可以通过上一周期产生的随机串推出来,故在周期外就不具备随机中的独立性了。但是在此算法中,我们不必担心,因为它的周期是梅森素数 2 19937 − 1 2^{19937}-1 2199371,这数非常大,大到足以让我们安心的使用此随机数生成算法。比如像c++、R、python、MATLAB的随机数产生都是运用此算法实现。比较常见的有两种算法,分别是基于32位的MT19937-32和基于64位的MT19937-64,在此我们介绍的是MT19937-32,MT19937-32算法能够生成 [ 0 , 2 32 − 1 ] [0,2^{32}-1] [0,2321]范围内的整数随机数.

k-distributed to v-bit accuracy(k分布v位准确度)

生成随机数算法有很多,所以需要一个标准来评估这些随机数生成算法的质量。其中一个度量算法就是k-distributed to v-bit accuracy(翻译不准确,故在此不翻译啦~)。接下来具体来讲下这个评估算法:
假设某一个随机数生成算法能够产生周期为 P P P w w w比特的随机串{ x i x_i xi},同时将 w w w比特的随机数 x x x的最高 v v v(前 v v v)位组成的数记作为 t r u n c v ( x ) trunc_v(x) truncv(x).因此可以构造出如下的二进制数,长度为 k v kv kv比特:
P R N G k , v ( i ) = ( t r u n c v ( x i ) , t r u n c v ( x i + 1 ) , . . . , t r u n c v ( x i + k − 1 ) ) PRNG_{k,v}(i) = (trunc_v(x_i),trunc_v(x_{i+1}),...,trunc_v(x_{i+k-1})) PRNGk,v(i)=(truncv(xi),truncv(xi+1),...,truncv(xi+k1))

显而易见, P R N G k , v ( i ) PRNG_{k,v}(i) PRNGk,v(i)的长度是kv,所以总共有 2 k v 2^{kv} 2kv种取值。如果我们说随机串{ x i x_i xi}是满足k-distributed to v-bit accuracy的,则当 x i x_i xi取遍周期P内的值时, P R N G k , v ( i ) PRNG_{k,v}(i) PRNGk,v(i) 2 k v 2^{kv} 2kv种取值中是均匀的。

对于固定的v,我们易知,如果{ x i x_i x

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值