创建一个不那么随机的数字生成器有多难?

时间:2010-06-17 11:02:42

标签: random

背景故事:

所以今晚我开车去乐队练习。我的车有一个USB端口,你可以插入一个带有MP3文件的USB记忆棒,立体声就可以播放它们。我的手机上有大约100个MP3,所以我按下了“随机”按钮。所以从这里到乐队练习,它起了作用:

  • Track 22
  • Track 45
  • Track 4
  • Track 11
  • Track 87
  • Track 66
  • Track 98

然后在回家的路上,它播放了

  • Track 16
  • Track 27
  • Track 33

然后我在加油站停了下来。我装满了,回到车里,立体声再次响起。它玩了

  • Track 22
  • Track 45
  • Track 4
  • Track 11
  • Track 87

我想,WT​​F?这个'随机'发生器有什么用?他们用什么作为种子,如果不是时间?汽车音响是如此紧密存在以至于它甚至无法使用C stdlib?有谁知道这种事情是怎么发生的?

4 个答案:

答案 0 :(得分:2)

如果不看音乐播放器的代码,很难说。一些想法:

  1. 可能是它创建了一个随机播放列表,然后在开头再次启动播放列表。例如,随机序列然后重复,而不是从其随机数生成器中独立地提出相同的序列两次。
  2. 或者,当然,它使用时间作为种子,它的时钟乱了,有时读0或者什么,导致重复序列。
  3. 或(道歉)观察错误。 : - )

答案 1 :(得分:1)

MP3播放器在您选择随机选项时会生成随机播放列表,然后播放相同的播放列表。

唯一的“随机”部分是每次重新设置“随机”选项时播放列表都会发生变化。

例如,iPod shuffle mp3播放器的功能允许您重新播放歌曲以生成新的“随机”播放列表。

答案 2 :(得分:1)

重要的是要记住,如果没有良好的统计分析,我们的心理学就会发现这样一个事实,即即使它们不存在,我们也会发现它们(无论出于何种意图和目的)。

例如,如果您的iPod上有10首歌曲,那么当您播放2集中的所有10首歌曲时,很有可能两组中的曲目彼此相邻。我们的大脑连线到现场并注意到了。

如果你描述的模式是真的,那么是的,他们可能搞砸了他们的代码。每次关闭设备时,内部系统时间可能会重置,因此当您通过按“全部播放”而不是“打开”然后“全部播放”打开它时,它可能会以相同的顺序播放相同的音轨。或许时间不能用作种子。

或者,也许(不太可能)它是随机的。一个真正随机的序列最终将重复订单,特别是在如此小的100个集合中,它不会超出可能性的范围,您将在数据的子集中看到重复。

答案 3 :(得分:0)

控制随机化的嵌入式设备可能没有时钟。也许它使用轨道数作为种子或类似的东西。

如果您没有随机种子的外部源,例如来自时钟的读数,则当软件的所有内存都被重置时,软件将在每次启动时确定性地运行。