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

questionAnswers(12)

yourAnswerToTheQuestion