Não sei se entendi o Seed() corretamente. Alguém poderia me explicar como funciona e qual situação poderia usar?
Não sei se entendi o Seed() corretamente. Alguém poderia me explicar como funciona e qual situação poderia usar?
Romeu, tudo bom?
Vou tentar. Você precisa gerar um número randômico (pseudo-randômico na verdade) e para isso tem lá o método randrange() para isso. Toda vez que você chamar o método ele vai te mostrar valores diferentes, claro, dentro dos que você propôs para ele. Afinal, é randômico.
Agora pensa no seguinte cenário, eu quero se o algoritmo A é mais rápido que o algoritmo B, ambos com entradas randômicas. Não seria muito justo comparar A com B usando elementos randômicos diferentes, então eu preciso garantir que eles sejam comparados com entradas randômicas iguais. Para isso eu uso o seed(). Ele "fixa" a minha randomização garantindo que a amostra randomizada para A será a mesma amostra randomizada para B o que me garante uma comparação justa.
Então é como se eu definisse o número de dados que jogarei para tirar um número aleatório, correto?
Se eu falo que vou jogar 3 dados sempre, então a base para todos os meus número aleatórios são iguais.
A função Random() sem o Seed() pode usar na primeira vez 3 dados e na segunda 14 dados.
É isso?
Fiz um teste aqui enquanto eu estava respondendo e fiquei confuso:
random.seed(30)
print ("Teste(1):", random.randint(25,50))
random.seed(30)
print ("Teste(2):", random.randint(25,50))
random.seed(30)
print ("Teste(3): ", random.randint(25,50))
Todos os resultados foram o número 42. Se eu vou receber sempre o número 42 então a função Random() deixa de se aleatória, não?
Romeu, não é que deixa de ser aleatório, se você pedir mais valores eles serão selecionados aleatoriamente. Acontece que é mais como se você "voltasse no tempo".
Pensando que eu tenho um seed (semente) definido eu peço para gerar 3 números aleatórios no primeiro ciclo:
[1,10,2]
Num segundo ciclo eu peço para gerar novamente, mas agora peço 5 números:
[1,10,2,7,3]
Por fim um terceiro ciclo com 6 números aleatórios:
[1,10,2,7,3,0]
Percebe que no segundo ciclo eu sabia muito bem quais seriam os 3 primeiros números aleatório [1,10,2] pq eu "voltei no tempo", mas eu não sabia quais seriam os dois próximos pq eu ainda não os tinha sorteado aleatoriamente. O mesmo para o terceiro ciclo, eu sabia quais seriam os 5 primeiros números, mas não o seguinte que foi escolhido aleatoriamente.
Só para fechar, a gente sempre fala números pseudo-aleatórios, e esse vídeo vai te ajudar a entender o pq disso:
https://www.youtube.com/watch?v=LqXnpIn2Uxs&list=WL&index=102&t=0s
Eu vi esse vídeo e compreendi do por quê os números não serem realmente aleatórios pois são baseados em algo programado. Vi até o site lá que gera os número com aleatoriedade real.
Eu entendi agora a aplicabilidade da função, é uma função que sei qual os número aleatórios virão.
Acho que esse Seed() exemplifica claramente o pseudo-aleatório. Isso já acontece por baixo dos panos, como o vídeo até fala, mas fica evidente com o Seed().. Tecnicamente o computador de vários Seed() e escolhe algum para retornar e achamos que é aleatório. Ficou bem claro agora.
Saquei, valeu pela explicação. Minha maior dúvida foi como aplicar isso. Não estava entendendo, mas depois dessa última explicação ficou mais claro.
Obrigado Ronald!