кажется, что этот простой алгоритм перетасовки приведет к смещенным результатам:
# 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;
}
вы можете попробовать... вместо использования 52, используйте 3 (предположим, что используются только 3 карты), и запустите его 10 000 раз и подсчитайте результаты, вы увидите, что результаты искажены по определенным шаблонам..
вопрос... что такое простое объяснение, что это произойдет?
правильное решение - использовать что-то вроде
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;
}
но вопрос в том, почему первый метод, казалось бы, также полностью случайный, сделает результаты предвзятыми?
Обновить 1: спасибо, если люди укажут, что для правильного воспроизведения он должен быть rand ($ i, 51).