我一直在使用Ruby的MPD前端,能够播放随机相册。
album = all[(rand*all.length).floor]
其中all
是图书馆中所有相册名称的数组,选择要播放的相册。
然而,我发现它比其他专辑更多地播放一些专辑,有时非常明显(我看到它连续两次播放同一专辑,不止一次,我的图书馆有几百张专辑,所以这在统计上应该非常不太可能发生),而在另一端,很多专辑永远不会被播放。
有什么方法可以获得更随机的数字吗?是否有一个实现更好的随机数算法的宝石?我需要更换种子吗?
答案 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