random - 与随机数生成算法相关的种子是什么?为什么经常使用计算机时间来创建该种子?

标签 random language-agnostic

我读到种子用于初始化随机数生成器。但似乎种子的随机性对于从生成器获得良好的随机性并不重要。所以我想了解什么是种子?为什么这么称呼呢?最后,为什么计算机系统中的时间被用来生成这样的种子?

最佳答案

伪随机数生成器生成数字序列。它不是真正随机的,但通常是一种数学计算,产生与某些理想分布相匹配的输出,并且没有明显的模式。为了生成这样的序列,必须存储状态,以便生成器能够生成该序列中的下一个数字。每次使用上一步输出的某些部分都会更新状态。

播种显式初始化此状态。 “种子”是一个起点,事物从它开始生长。在本例中,是一个数字序列。

这可以用于始终生成相同的序列(通过使用已知的常量种子),这对于具有确定性行为非常有用。这对于调试、某些网络应用程序、密码学等很有用。

或者,在您希望行为不可预测的情况下(每次运行程序(例如纸牌游戏)时总是不同),您可以使用可能不断变化的数字作为种子,例如时间。

序列的“随机性”并不取决于所选择的种子,尽管它确实取决于不重新播种序列。

关于random - 与随机数生成算法相关的种子是什么?为什么经常使用计算机时间来创建该种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15388324/

相关文章:

algorithm - 号码分布

language-agnostic - 如何计算球体上一点到线段的距离?

math - 四舍五入两次 - 为一条规则

language-agnostic - 关系数据库中的"Diffing"对象

language-agnostic - 为什么语言不使用短路求值?

java - 如何让随机字符串替换textview?

scala - 为什么 scalacheck 中需要 Arbitraries?

java - 如何修复这个随机行走程序代码?

c++ - 用 std::uniform_real_distribution<double> 初始化一个 N 大小的 std::vector

java - 如何在Java中生成随机正数和负数