随机种子
计算机术语
随机种子(Random Seed)是计算机专业术语,一种以随机数作为对象的以真随机数(种子)为初始条件的随机数。一般计算机的随机数都是伪随机数,以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。
计算方法
一般种子可以以当前的系统时间,这是完全随机的
算法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平台下,可以考虑将如下参数作为影响种子的因素。
影响因素
系统启动以来的嘀嗒时间
说明:该时间与系统运行时长相关,
当前进程Id号
说明:该Id与系统启动进程数量及次序有关,一般波动范围较小。
当前进程句柄
说明:该句柄实质就是内存地址,但每次进程启动时地址值是不确定的。
进程时间参数
说明:
⒌GetCurrentThreadId
当前线程Id号
当前线程句柄
⒎GetThreadTimes
线程时间参数
⒏GetCurrentHwProfile
系统Color
⒒GetSystemPowerStatus
电源状态
⒓GetKeyboardState
键盘状态
⒔GlobalMemoryStatus
内存状态
⒕time
当前时间 秒
⒖GUID
各硬件设备GUID
⒗MAC
网卡mac
CPU Id号
⒙声卡录音噪音
该参量与环境相关
⒚用户键盘间隔时间
该参量与用户习惯相关
其次,尽最大可能增加这些因素的维度。这里说的维度是指
种子结果与因素之间的关联程度。一般使用hash函数对多个
因素进行哈希运算。这样得到的种子具有较强的散列特性。
通过以上技术手段得到的种子产生的伪随机数是具有较好
统计特性的,它不依赖于某一台机器,某一时刻,某一方法,
而是复杂多变、让人捉摸不透难于重现的。
参考资料
最新修订时间:2024-02-09 11:42
目录
概述
计算方法
参考资料