为了账号安全,请及时绑定邮箱和手机立即绑定

理解“随机性”

理解“随机性”

ABOUTYOU 2019-07-17 19:06:13
理解“随机性”我无法理解这件事,哪个更随意?rand()或rand() * rand()我发现这是一个真正的脑筋挑逗,你能帮我一下吗?编辑:直觉上,我知道数学上的答案是,它们都是随机的,但我不禁要想,如果你“运行随机数算法”两次,当你将两者相乘时,你会创造出比只做一次更随机的东西。
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

我想这两种方法都是随机的,尽管我的直觉会说rand() * rand()不那么随机,因为它会产生更多的零。一早rand()0,总数变成0


查看完整回答
反对 回复 2019-07-17
?
森林海

TA贡献2011条经验 获得超2个赞

也不是“更随意”。

rand()基于psuedo随机种子生成一组可预测的数字(通常基于当前时间,该时间总是在变化)。将序列中的两个连续数字相乘会产生一个不同但同样可预测的数字序列。

关于这是否会减少碰撞,答案是否定的。它实际上会增加碰撞,这是由于两个数字相乘的结果,其中0 < n < 1..结果将是一个较小的分数,导致结果偏向低端的光谱。

一些进一步的解释。在下面,“不可预测”和“随机”指的是某人根据先前的数字猜出下一个数字的能力。神谕。

给定种子x它生成以下值列表:

0.3, 0.6, 0.2, 0.4, 0.8, 0.1, 0.7, 0.3, ...

rand()将生成上述列表,以及rand() * rand()将产生:

0.18, 0.08, 0.08, 0.21, ...

这两种方法都会为相同的种子生成相同的数字列表,因此,甲骨文也同样可以预测。但是,如果你看一下这两个呼叫相乘的结果,你会发现它们都在下面0.3尽管在最初的序列中有很好的分布。由于两个分数相乘的影响,这些数字是有偏的。结果的数字总是较小,因此更有可能是碰撞,尽管仍然是不可预测的。


查看完整回答
反对 回复 2019-07-17
  • 3 回答
  • 0 关注
  • 707 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信