关于Random中的随机数种子Seed
2015-02-06 15:19
183 查看
Random初始化的时候,可以以一个INT32作为参数,称为seed,MSDN上的解释是:“伪随机数是以相同的概率从一组有限的数字中选取的......随机数的生成是从种子值开始......”
所有标准库提供的Random函数其实都是假Random,提供的随机数也是伪随机数,真正的Random函数式不需要Seed的。所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。可以到网上找一个真正的随机函数,以替换标准库Random。
所有标准库提供的Random函数其实都是假Random,提供的随机数也是伪随机数,真正的Random函数式不需要Seed的。所谓假Random,是指所返回的随机数字其实是一个稳定算法所得出的稳定结果序列,而不是真正意义上的随机序列。 Seed就是这个算法开始计算的第一个值。所以就会出现只要seed是一样的,那么后续所有“随机”结果和顺序也都是完全一致的。 通常情况下,你可以用 DateTime.Now.Millisecend() 也就是当前始终的毫秒来做Seed .因为毫秒对你来说是一个1000以内的随即数字。 这样可以大大改善保准库的Random结果的随机性。 不过这仍然算不上是完全随机,因为重复的概率还是千分之一。
需要注意的是,如果一直调用标准库Random,那么在调用了N次以后,输出结果就会循环最开始的序列了。也就是说,标准库Random所能生成的不同结果的个数也是有限的。32位系统一般也就是几万次以后就会出现重复。可以到网上找一个真正的随机函数,以替换标准库Random。
相关文章推荐
- Tensorflow中关于随机数生成种子tf.set_random_seed()
- Tensorflow随机数生成种子tf.set_random_seed()
- 详解mxnet.random.seed。即随机数生成种子。
- 关于C++随机数生成中种子值设置的一点总结,解决随机数序列重复问题
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- 关于Random的构造器 Random(long seed)的一些思考
- 改变random.seed()种子值,获取不同的随机值
- .Net中关于Random类产生的随机数相同问题解决
- nump中的为随机数产生器的seed():np.random.RandomState
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- 关于Random类的种子理解
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- 随机种子 Random seed
- JavaSE8基础 Random 使用给定的种子产生随机数
- Random.setseed(long bits)中的bit这个种子有什么作用?
- 关于产生随机数,使用同一个Random()和不同Random()的区别。
- 关于Random类产生随机数的一些问题
- Java random 随机数种子
- 最透彻的关于“随机数种子”和“伪随机数”的产生原理
- Random随机数种子生成,减少生成重复随机数的可能