Change seed for every generated random number
假设您使用种子生成随机数,这是自1970年1月以来在Microsoft库中以秒为单位经过的时间。但是在每生成一个随机数之后都要更改种子。会产生真正随机的结果吗?为什么?为什么?
编辑我对这个问题还有一部分。如果种子是不确定的呢?对于一个小例子,假设种子是由已经存在的trng(真随机数生成器)生成的。换句话说,如果我能以某种方式使种子不具有确定性,我是否能够生成一个随机序列,即不确定性序列。为什么?为什么?
- 请注意,某些人或事物可能每秒运行您的程序多次(Gah, need some GUIDs right now, pah pah pah),在这种情况下,您的程序可能会提供不希望得到的结果。
- 你的意思是www cs faculty.stanford.edu/~uno/news02.html_rng?如果是这样的话,那要看情况了,但即使是克努斯把那件事弄糟了,我想也不一定是这样。
- 不,你将在本质上产生一个数字序列,它是时间的散列函数,可能看起来是随机的,但是它是可以预测的。
- 相关:请参阅stackoverflow.com/questions/13779441/…
本质上,您的技术只是将"随机性"转换为当您调用random()函数时:如果您在确定的时间(例如每秒一次)调用函数,结果将是确定的。如果在随机时间调用函数,结果将是随机的。
更准确地说,它取决于您用什么值调用seed()函数。如果使用确定性值调用seed(),则随后调用random()的结果将是确定性的。
更新(按请求):
软件随机生成器是完全确定的;它产生的值序列完全由传递给seed()的初始调用的内容决定。因此,如果使用已知的值调用seed(),则可以准确地预测从后续对random()的调用中会得到哪些值系列。如果使用真正随机数调用seed(),那么对random()的调用将相应地随机。
(但这就引出了一个问题:如果有随机数要传递给seed(),那么为什么还要调用random()?
- 我已经按照你的回答编辑了我的问题。请回复。
- @rahulArg12342:当然:如果您的种子是非确定性的,那么seed()的结果;random()将是非确定性的(例如random)。我将详述我上面的答案…
- 我需要调用Random从单个随机数中生成更多随机数。我在考虑用旋转木马从一个真正随机的种子中生成一个随机序列,尽管我甚至不理解旋转木马背后的数学原理。但无论如何,如果我的方法是错误的,请告诉我。谢谢:)。
- 但是你会用什么种下梅森缠绕机呢?无论是prng算法——mersenne twister或其他算法——如果用已知值对其进行种子设定,每次运行它时都会得到一个已知的值序列。这就是为什么使用纳秒定时器的低阶位,或者从放射源衰变粒子,或者从网络摄像头中衰变粒子,都可以获得好的种子。简而言之,如果你的种子不是随机的,那么你的prng有多好并不重要;结果不会是随机的。
- 我知道了,但我有一种生成完全随机种子的方法,你现在认为用计算机是不可能的。开发需要一些时间,但一旦完成,我会在一周后告诉你。唯一的问题是,种子是完全随机的,但肯定不会很大。大约是1-100000000。
- 请告诉我,如果我的方法是正确的,如果我设法得到一个随机种子,但在一个限度内。但是@kendall不同意这一点。请帮助并澄清。
- 所以:如果你有一个真正随机数的来源(也就是说,不是由计算机上的prng生成的,而是像观察放射性衰变),你可以把它们作为prng的种子。关键是,一些prng,包括许多mersenne twister的实现,在被播种后需要一段时间才能"真正随机"。查看维基百科了解详情。请阅读并理解stackoverflow.com/questions/13779441/…。我期待着您的尝试!
- 是的,当然,但我必须努力,但一旦我的提议被接受,那就只是小菜一碟了。现在我不知道哪一个建议,但种子将是真正随机的。每当用户提出生成随机数序列的新请求时,就会向Mersenne Twister提供一个新的种子。如果可以的话,请告诉我。如果可以的话,也把你的电子邮件给我,以便我们以后再讨论。
- @拉胡尔加12342:"告诉我这是不是很好。"不知道你的trng以及你将如何使用它来驱动prng,我只能对统计上独立的数字说可能是,而绝对不能对密码安全的数字说可能是。有关说明,请参阅stackoverflow.com/a/13807851/558639。
- 你能给我一个简单的解释吗?你所说的统计独立数字是什么意思?但我肯定知道这些数字是不可猜测的。
- 也请给我你的电子邮件或发送给我拉乌尔加[email protected],以便我可以与你讨论我的想法。为了进一步澄清,我将使用的数字A种子将是这样的,没有人可以猜测他们,但他们将有一个限制,不是非常大。
- 请回复您的电子邮件。谢谢。
- 请检查你的邮件。谢谢。另外,如果你经常检查你的邮件,请告诉我,这样我就不会再在这个网站上发表任何评论,告诉你我已经回复了。我这样做是因为我觉得你使用这个网站更频繁,不需要检查你的邮件。
真正的随机性不需要种子。播种仅适用于100%确定性的prng,而不是真正随机的prng。
所以不,以任何形式使用prng都不会产生真正的随机性。
- 但是如果你不知道种子,那么结果将是随机的,不是吗?简而言之,如果种子是未知的并且完全是随机的,那么你的序列就是随机的。
- @拉乌尔加12342事实并非如此。有一次我用计算器发现,如果我生成一个随机数序列,最后一个数字每7个数字重复一次,完全可以预测。我无法预测其余的数字,但其中一个数字仅凭我的大脑就可以预测。这显然不是随机的,尽管我对内部状态一无所知。
- 你是指最后一个数字还是最后一个数字?但即使是随机性,也没有什么比这个数字永远不能重复七次。你同意吗?随机数也可能像一个重复10次的数字。请解释一下你的意思?谢谢。