Я працюю над MPD передній кінець в Ruby, з можливістю відтворення випадкового альбому.
album = all[(rand*all.length).floor]
Де all
це масив назв усіх альбомів у бібліотеці, вибирає альбом для відтворення.
Це працює, однак, я вважаю, що він відтворює деякі альбомибільше, ніж інші, а іноді і дуже очевидно (я бачив, як він грав один і той же альбом двічі поспіль; не раз моя бібліотека має кілька сотень альбомів, тому статистично це повинно бути дуже навряд чи це станеться), а з іншого боку, багато альбомів ніколи не відтворюються.
Чи є спосіб, щоб я міг отримати більш випадкове число? Чи є дорогоцінний камінь, який реалізує кращий алгоритм випадкових чисел? Чи потрібно міняти насіння?
Відповіді:
8 для відповіді № 1Замість того, щоб робити новий випадковий вибір кожен раз, перетасовуйте цей список один раз, а потім просто зніміть альбоми з цієї перетасованої черги, поки ви не відчуєте себе як скидання.
queue = albums.sort_by{rand}
while next = queue.pop
play next
end
2 для відповіді № 2
Я не знаю, покращить це результат чи ні, але ви можете це зробити rand(all.length)
щоб отримати ціле число безпосередньо.
2 для відповіді № 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. Або "випадковий, але упереджений по відношенню до обраних".
1 для відповіді № 4
Що ти хочеш Нормально розподілені випадкові числа
Ви також повинні перевірити ВипадковийR