提高随机数据的“分辨率”

时间:2009-11-24 02:20:20

标签: ruby random

我一直在使用Ruby的MPD前端,能够播放随机相册。

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

其中all是图书馆中所有相册名称的数组,选择要播放的相册。

然而,我发现它比其他专辑更多地播放一些专辑,有时非常明显(我看到它连续两次播放同一专辑,不止一次,我的图书馆有几百张专辑,所以这在统计上应该非常不太可能发生),而在另一端,很多专辑永远不会被播放。

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

4 个答案:

答案 0 :(得分:8)

不是每次都进行新的随机选择,而是将列表一次洗牌,然后将相册从该洗牌队列中取出,直到您想要重置为止。

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

有趣的是,很多人都认为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一样实现类似的“随机但不重复”功能。或者“随机但偏向最爱”。

答案 3 :(得分:1)

你想要的是Normally Distributed Random Numbers

您还应该检查RandomR

相关问题