【问题标题】:Improve "resolution" of random data提高随机数据的“分辨率”
【发布时间】:2009-11-24 02:20:19
【问题描述】:

我一直在使用 Ruby 开发 MPD 前端,能够播放随机专辑。

album = all[(rand*all.length).floor]

其中all是库中所有专辑名称的数组,选择要播放的专辑。

这很有效,但是,我发现它播放某些专辑的次数比其他专辑多,有时非常明显(我已经看到它连续播放同一张专辑两次,不止一次,我的图书馆有几百张专辑,所以这在统计上应该非常不太可能发生),另一方面,很多专辑永远不会播放。

有什么方法可以让我获得更多随机数?是否有一个 gem 可以实现更好的随机数算法?我需要更换种子吗?

【问题讨论】:

  • “非常”不太可能,不。例如,如果您有 300 张专辑,那么连续两次播放相同内容的机会大约为 300 分之一...
  • 实际上很有可能,请参阅“生日悖论”:en.wikipedia.org/wiki/Birthday_problem 在 365 个可能的生日中,在随机的 23 人组中,至少有两个人的概率超过 50%生日相同。翻译成歌曲,如果你从 365 歌曲集合中随机播放 23 首歌曲,那么同一首歌曲出现两次的几率超过 50%。在两小时/40 首歌曲中,您有约 12% 的机会连续两次获得同一首歌曲。这是随机性不太直观的影响之一 :)
  • j-g-faustus,这就是为什么我需要更多地学习统计学!感谢您发布此内容,并感谢其他所有在答案中发布的人

标签: ruby random


【解决方案1】:

与其每次都进行新的随机选择,不如将列表随机排列一次,然后将专辑从随机排列的队列中取出,直到您想重新设置。

queue = albums.sort_by{rand}
while next = queue.pop
   play next
end

【讨论】:

  • 听,听,格伦明白了。这就是为什么“洗牌”模式被称为“洗牌”而不是“随机”的原因——因为程序会像一副纸牌一样“洗牌”专辑,然后每次都会从顶部抽出下一张。
【解决方案2】:

我不知道这是否会改善结果,但您可以通过rand(all.length) 直接获取整数。

【讨论】:

    【解决方案3】:

    有趣的是,很多人认为 iPod Shuffle 的随机播放也不是随机的。所以这会让你成为好伙伴。 :-)

    http://www.npr.org/templates/story/story.php?storyId=89408926&ft=1&f=1006

    http://www.cnet.com.au/itunes-just-how-random-is-random-339274094.htm?omnRef=NULL

    上述文章的一个要点是人类对随机性的感觉是有缺陷的。您可能确实有随机选择。

    但您可能希望实现与 iPod Shuffle 类似的“随机但不重复”功能。或“随机但偏向于最爱”。

    【讨论】:

    • 我支持有缺陷的感知评论。通常,当人们抱怨事物不够随机时,他们真正想要的是较少随机的事物。
    【解决方案4】:

    你想要的是Normally Distributed Random Numbers

    您还应该检查RandomR

    【讨论】:

      猜你喜欢
      • 2010-09-06
      • 2020-06-04
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2016-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多