线性反馈移位寄存器例题具体算法,线性反馈移位寄存器的周期

  线性反馈移位寄存器例题具体算法,线性反馈移位寄存器的周期

  今天主要来学习俏皮的镜子旋转算法。它用于生成伪随机数。其实伪随机数的产生方法有很多种。例如,线性合成方法

  采取平方法等。但这些方法生成的随机数质量往往不高,今天介绍的俏皮的镜子旋转算法可以生成高质量的伪随机数。

  该机效率高,弥补了传统伪随机数发生器的不足。俏皮的镜子旋转算法的最长周期取自俏皮的镜像素数,

  它被命名为俏皮的镜子旋转算法。两种常见的类型是基于32位的MT19937-32和基于64位的MT19937-64

  俏皮的镜子旋转算法使用线性反馈移位寄存器(LFSR)生成随机数。让我们先确认3358www.Sina.com/的身份。

  首先,移位寄存器由两部分组成。

  )级包含例如由级线性反馈移位寄存器11010110的移位寄存器产生的每一级的位。

  )反馈函数,线性反馈移位寄存器的反馈函数是线性的,非线性反馈移位寄存器的反馈函数是非线性的。

  1级移位寄存器产生序列的最大周期,当然这个最大周期和反馈函数有很大关系,线性反馈函数是真实的。

  此时,这是通过在该级的移位寄存器中选择“一位”进行XOR的结果。这里“一点”的选择非常重要,可以得到线性反馈。

  函数,移位寄存器的每一位都右移,右边的位作为输出,“一位”的异或结果作为左边的输入。

  我就是他。这样,所有输出都对应一个数组。这个数组叫做8,是M序列的简称。

  如果上面提到的“某些位”选择问题还没有解决,那么选择哪个位来保证异或的最长周期就非常重要了。

  看吧。由选定的“某一位”组成的序列称为抽头序列。理论上这个抽头序列构成了多个项,这样最长线性移位寄存器序列可以获得最长的周期。

  表达式加LFSR必须是1。也就是说,这个多项式不能约定如下。

  在下文中,将通过以4位线性反馈移位寄存器为例来解释操作原理。

  如果的值为本原多项式,并且选择了反馈功能,将生成以下序列

  可以知道周长是1 0 0 0。这个句号包含了开放范围内的所有整数,不会按照一定的顺序出现。

  非常随机。

  如上所述,nifty镜像旋转算法的周期是15线性反馈移位寄存器,实际上是基于19937位。

  32只使用MT19937-32位。为什么选择周长为的算法?那是因为随机性好。

  镜像旋转算法基于线性反馈移位寄存器,总是移位旋转,周期是镜像素数,所以还是名副其实的。

  32

  # include iostream # include string . h # include stdio . h # include time . husingnamespacetd;bool isInit指数;int MT[624];//624 * 32-31=19937语音扫描(int seed){ index=0;isInit=1;Mt[0]=引脚;//为数组的其他元素初始化(inti=1;i 624I)intt=1812433253 *(mt[I-1]^(mt[I-1]30))I;MT[I]=t0x ffffffff;//取后32位mt[I]} } void generate()for)inti=0;i 624I()/2)31=0x 80000000//2)31-1=0x 7 fffffff inty=(mt[I]0x 8000000)(mt))(I1)).

  )% 624]0x 7 fffffff);mt[I]=mt[(I 397)% 624]^(y 1);if(y 1)mt[I]^=2567483615;}} int rand(){ if(!isInit)srand((int)time(NULL));if(index==0)generate();int y=MT[index];y=y ^(y11);//y右移11位Y=Y((Y 7)2636928640);//y左移7位与2636928640同相,然后与Y=Y进行异或((y15)4022730752);//y左移15位,与4022730752同相,然后与Y=Y (Y 18)异或;//y右移18位然后与Y index=(index 1)% 624异或;返回y;} int main(){ srand(0);//设置随机种子int CNT=0;for(int I=0;我1000000;I){ if(rand()1)CNT;} cout CNT/10000.0“%”endl;返回0;}其实很多语言中的随机数函数已经通过俏皮的镜像旋转法实现了。比如Python中的随机数模块random用的是Mei。

  Sen循环算法以生成伪随机数列。C++11中还有nifty镜像旋转算法实现的随机数生成器。请参考以下链接了解用法。

  链接:http://www.tuicool.com/articles/BfaYvm

  链接:http://www.cnblogs.com/egmkang/archive/2012/09/06/2673253.html

  链接:http://www.cplusplus.com/reference/random/

  

  俏皮的镜子旋转算法在信息指纹技术中的应用

  在百度Google这样的搜索引擎中,爬虫要对抓取的网页进行称重,这是通过信息指纹来实现的。具体来说,就是

  每个URL被随机映射到一个128位的二进制,这样每个URL只占用16字节的空间。这个128位随机数就是这个。

  URL的信息指纹可以证明,只要生成的随机数足够好,就可以保证两个URL几乎不可能有相同的信息指纹,所以

  两个人的指纹是不可能一样的,俏皮的镜像旋转算法就是生成高质量伪随机数的算法。

  有关nifty镜像旋转算法的详细信息,请参考Wiki:http://en.wikipedia.org/wiki/Mersenne_twister

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: