词条 | 随机种子 |
释义 | 简介一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。 方法一般种子可以以当前的系统时间,这是完全随机的 算法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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。