浅谈伪随机数发生器
专业实验类:伪随机信号发生器

H a r b i n I n s t i t u t e o f T e c h n o l o g yEDA技术高级应用实验报告姓名:禾小鬼同组人:学号:16S班级:信息2班指导教师:xxx院系:电信学院实验二伪随机信号发生器一、实验原理实验要求设计一个伪随机信号发生器,什么是伪随机信号发生器?如果一个序列,一方面它是可以预先确定的,并且是可以重复地生产和复制的;一方面它又具有某种随机序列的随机特性(即统计特性),我们便称这种序列为伪随机序列。
因此可以说,伪随机序列是具有某种随机特性的确定的序列。
它们是由移位寄存器产生确定序列,然而他们却具有某种随机序列的随机特性。
因为同样具有随机特性,无法从一个已经产生的序列的特性中判断是真随机序列还是伪随机序列,只能根据序列的产生办法来判断。
伪随机序列系列具有良好的随机性和接近于白噪声的相关函数,并且有预先的可确定性和可重复性。
这些特性使得伪随机序列得到了广泛的应用,特别是在CDMA系统中作为扩频码已成为CDMA技术中的关键问题。
特性为序列中两种元素出现的个数大致相等;如果把n个元素连续出现叫做一个长度为n的元素游程,则序列中长度为n的元素游程比长度为n+1的元素游程多一倍;序列有类似白噪声的自相关函数。
实验指导书上已经给出一个4位伪随机信号发生器的原理图,如图1所示,一个4位的移位寄存器,第1级和第4级的输出信号通过一个异或门反馈到第1级的输入。
随着连续的时钟周期信号,可以生成15个不同的测试向量。
图1 伪随机二进制序列产生器在开始之前,首先要明确设计目的,我们的想要用电路图方法实现设计一个“伪随机信号发生器”。
首先设计一个4位伪随机信号发生器,按照图1所示连接电路即可。
然后,扩展到多位。
二实验过程和结果1.第一步:建立一个新的工程新建工程的过程中,最重要的是设置器件,不同的器件的,设计之间并不兼容。
会有一个综合的信息框,注明了我所做的设置,看看没问题就可以了。
参数化伪随机序列发生器

WENKU DESIGN
2023-2026
END
THANKS
感谢观看
KEEP VIEW
WENKU DESIGN
WENKU DESIGN
WENKU
REPORTING
https://
WENKU DESIGN
WENKU DESIGN
2023-2026
ONE
KEEP VIEW
参数化伪随机序列发 生器
WENKU DESIGN
WENKU DESIGN
WENKU
REPORTING
https://
CATALOGUE
目 录
• 引言 • 参数化伪随机序列发生器的原理 • 参数化伪随机序列发生器的实现 • 参数化伪随机序列发生器的性能分析 • 参数化伪随机序列发生器的应用实例 • 结论与展望
PART 06
结论与展望
结论
1
参数化伪随机序列发生器是一种高效、灵活的随 机数生成方法,适用于各种应用场景,如密码学、 统计学、计算机模拟等。
2
通过调整参数,可以控制随机数的分布、周期、 质量等特性,以满足不同需求。
3
与传统伪随机数生成器相比,参数化伪随机序列 发生器具有更好的随机性和更快的生成速度。
实际线性复杂度
实际应用中,伪随机序列发生器的线性复杂度受到多种因 素的影响,如算法设计、初始状态等。
PART 05
参数化伪随机序列发生器 的应用实例
加密通信
01
02
03
加密算法
数据完整性
网络通信安全
伪随机序列发生器用于生成加密 算法所需的密钥,确保通信安全。
通过使用伪随机数生成器,可以 创建消息的数字签名,验证数据 的完整性和真实性。
17伪随机数发生器的设计

119
原胞自动机伪随机数发生器同样是通过寄存器的延时来实现。每当一个时钟 脉冲到来时,每一级存储器 Qi 的值根据 CA 规则来决定,CA90 和 CA150(即 CA01011010B 和 CA10010110B)算法规则的规则查找表分别如表 1,2 所示,其中相 邻单元的值为η,输出值为 Q=f(η)。CA90 算法规则等价的逻辑函数是由当前单 元的相邻左右单元的状态值相异或,而 CA150 算法规则等价的逻辑函数是由相邻 当前单元和左右单元的状态值相异或。下面分别给出它们的逻辑函数表达式。
3.原胞自动机 一个原胞自动机(Cellular Automata,CA)是一种有限状态机,有 n 个离散
的单元,每个单元以离散的节拍进化,其中每个单元的下一个状态值由该单元的 当前状态值和其相邻的当前状态值通过查找表(Look-UpTable,LUT)(或等价的逻 辑函数)来决定,而相邻单元的状态值是独立的。
Cn
Cn-1
Cn-2
C1
C0=1
图 1 传统多级线性移位寄存器结构
3.m 序列 m 序列(maximum-length)是一类最大长度线性移位寄存器序列的简称。 m
序列是目前广泛应用的一种伪随机序列,其在通信领域有着广泛的应用,如扩频 通信,卫星通信的码分多址,数字数据中的加密、加扰、同步、误码率测量等领 域。
表 1 CA90 规则查找表
η 111 110 101 100 011 010 001 000
第3章-第1讲伪随机数发生器与单向散列函数

H4 = 0xC3D2E1F0
3) 按512位的分组处理输入消息 SHA运算主循环包括四轮,每轮20次操作。 逻辑函数序列f0、f1、…、f79,每个逻辑函数的输入为三个32位字,输 出为一个32位字: ft (B,C,D) = (B^C) ˇ(~B^D) ft (B,C,D) = B+C+D ft (B,C,D) = (B^C) ˇ(B^D) ˇ(C^D) ft (B,C,D) = B+C+D 还用到常数字序列K0、K1、…、K79: Kt = 0x5A827999 (0≤t≤19), Kt = 0x6ED9EBA1 (20≤t≤39) (0≤t≤19) (20≤t≤39) (40≤t≤59) (60≤t≤79)
512 bit Y L- 1 512 H SHA 160位 消息 摘要
160
图 SHA–1算法
1) 填充消息
将消息填充为512位的整数倍,填充方法和MD5完全相同。幻灯片 16
2) 初始化缓冲区
SHA要用到两个缓冲区,均有五个32位的寄存器。 第一个缓冲区:A、B、C、D、E;
第二个缓冲区:H0、H1、H2、H3、H4。
A =D; B =temp; C =B; D = C;
end (4) Let A = A + AA ,B = B + BB,C = C + CC,D = D + DD
5)输出 在处理完Yn后,128位的消息摘要为A、B、C、D级联的结果。
伪随机数列发生器-TsouShih

8位伪随机数列发生器天津工业大学理学院XXXXXXXXXX2011年12月09日背景如果一个序列,一方面它是可以预先确定的,并且是可以重复地生产和复制的;一方面它又具有某种随机序列的随机特性(即统计特性),我们便称这种序列为伪随机序列。
因此可以说,伪随机序列是具有某种随机特性的确定的序列。
它们是由移位寄存器产生确定序列,然而他们却具有某种随机序列的随机特性。
因为同样具有随机特性,无法从一个已经产生的序列的特性中判断是真随机序列还是伪随机序列,只能根据序列的产生办法来判断。
伪随机序列系列具有良好的随机性和接近于白噪声的相关函数,并且有预先的可确定性和可重复性。
这些特性使得伪随机序列得到了广泛的应用,特别是在CDMA系统中作为扩频码已成为CDMA技术中的关键问题。
伪随机序列的特性对系统的性能有重要的影响,因此有必要了解和掌握伪随机序列的的概念和特性。
原理伪随机数列的概念与特性伪随机数列也称作PN码。
它具有近似随机数列(噪声)的性质,它的相关函数接近白噪声的相关函数 (Δ函数 ),即有窄的高峰或宽的功率谱密度 ,使它易于从其他信号或干扰中分离出来。
而又能按一定的规律(周期)产生和复制的序列。
因为随机数列是只能产生而不能复制的,所以称其为“伪”随机数列。
广泛应用于通信、雷达、导航等重要的技术领域。
近年来 ,在自动控制、计算机、声学、光学测量、数字式跟踪和测距系统 ,以及数字网络系统的故障分析检测也得到广泛的应用。
伪随机数列具有这样的特点:(1)每个周期中,“1”码出现2n-1次,“0”码出现2n-1次,即0、1出现概率几乎相等。
(2)序列中连1的数目是n,连0的数目是n-1。
(3)分布无规律,具有与白噪声相似的伪随机特性。
M序列m序列码发生器是一种反馈移位型结构的电路,它由n位移位寄存器加异或反馈网络组成,其序列长度M=2n-1,只有一个多余状态即全0状态,所以称为最大线性序列码发生器。
由于其结构已定型,且反馈函数和连接形式都有一定的规律,因此利用查表的方式就设计出m序列码。
伪随机数生成器 系统熵

伪随机数生成器系统熵什么是伪随机数生成器?伪随机数生成器(Pseudo Random Number Generator, PRNG)是一种算法或设备,通过一系列的计算步骤生成看似随机的数值序列。
与真随机数生成器(True Random Number Generator, TRNG)不同,伪随机数生成器是基于确定性的算法生成的,因此所获得的随机数实际上是可以重复的(在给定相同种子的情况下)。
尽管伪随机数生成器的输出序列在实际应用中足够随机,但它们并不是真正的“随机”。
伪随机数生成器的原理伪随机数生成器通常基于数学算法,如线性同余法或补码运算等。
这些算法利用初始种子(seed)作为输入,然后通过一系列复杂的计算步骤,生成随机的数字序列。
这个序列可以作为随机数在各种应用中使用,例如模拟实验、加密、统计分析等。
伪随机数生成器的关键问题是如何在存在确定性算法的情况下,生成看似随机的数字序列。
为了达到这个目标,伪随机数生成器通常使用一个大的周期(Period),即在输出序列中循环重复的次数非常大。
这样,在给定初始种子的情况下,每次使用伪随机数生成器所生成的数值序列都会是看似随机的,从而满足实际应用的需求。
然而,由于伪随机数生成器是基于确定性算法,它们的输出序列实际上是可以被预测的。
只要知道生成算法和初始种子,就可以重复生成相同的随机数序列。
因此,在一些应用中,特别是需要高度安全性和随机性的领域(如密码学),伪随机数生成器并不适用。
系统熵与伪随机数生成器在伪随机数生成器中,系统熵(Entropy)是一个重要概念。
系统熵可以看作是伪随机数生成器输出序列的随机性度量,即衡量其接近真随机序列的程度。
系统熵通常用比特(bit)表示,即一个序列可以有多少位被称为“真随机”。
系统熵的计算是通过考察输出序列中的统计特征来实现的。
比如,伪随机数生成器生成的随机序列在理想情况下应具有均匀的分布、独立性和长周期性。
如果输出序列具备这些特征,那么它越接近真随机序列,系统熵就越高。
伪随机数发生器
伪随机数发生器程序说明文档——《密码编码学与网络安全》实验六一、基本变量、数据结构、函数说明:注意:基本变量、数据结构、函数说明和实验二DES算法是一样的。
没有任何变化。
1.基本变量定义部分:flag:boolean型变量,用于标识是解密还是加密过程。
2.数据结构定义部分:DT64:int型一维数组,64位的随机时间串。
V64: int型一维数组,64位的种子值。
sum64:int型一维数组,用于存储模二加的中间结果。
R64:int型一维数组,用于存储64位伪随机数。
bytekey:byte型一维数组,用于存储密钥及其子密钥字节流信息。
IP:int型一维数组,静态,用于存储初始置换矩阵。
IP_1:int型一维数组,静态,用于存储初始置换矩阵的逆矩阵。
PC_1:int型一维数组,静态,用于存储置换选择矩阵1。
PC_2:int型一维数组,静态,用于存储置换选择矩阵2。
E:int型一维数组,静态,用于存储扩充置换矩阵。
P:int型一维数组,静态,用于置换函数矩阵。
S_Box:int型三维数组,静态,用于SBox矩阵设置。
LeftMove:int型一维数组,静态,用于设置左移位置列表。
keydata:int型一维数组,用于存储二进制加密密钥。
encryptdata:int型一维数组,用于存储二进制加密数据。
EncryptCode:byte型一维数组,用于存储加密操作完成后的字节数组。
KeyArray:int型二维数组,用于存储密钥初试化后的二维数组。
3.基本函数定义:UnitDes:初始化函数,用于将密钥初始化成字节型数组密钥。
KeyInitialize:用于初始化密钥,生成每一轮的子密钥。
Encrypt:每一轮的加密函数。
ReadDataToBirnaryIntArray:将数据转换为二进制数,存储到数组。
LeftBitMove:循环移位操作函数。
LoopF:落实到每一轮的具体操作函数。
GetEncryptResultOfByteArray:将存储64位二进制数据的数组中的数据转换为八个整数(byte)。
真伪结合的随机数发生器算法研究
真伪结合的随机数发生器算法研究
随机数生成器是计算机科学中一个重要的算法,其应用范围广泛,比
如密码学、模拟器、游戏等等。
然而,随机数生成器的可靠性和安全
性成为了一个亟待解决的问题。
因此,真伪结合的随机数发生器算法
研究成为了研究热点之一。
真伪结合的随机数发生器算法,简称TRNG算法,是一种不依赖于计
算机的随机数发生器,它是一种通过测量物理过程的随机变化,产生
真随机数的算法。
与之相对的是伪随机数发生器算法,它是一种基于
计算机算法来生成随机数的方法。
伪随机数的生成过程是按照某种固
定的计算方式来生成一串看似随机的数字序列,并不是真正的随机数。
TRNG的核心技术基于不可预测的自然随机事件,比如光电效应、热
噪声、放射性衰变等等。
使用TRNG算法产生真随机数的过程比使用
伪随机数发生器要更加安全可靠。
因为TRNG算法不依赖于固定的计
算方式,而是根据物理过程的随机性变化来生成随机数。
TRNG算法可以广泛应用于密码学、模拟器、游戏等领域,并且可以
在保证安全性的同时提高计算机系统的效率。
在密码学中,真随机数
可以用于生成加密密钥,保证密钥的安全性;在模拟器中,真随机数
可以用于模拟物理实验,提高模拟器的准确性;在游戏中,真随机数
可以用于生成随机道具、随机奖励等等,增加游戏的趣味性。
总的来说,随机数生成器是计算机科学中一个重要的算法,而TRNG 算法作为一种真随机数发生器,在保证安全性和可靠性的前提下,可以应用于密码学、模拟器、游戏等领域。
因此,TRNG算法的研究具有重要的理论及实践意义。
伪随机码发生器研究与设计
伪随机码发生器研究与设计伪随机码发生器是一种通过其中一种算法生成伪随机序列的电子设备或程序。
与真随机数发生器不同,伪随机码发生器是基于确定性算法生成的序列,其看似是随机的,但实际上可以通过逆向计算或算法分析来预测出后续的码值。
1.算法选择:伪随机码发生器的性能很大程度上取决于所选择的算法。
常用的算法包括线性反馈移位寄存器(LFSR)、离散余弦变换(DCT)、线性同余发生器(LCG)等。
研究者可以根据特定需求选择合适的算法,并通过数学分析、理论推导和模拟实验来评估其性能。
2.随机性测试:伪随机码发生器生成的序列是否具备足够的随机性是一个关键问题。
为了评估伪随机码发生器的性能,需要设计合适的随机性测试方法。
常用的测试方法包括统计分析、频谱分析、序列均匀性检测、序列独立性检验等。
3.秘密性与安全性:在密码学应用中,伪随机码发生器的秘密性和安全性是非常重要的。
秘密性指发生器的设计和参数应保密,只有掌握这些信息的人才能伪装成合法用户。
安全性指发生器生成的序列在密码攻击下能够抵抗各种攻击手段。
确保秘密性和安全性需要对伪随机码发生器进行全面的安全性分析和风险评估,以便发现可能存在的漏洞和弱点,并采取相应的安全措施和改进措施。
4.性能优化:伪随机码发生器的性能包括生成速度、存储空间和计算复杂度等方面。
研究者需要在保证安全性的前提下,尽可能提高伪随机码发生器的性能。
这包括改进算法、优化参数选择、使用硬件加速等。
总结起来,伪随机码发生器的研究与设计需要深入理解随机性、密码学和计算机科学等领域的知识,并结合具体应用需求来选择合适的算法和进行性能优化。
通过合理的算法设计、随机性测试和安全性分析评估,以及针对性的安全措施和改进措施,可以设计出安全可靠的伪随机码发生器。
数学中的随机模拟技术
数学中的随机模拟技术数学是一门抽象而深奥的学科,而随机模拟技术作为数学中的一项重要工具,为解决现实世界中的复杂问题提供了一种有效的方法。
随机模拟技术通过生成随机数,并利用这些随机数进行模拟,可以在某种程度上近似地模拟和预测实际事件的发展和结果。
本文将介绍数学中的随机模拟技术,并探讨其在不同领域的应用。
一、随机数生成随机数的生成是随机模拟技术的基础。
在计算机科学和数学中,有多种方法可以生成随机数。
常用的方法包括伪随机数生成器和真随机数生成器。
1. 伪随机数生成器伪随机数生成器是利用确定性算法生成的数列,其数值看似随机,但实际上是可预测的。
它们的生成速度快,并且满足统计上的随机性要求,常见的算法包括线性同余法和梅森旋转算法。
2. 真随机数生成器真随机数生成器利用物理现象产生的随机性,例如测量大气噪声或者核衰变过程中的时间差。
真随机数生成器生成的随机数更具有随机性,但是速度较慢。
在随机模拟中,根据需要选择适当的随机数生成方法非常重要。
二、蒙特卡罗方法蒙特卡罗方法是一类基于随机模拟的数值计算方法,特别适用于解决概率统计、数学优化和物理建模等问题。
蒙特卡罗方法基于大数定律,通过大量的随机样本模拟目标问题,从而得到问题的近似解。
实际中,我们可以通过蒙特卡罗方法来计算复杂的积分、求解微分方程、模拟随机游走等问题。
例如,在金融领域中,蒙特卡罗方法被广泛应用于期权定价、风险管理和投资组合优化等方面。
三、马尔科夫链蒙特卡罗方法马尔科夫链蒙特卡罗方法是一种扩展的蒙特卡罗方法,通过构建马尔科夫链,利用随机抽样和模拟方法进行计算。
马尔科夫链蒙特卡罗方法在统计物理学、计算机模拟和贝叶斯统计中都有广泛的应用。
例如,在图像处理中,我们可以使用马尔科夫链蒙特卡罗方法进行图像分割和图像去噪等任务。
在机器学习中,马尔科夫链蒙特卡罗方法也常被用于参数估计和模式识别等问题。
四、随机模拟在优化问题中的应用随机模拟技术在优化问题中也有重要的应用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:32*32=00/0010/24→(下面又回到第二层的计算)10*10=00/0001/00→1→0 即,seed∈[32,38],i=10
...... 56*56=00/0031/36→31*31=961→00/0009/61→9→0
这里称为第二层 (3)由此可通过计算得,seed∈[57,75]为第三层;seed∈[76,87]为第四层;seed∈[88, 93]为第五层;seed∈[94,96]为第六层;seed∈[97,98]为第七层;seed=99 为第八层。
(1)显然,当 seed∈[10,31], seed = 00000ix1 x2 例: 10*10=100
2
(i, x1 , x2 0,1, 2...9)
→00/0001/00→1
seed∈[10,14]时, i 1 seed∈[15,17]时, i 2
15*15=225→00/0002/25→2
推广一:最多可以生成 2m 个不为零的元素,m/2 位数(及以内)必退化为零。 推广二:除退化为零外,随机数序列还出现随机数序列循环和收敛的情况。
二、LCG(linear congruential generator)线性同余法 古老的 LCG(linear congruential generator)代表了最好最朴素的伪随机数产生器算法。 主 要原因是容易理解,容易实现,而且速度快。 LCG 算法数学上基于公式: X(n+1) = (a * X(n) + c) % m 其中,各系数为: 模 m, m > 0 系数 a, 0 < a < m 增量 c, 0 <= c < m 原始值(种子) 0 <= X(0) < m 其中参数 c, m, a 比较敏感,或者说直接影响了伪随机数产生的质量。一般而言,高 LCG 的 m 是 2 的指数次幂(一般 2^32 或者 2^64),因为这样取模操作截断最右的 32 或 64 位就可以 了。多数编译器的库中使用了该理论实现其伪随机数发生器 rand()。C 语言的 rand()函数
以此类推, 31*31=961→00/0009/61→9 i9 下面就回到了第一层的计算,变为一位数来考虑
ห้องสมุดไป่ตู้
i 2 81 100 ,显然也会退化为零
这里称为第一层 (2)seed∈[32,56], seed 0000ix1 x2 (i [10,31], x1 , x2 0,1, 2...9)
首先,这个算法不只是有退化成 0 的情况。但是,这也是其中一种情况。由此计算可得,
结论一
若此算法序列中出现两位数或一位数(包括种子就是两位数或一位数的情况),
必定退化为零,且序列最多生成 8 个不为零的元素。
下面是证明的过程: 1、当我们输入种子(seed)为 1-9(一位数)时,易得退化为零。 例: 9*9=81→00/0000/81→0 此时,序列中并没有生成任何随机数。 2、当 seed∈[10,99]时,可分成八层嵌套来讨论。
4100
→
8100
→
6100 ↑ 6900 ↑ 1300 ↑ 7492 ↑ 3708 ↑ 609 ↑ 1030
→
2100 ↑ 3900 ↑ 1179
↑ ↑ ↑ 2900 7100 900 ↑ ↑ 2300 2700 ↑ ↑ 2496 2504 ↑ 8441 ↑ 9790 ↑ ↑ 1726 5655 观察 2,3 循环亦有类似规律。
Mersenne Twister 有很多长处,例如:周期 2^19937 - 1 对于一般的应用来说,足够大了, 序列关联比较小,能通过很多随机性测试。 Python 中的随机数模块 random 就是采用了梅森旋转算法来产生伪随机数列,C++11 中也 有梅森旋转算法实现的随机数生成器。 五、总结 对于某个特殊的计算机随机数生成算法, 只要是伪随机数生成的算法, 当我们知道种子以 及对应的算法,必定可以模拟整个随机序列生成过程,得到与实际生成的随机序列一致。最 重要的两点就是种子和伪随机数生成器的算法。种子的话,即使是用系统时间作为种子,我 们也可以设定定时器,重新调节系统时间,到达目标时间时获取种子,然后执行算法。算法 的话,可以先尝试用常用的几种算法模拟过程。可能的话,可能可以通过反编译,窃取源代 码文件等手段获取种子和算法。所以说伪随机数的生成方式涉及信息安全,密码学等领域, 是十分值得重视的,一个好的伪随机数算法也必须得到封装保护。在成本允许的情况下,使 用真随机数也是可以的。
猜想 1:对于序列中的入口数(4100,8100,6100,2100),总存在特定序列(路径),
种子经算法沿路径到达入口数,最终进入循环。
猜想 2:序列由入口数作为树根,分别是 4 个 r 叉树(分支点有若干个)
推广:m=4 的情况可以推广到 m=6 位,m=8 位...... 例如 m=6 时,三位数以内必退化为零,各层嵌套区间 [1,31][32,178][179,423][424,651][652,807]...... m=8 时,四位数以内必退化为零,各层嵌套区间为[1,99][100,999][1000,3162]......
附录:
平方取中.c #include<stdio.h> int main() { unsigned int seed=0,temp; int i,j,first,number1[5000][100] = {0}; FILE *fp; fp=fopen("d:\\a.txt","w"); for(j=0;j<5000;j++) { if(j==0){printf("Enter the seed:");
使用了 srand()提供的种子以及线性同余算法,具体通过代码验证了,见附录。Java Random 类被封装 无法看 nextInt() nextFloat()源代码,但是估计也是使用了线性同余。
四、梅森旋转算法(Mersenne twister) 梅森旋转算法是 Makoto Matsumoto (松本)和 Takuji Nishimura (西村)于 1997 年开发 的伪随机数产生器, 基于有限二进制字段上的矩阵线性再生。 可以快速产生高质量的伪随机 数,修正了古老随机数产生算法的很多缺陷。常见的有两个变种 Mersenne Twister MT19937 和 Mersenne Twister MT19937-64。 说到梅森旋转算法, 不得不提一下线性反馈移位寄存器 (LFSR) , 线性反馈移位寄存器 (linear feedback shift register, LFSR)是指,给定前一状态的输出,将该输出的线性函数再用 作输入的移位寄存器。 异或运算是最常见的单比特线性函数: 对寄存器的某些位进行异或操 作后作为输入,再对寄存器中的各比特进行整体移位。 首先,移位寄存器包括两个部分
10632 =1129969→01129969(add 0)
↓ N1=1299 Then,6874 8741 0 2518 4050 0 3403 4025 0 5804 2006 0 6864 240 0 1144 576 0 3087 3317 0 5295 24 0 370 5 1369 0 01/1299/69
浅谈伪随机数发生器(pseudo-random number generator)算法
何 唯 数学与信息学院 14 信息与计算科学 3 班 201430120308 关键词: Prng 种子 平方取中法 线性同余 一、种子 C 语言常用产生随机数函数 rand(),通过 time()函数获取当前时间,传递给 srand() 函数,处理后提供给 rand()函数产生随机序列。在这个例子中的当前时间(据说是从 1970 年 1 月 1 日零时零分零秒到目前的秒数)就是所谓的随机种子,随机种子之于伪随机数发生器,就 像数列首项之于数列,是产生的随机序列的开端。当种子经过特定算法处理,就成为了一段 随机序列。当然,种子不能为常量,因为我们需要每次使用的随机序列都是不一样的。例, rand()函数在没有使用 srand()设置种子时,默认种子是 1,然后随机序列前十个数字每次 都是 41,67,34,0,69,24,78,58,62,64。显然,这就是我们要当前时间这样的随机 数作为种子的原因。每时每刻你取当前时间都是相对随机的,可以看作随机的种子。 二、取中法 定义:选择一个 m 位数 Ni 作为种子平方计算,若不足 2m 个位,在前补 0。在这个数选中 间 m 个位的数,作为结果 Ni+ 1。以此迭代下去。(m 只能为偶数,这样才能取中!!) 例如 m=4 时的平方取中: 1)将种子设为 N0,并 mod 10000 得到 4 位数 2)将它平方得到一个 8 位数(不足 8 位时前面补 0) 3)取中间的 4 位数可得到下一个 4 位随机数 N1 4)重复 1-3 步,即可产生随机数序列 例:The seed is 1063 (N0=1063) ↓ 1063 mod 10000 =1063 ↓
如图,假设有种子 1000,经过 4 位的线性反馈移位寄存器用梅森旋转算法计算,按 这个四阶本原多项式,a0→x^4,a1→x^3,a2→x^2,a3→x,由于 本原多项式只有 x^4,x 系数不为 0,于是 a0 和 a3 进行异或运算,产生结果赋给 a3;a3 的
值给 a2,依次移位。所以 1000 得到了 1100,1100 得到了 1110.可以看出周长为 15。在这 一个周期里面涵盖了开区间 有很好的随机性。 内的所有整数,并且都是没有固定顺序出现的,
结论二:除退化为零外,随机数序列还出现随机数序列循环和收敛的情况。
还是以 m=4 为例,三种收敛的情况,分别为: 1、100→100→100→100→100 2、2500→2500→2500→2500→2500 3、7600→7600→7600→7600→7600 首先, 讨论收敛的情况, 通过用 C 语言编程计算可以得到属于这三种收敛的种子个数以 及数值。(具体数据见附录) 还会出现三种循环的情况,分别为: 1、2100→4100→8100→6100→2100 2、1600→5600→3600→9600→1600 3、0540→2916→5030→3009→0540 然后,由于循环出现的几率比较大,计算机计算比较麻烦,所以观察大量数据寻找这三 种循环的出现规律,有初步发现: