/ / Popraw „rozdzielczość” losowych danych - rubinowy, losowy

Popraw "rozdzielczość" losowych danych - ruby, losowe

Pracowałem nad MPD front end w Ruby, z możliwością odtwarzania losowego albumu.

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

Gdzie all to tablica nazw wszystkich albumów w bibliotece, wybiera album do odtwarzania.

To działa, jednak uważam, że odtwarza niektóre albumybardziej niż inni, a czasami bardzo wyraźnie (widziałem, że grał ten sam album dwa razy z rzędu, więcej niż raz, moja biblioteka ma kilkaset albumów, więc to powinno być statystycznie bardzo raczej się nie zdarzy), a po drugiej stronie wiele albumów nigdy nie będzie granych.

Czy jest jakiś sposób, aby uzyskać bardziej losowy numer? Czy istnieje klejnot, który implementuje lepszy algorytm liczb losowych? Czy muszę zmienić nasienie?

Odpowiedzi:

8 dla odpowiedzi № 1

Zamiast robić nowy losowy wybór za każdym razem, potasuj listę raz, a następnie po prostu zdejmij albumy z tej przetasowanej kolejki, aż poczujesz, że chcesz ją zresetować.

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

2 dla odpowiedzi nr 2

Nie wiem, czy poprawi to wyniki, czy nie, ale możesz to zrobić rand(all.length) aby uzyskać liczbę całkowitą bezpośrednio.


2 dla odpowiedzi nr 3

Co ciekawe, wielu ludzi uważa, że ​​losowe tasowanie IPod Shuffle też nie jest losowe. To sprawia, że ​​jesteś w dobrym towarzystwie.

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

Głównym punktem powyższych artykułów jest ludzkie poczucie tego, co losowe jest wadliwe. Prawdopodobnie masz losowy wybór.

Ale możesz zaimplementować podobną funkcję „losowe, ale bez powtórzeń”, jaką ma shuffle IPod. Lub „losowe, ale stronnicze w stosunku do ulubionych”.


1 dla odpowiedzi nr 4

To czego chcesz Liczby losowe normalnie rozproszone

Powinieneś również sprawdzić RandomR