/ / Подобряване на "разделителната способност" на случайни данни - рубин, произволно

Подобряване на "разделителната способност" на случайни данни - рубинен, случайни

Работил съм върху 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

Това, което искаш, е Нормално разпределени случайни числа

Трябва също така да проверите RandomR