检索02--随机数种子的一些概念和理解
Random ran = new Random();
括号里存放的即为随机数的种子,如果不存放,默认为计算机的系统时间;
默认情况下,Random 类的无参数构造函数使用系统时钟生成其种子值,而参数化构造函数可根据当前时间的计时周期数采用 Int32 值。但是,因为时钟的分辨率有限,所以,如果使用无参数构造函数连续创建不同的 Random 对象,就会创建生成相同随机数序列的随机数生成器。
种子跟产生随机数的算法有关,事实上没有绝对真实的随机数,我们所说的随机数,其实是在一个初始数字的基础上(也就是种子)通过移位什么的得到的,那么,也就以为这,同一个种子,会总是得到相同的随机序列。
随机数种子就是产生随机数的源头机制是通过一个复杂(有时不是很复杂)的函数,将一个种子的值转化为随机数空间中的某一个点上(数),好的函数会产生很大的空间,并且产生的随机数均匀的散布在空间中。
A.相同种子的随机数,具有相同的随机数序列。
比如:你的种子是123456,第一次调的时候,第一个随机数为N,那么,不管在什么地方调,它的第一个随机数都将为N,因为种子不变.但是这个随机数列表中的各项值,是随机的。也就是说,第二个随机数为N2..。
如果应用程序需要不同的随机数序列,则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如,从系统时钟派生出种子值。但是,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。
B.不同的种子具有不同的序列。
所以有Random rdn = new Random(); 就是以当前时间为种子,用来长生不同的随机数。经常获得第一个随机数。