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 № 1Zamiast 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