【问题标题】:Change seed for every generated random number为每个生成的随机数更改种子
【发布时间】:2014-05-29 17:54:10
【问题描述】:

假设您使用种子作为自 1970 年 1 月以来经过的时间(以秒为单位)生成随机数,就像在 microsoft 库中一样。但是您在生成每个随机数后更改种子。这会给出一个真正随机的结果。为什么或为什么不?

编辑 我对这个问题还有一部分内容。如果我让种子是非确定性的怎么办。举个小例子,假设种子是由已经存在的 TRNG(真随机数生成器)生成的。换句话说,如果我能以某种方式使种子成为非确定性的,我是否能够生成一个随机序列,即非确定性序列。为什么或为什么不?

【问题讨论】:

  • 请注意,某人或某物可能每秒多次运行您的程序 (Gah, need some GUIDs right now, pah pah pah),在这种情况下,您的程序可能会产生不希望的结果。
  • 你的意思是像www-cs-faculty.stanford.edu/~uno/news02.html#rng这样的东西吗?如果是这样,那要看情况了,但由于即使是 Knuth 也搞砸了,我猜可能不会:)
  • 没有。本质上,您将生成一个数字序列,它们是时间的哈希函数,可能看起来是随机的,但非常可预测。

标签: random


【解决方案1】:

本质上,您的技术只是将“随机性”转移到调用 random() 函数时:如果您在确定的时间(例如每秒一次)调用该函数,则结果将是确定的。如果你随机调用函数,结果将是随机的。

更准确地说,这取决于您调用 seed() 函数时使用的值。如果使用确定性值调用 seed(),则后续调用 random() 的结果将是确定性的。

更新(按要求):

软件随机发生器是完全确定的;它产生的值的序列完全取决于您传递给seed() 的初始调用的内容。因此,如果您使用已知值调用 seed(),那么您可以准确预测您将从后续调用 random() 中获得哪些值系列。如果您使用真正的随机数调用 seed(),那么对 random() 的调用将相应地是随机的。

(但这引出了一个问题:如果你有随机数要传递给 seed(),为什么还要调用 random()?)

【讨论】:

  • @rahulgarg12342:当然:如果你的种子是非确定性的,种子()的结果; random() 将是不确定的(例如随机)。我将在上面扩展我的答案......
  • 我需要调用 random 从一个随机数生成更多随机数。我正在考虑使用 Mersenne Twister 从真正的随机种子生成随机序列,尽管我什至不了解 mersenne twister 背后的数学。但无论如何,如果我的这种方法是错误的,请告诉我。谢谢:)。
  • 但是你会用什么播种 Mersenne Twister?不管 PRNG 算法是什么—— Mersenne Twister 或其他算法——如果你用一个已知的值播种它,你每次运行它都会得到一个已知的值序列。这就是为什么使用纳秒计时器的低阶位,或来自放射源的衰变粒子,或来自某些网络摄像头的位,可以产生好的种子。简而言之,如果你的种子不是随机的,那么你的 PRNG 有多好并不重要。结果不会是随机的。
  • 我知道了,但我有一种方法可以生成完全随机的种子,你现在认为这是不可能使用计算机的。开发需要一些时间,但一旦完成,我会在一周内告诉你。我唯一的问题是种子是完全随机的,但肯定不会很大。它将在 1 - 100000000 左右。
  • 如果我设法获得随机种子但在限制范围内,请告诉我我的方法是否正确。但@kendall 不同意这一点。请帮忙澄清一下。
【解决方案2】:

真正的随机性不需要种子。播种仅适用于 100% 确定性而非真正随机的 PRNG。

所以不,以任何形式使用 PRNG 都不会产生真正的随机性。

【讨论】:

  • 但是如果你不知道种子,那么结果将是随机的,不是吗?简而言之,如果种子是未知且完全随机的,那么您的序列将是随机的。
  • @rahulgarg12342 这实际上不是真的。我曾经用我的计算器注意到,如果我生成一个随机数序列,最后一个数字每 7 个数字重复一次,并且是完全可以预测的。我无法预测其余的数字,但仅凭我的大脑就可以预测其中一个数字。这显然不是随机的,即使我对内部状态一无所知。
  • 你是指最后一个数字还是最后一个数字?但即使有随机性,也没有这样的数字永远不会重复七次。你同意吗。随机也可以像一个数字被重复 10 次。请解释一下你是什么意思?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-15
  • 2011-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2017-08-29
相关资源
最近更新 更多