2009-11-24 2 views
0

Я работал над интерфейсом MPD в Ruby с возможностью воспроизведения случайного альбома.Улучшение «разрешения» случайных данных

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

all Где это массив имен всех альбомов в библиотеке, выбирает альбом, чтобы играть.

Это работает, однако, я считаю, что он воспроизводит несколько альбомов больше, чем другие, а иногда и очень очевидно (я видел, как он играл один и тот же альбом два раза подряд, у меня в библиотеке несколько сотен альбомов, так что это должно быть статистически очень вряд ли произойдет), а с другой стороны, много альбомов никогда не играли.

Есть ли способ получить более случайное число? Есть ли камень, который реализует лучший алгоритм случайных чисел? Нужно ли менять семена?

+0

"Очень" маловероятно, нет. Если у вас есть, скажем, 300 альбомов, шансы сыграть одну и ту же вещь дважды подряд - около 1 в 300 ... –

+2

На самом деле, вполне вероятно, см. «Парадокс дня рождения»: http: //en.wikipedia .org/wiki/Birthday_problem Из 365 возможных дней рождения в случайной группе из 23 человек шансы лучше 50%, что по крайней мере у двух из них будет тот же день рождения. Перевод песни на песни, если вы играете 23 песни в случайном порядке из коллекции песен 365, лучше, чем 50% вероятность того, что одна и та же песня появится дважды. Через два часа/40 песен у вас есть ~ 12% шанс получить одну и ту же песню дважды подряд. Это один из менее интуитивных эффектов случайности :) –

+0

j-g-faustus, вот почему мне нужно больше узнать о статистике! Спасибо, что опубликовали это сообщение, и всем, кто отправил ответ в ответ –

ответ

8

Вместо того, чтобы делать новый случайный выбор каждый раз, перетасовывайте список один раз, а затем просто снимайте альбомы с этой перетасованной очереди, пока не почувствуете себя сбросом.

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

Слушай, послушай, Гленн получил это. Вот почему режим «тасования» называется «случайным», а не «случайным», потому что программа «перетасовывает» альбомы как колоду карт, а затем каждый раз рисует следующий сверху. –

2

Я не знаю, будет ли это улучшать результаты или нет, но вы можете сделать rand(all.length), чтобы получить целое число напрямую.

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. Или «случайный, но предвзятый к фаворитам».

+1

Я второй недостающий комментарий. Обычно, когда люди жалуются на то, что вещи недостаточно случайны, то, что они на самом деле хотят, - это вещи, которые меньше * случайны. –

Смежные вопросы