none
Random的seed的意义到底是什么?

    问题

  •       Random初始化的时候,可以以一个INT32作为参数,称为seed,MSDN上的解释是:“伪随机数是以相同的概率从一组有限的数字中选取的......随机数的生成是从种子值开始......”

         请问这样一句话是什么意思?是说这组伪随机数的最小值是seed吗?which显然不是一个意思。。。因为使用random.Next(int num)出来的数字只比num小,跟seed无关。那么这样的seed和伪随机数究竟是什么意思呢?望大虾解释。谢谢。

    2011年4月5日 9:42

答案

  • 根c/C++类似,所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。

    所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。

    另外需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。

    你可以到网上找一个真正的随即函数,以替换标准库Random。 我过去有一个C++的,只是不在手头上。 你要是找不到在找我吧。


    信奎爷,无所畏惧!!
    2011年4月6日 1:58

全部回复

  • 你好

    在Random 如果我們初始化的SEED 每次都是用同一個VALUE 的話

    E.G.

     

     

    Dim r As New Random(201)

            MsgBox(r.Next)

            Dim s As New Random(201)

            MsgBox(s.Next)

    OR 

     

    Dim r As New Random(201)

            MsgBox(r.Next(20))

            Dim s As New Random(201)

            MsgBox(s.Next(20))

     

    他們所得出的Random數值都會是一樣的 因為是使用同一個seed 的關係

    所以我覺得如果你想打RANDOM 的數值..或RULE 要consistent 是才會自行在初始化時自定SEED 的

    otherwise 如果使用 dim r as New Random這便會使用時間來定義這個seed的value 會比較可靠一點 

    如果你想你的random 數字是跟著一個random sequence 出現的話可以在初始化時自定一個Seed

     

    而Random.Next(int num)

    因為.Next(int num) num是用來這個RANDOM 數的最大值的argument所以是跟seed無關的

    Please correct me if my concept is wrong

     

     


    Chi
    2011年4月5日 20:29
    版主
  • 根c/C++类似,所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。

    所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。

    另外需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。

    你可以到网上找一个真正的随即函数,以替换标准库Random。 我过去有一个C++的,只是不在手头上。 你要是找不到在找我吧。


    信奎爷,无所畏惧!!
    2011年4月6日 1:58
  • 嗯,谢拉。可是seed的效果我都知道,我只是想知道seed的意义在这个伪随机算法里面的意义。不过谢拉还是。Charles回复的不错。
    2011年4月7日 3:22