Por que esse algoritmo de shuffle simples produz resultados tendenciosos? o que é uma razão simples?
arece que esse algoritmo de shuffle simples produzirá resultados tendencioso
# suppose $arr is filled with 1 to 52
for ($i < 0; $i < 52; $i++) {
$j = rand(0, 51);
# swap the items
$tmp = $arr[j];
$arr[j] = $arr[i];
$arr[i] = $tmp;
}
você pode experimentá-lo ... em vez de usar 52, use 3 (suponha que apenas 3 cartões sejam usados) e executá-lo 10.000 vezes e contabilizar os resultados, você verá que os resultados estão inclinados para certos padrões ...
a pergunta é ... o que é uma explicação simples de que isso vai acontecer?
a solução correta é usar algo como
for ($i < 0; $i < 51; $i++) { # last card need not swap
$j = rand($i, 51); # don't touch the cards that already "settled"
# swap the items
$tmp = $arr[j];
$arr[j] = $arr[i];
$arr[i] = $tmp;
}
mas a pergunta é ... por que o primeiro método, aparentemente também totalmente aleatório, tornará os resultados tendencioso
Update 1: obrigado pelo pessoal aqui apontando que ele precisa ser rand ($ i, 51) para que seja baralhado corretament