C#中的随机数种子

来源:互联网 发布:迪杰斯特拉算法 严蔚敏 编辑:程序博客网 时间:2024/04/27 01:04
C#中:  
  A.相同种子的随机数,具有相同的随机数序列。  
  比如:你的种子是123456,第一次调的时候,第一个随机数为N,那么,不管在什么地方调,它的第一个随机数都将为N,因为种子不变.但是这个随机数列表中的各项值,是随机的。也就是说,第二个随机数为N2..。 
  B.不同的种子具有不同的序列。  
  所以有Random rdn = new Random(); 就是以当前时间为种子,用来长生不同的随机数。经常获得第一个随机数。
种子跟产生随机数的算法有关,事实上没有绝对真实的随机数,我们所说的随机数,其实是在一个初始数字的基础上(也就是种子)通过移位什么的得到的,那么,也就以为这,同一个种子,会总是得到相同的随机序列。
随机数种子就是产生随机数的源头机制是通过一个复杂(有时不是很复杂)的函数,将一个种子的值转化为随机数空间中的某一个点上(数),好的函数会产生很大的空间,并且产生的随机数均匀的散布在空间中。
如果应用程序需要不同的随机数序列,则使用不同的种子值重复调用此构造函数。一种产生唯一种子值的方法是使它与时间相关。例如,从系统时钟派生出种子值。
   但是,如果应用程序在一个较快的计算机上运行,则该计算机的系统时钟可能没有时间在此构造函数的调用之间进行更改,Random 的不同实例的种子值可能相同。这种情况下,请应用一个算法来区分每个调用的种子值。
例如,以下的 C# 表达式使用按位求补运算来生成两个不同的种子值,即使系统时间值相同也可以。
   int seekSeek = unchecked((int)DateTime.Now.Ticks);
// int seekSeek = unchecked((int)DateTime.Now.Ticks);
   
Random seekRand = new Random(seekSeek);