伪随机数生成算法分析5050309167岑嘉杰摘要伪随机数PRNG在.DOC

伪随机数生成算法分析5050309167岑嘉杰摘要伪随机数PRNG在.DOC

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
伪随机数生成算法分析 5050309167 岑嘉杰 摘 要 伪随机数(PRNG)在计算机软件设计中有很广泛的用途。本文介绍了基于数学方法的利用计算机产生伪随机数的几种方法,即线性同余法、延迟斐波纳契法和线性反馈移位寄存器法,任何伪随机数的产生都是运用递推的原理来生成的。 线性同余法LCG(Linear Congruence Generator)   选取足够大的正整数M和任意自然数n0,a,b,由递推公式: ni+1=(af(ni)+b)mod M i=0,1,…,M-1   生成的数值序列称为是同余序列。当函数f(n)为线性函数时,即得到线性同余序列: ni+1=(a*ni+b)mod M i=0,1,…,M-1   以下是线性同余法生成伪随机数的伪代码: Random(n,m,seed,a,b) {  r0 = seed;  for (i = 1;i=n;i++)  ri = (a*ri-1 + b) mod m } 其中种子参数seed可以任意选择,常常将它设为计算机当前的日期或者时间;m是一个较大数,可以把它取为2w,w是计算机的字长;a可以是0.01w和0.99w之间的任何整数。   应用递推公式产生均匀分布随机数时,式中参数n0,a,b,M的选取十分重要。   例如,选取M=10,a=b =n0=7,生成的随机序列为{6,9,0,7,6,9,……},周期为4。   取M=16,a=5,b =3,n0=7,生成的随机序列为{6,1,8,11,10,5,12,15,14,9,0,3,2,13,4,7,6,1……},周期为16。   取M=8,a=5,b =1,n0=1,生成的随机序列为{6,7,4,5,2,3,0,1,6,7……},周期为8。 延迟斐波纳契生成器(Lagged Fibonacci Generator) 延迟斐波纳契生成器(LFG)也是一种伪随机数生成器. LFG的目标是在"线性同余生成器"(linear congruential generator)的基础上进行提高.LFG是基于 Fabonacci序列的. 一, Fabonacci序列描述    Fabonacci序列可以使用如下递归式描述:    Sn = Sn ? 1 + Sn ? 2    一个更一般的表达是:    Sn = Sn ? j * Sn ? k MOD M. (0 j k)(M为2的m次方)    式中的操作符号*表达二元操作符号,可以是加\减\乘,甚至是位XOR操作。 j和k的值不能任意取,因为LFG对初始化十分敏感. 如果二元操作符号使用加法,就叫加法延迟Fabonacci生成器(ALFG);如果是乘法,就叫MLFG;如果是XOR,就叫Two-tap Generalized FeedBack Shift Register, 即在Mersenne twister里使用的TGFSR算法. 二,延迟Fabonacci生成器的属性     加法和减法LFG的最大周期是(2k - 1)*2M-1,如果使用Exclusive Or(XOR)操作,则周期是(2^k -1),乘法的LFG最大周期是 (2k - 1)*2M-3, 也就是ALFG的1/4. 如果LFG要达到最大周期,那么要求以下多项式:    y = X^i + X^j + 1 必须满足是y是原始多项式,不能被因式分解。所以j和k不能随便选择, 一般使用以下值:    {j = 7, k = 10}, {j = 5, k = 17}, {j = 24, k = 55}, {j = 65, k = 71}, {j = 128, k = 159}, {j = 6, k = 31}, {j = 31, k = 63}, {j = 97, k = 127}, {j = 353, k = 521}, {j = 168, k = 521}, {j = 334, k = 607}, {j = 273, k = 607}, {j = 418, k = 1279}    Art of computer programming 提供了以下j,k对:     (1,2), (1,3), (2,3), (1,4), (3,4), (2,5), (3,5), (1,6), (5,6), (1,7), (6,7), (3,7), (4,7), (4,9), (5,9), (3,10), (7,10), (2,11), (9,11), (1,15), (14,15), (4,15), (11,15), (7,15), (8,15), (3,17), (14,17), (5,17), (12,17), (6,17), (

文档评论(0)

xiaozu + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档