/ / Покращити «роздільну здатність» випадкових даних - рубін, випадковий

Поліпшення "роздільної здатності" випадкових даних - рубінове, випадкове

Я працюю над 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