/ / Melhorar a “resolução” de dados aleatórios - rubi, aleatório

Melhore a “resolução” de dados aleatórios - rubi, aleatório

Eu tenho trabalhado em um MPD front-end em Ruby, com a capacidade de reproduzir um álbum aleatório.

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

Onde all é uma matriz dos nomes de todos os álbuns da biblioteca, escolhe o álbum a ser reproduzido.

Isso funciona, no entanto, acho que reproduz alguns álbunsmais do que outros, e às vezes muito obviamente (eu vi tocar o mesmo álbum duas vezes seguidas, mais de uma vez, minha biblioteca tem algumas centenas de álbuns, então isso deveria ser estatisticamente muito improvável de acontecer) e, por outro lado, muitos álbuns nunca são tocados.

Existe alguma maneira de obter um número mais aleatório? Existe uma gema que implementa um algoritmo de número aleatório melhor? Eu preciso mudar a semente?

Respostas:

8 para resposta № 1

Em vez de fazer uma nova seleção aleatória a cada vez, embaralhe a lista uma vez e, em seguida, apenas retire os álbuns dessa fila embaralhada até que você queira redefinir.

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

2 para resposta № 2

Não sei se isso vai melhorar os resultados ou não, mas você pode fazer rand(all.length) para obter um inteiro diretamente.


2 para resposta № 3

Curiosamente, muitas pessoas pensam que o embaralhamento aleatório do iPod Shuffle também não é aleatório. Portanto, isso o coloca em boa companhia. :-)

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

Um ponto principal dos artigos acima é que a percepção humana do que é aleatório é falha. Você provavelmente tem uma seleção aleatória.

Mas você pode querer implementar um recurso "aleatório, mas sem repetições" semelhante ao do IPod Shuffle. Ou "aleatório, mas tendencioso para os favoritos".


1 para resposta № 4

O que você quer é Números Aleatórios Normalmente Distribuídos

Você também deve verificar RandomR