积极答复者
Random的seed的意义到底是什么?

问题
答案
-
根c/C++类似,所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。
所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
另外需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。
你可以到网上找一个真正的随即函数,以替换标准库Random。 我过去有一个C++的,只是不在手头上。 你要是找不到在找我吧。
信奎爷,无所畏惧!!- 已建议为答案 Charles Shao 2011年4月6日 1:59
- 已标记为答案 啦啦控 2011年4月7日 3:22
全部回复
-
你好
在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 -
根c/C++类似,所有标准库提供的Random函数其实都是假Random,真正的Random函数式不需要Seed的。
所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
另外需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。
你可以到网上找一个真正的随即函数,以替换标准库Random。 我过去有一个C++的,只是不在手头上。 你要是找不到在找我吧。
信奎爷,无所畏惧!!- 已建议为答案 Charles Shao 2011年4月6日 1:59
- 已标记为答案 啦啦控 2011年4月7日 3:22