请输入您要查询的百科知识:

 

词条 随机种子
释义

简介

一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

方法

一般种子可以以当前的系统时间,这是完全随机的

算法1:平方取中法。

1)将种子设为X0,并mod 10000得到4位数

2)将它平方得到一个8位数(不足8位时前面补0)

3)取中间的4位数可得到下一个4位随机数X1

4)重复1-3步,即可产生多个随机数

这个算法的一个主要缺点是最终它会退化成0,不能继续产生随机数。

算法2:线性同余法

1)将种子设为X0,

2)用一个算法X(n+1)=(a*X(n)+b) mod c产生X(n+1)

一般将c取得很大,可产生0到c-1之间的伪随机数

该算法的一个缺点是会出现循环。

在windows平台下,可以考虑将如下参数作为影响种子的因素。

1.GetTickCount()

系统启动以来的嘀嗒时间

说明:该时间与系统运行时长相关,

2.GetCurrentProcessId()

当前进程Id号

说明:该Id与系统启动进程数量及次序有关,一般波动范围较小。

3.GetCurrentProcess()

当前进程句柄

说明:该句柄实质就是内存地址,但每次进程启动时地址值是不确定的。

4.GetProcessTimes()

进程时间参数

说明:-

5.GetCurrentThreadId()

当前线程Id号

6.GetCurrentThread()

当前线程句柄

7.GetThreadTimes()

线程时间参数

8.GetCurrentHwProfile()

Profile配置文件

9.GetSysColor()

系统Color

10.GetSystemInfo()

系统信息

11.GetSystemPowerStatus()

电源状态

12.GetKeyboardState()

键盘状态

13.GlobalMemoryStatus()

内存状态

14.time()

当前时间 秒

15.GUID

各硬件设备GUID

16.MAC

网卡mac

17.CPUID

CPU Id号

18.声卡录音噪音

该参量与环境相关

19.用户键盘间隔时间

该参量与用户习惯相关

其次,尽最大可能增加这些因素的维度。这里说的维度是指

种子结果与因素之间的关联程度。一般使用hash函数对多个

因素进行哈希运算。这样得到的种子具有较强的散列特性。

通过以上技术手段得到的种子产生的伪随机数是具有较好

统计特性的,它不依赖于某一台机器,某一时刻,某一方法,

而是复杂多变、让人捉摸不透难于重现的。

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 22:51:50