Каков принцип случайного выбора позиций для обмена в функции перемешивания
Перемешивание Фишера – Йетса означает, что мы каждый раз берем последнее число из выбранного сегмента и меняем его местами на ранее случайно выбранное число, непрерывно выполняем итерацию и, наконец, добиваемся случайного перемешивания. Код для официального перемешивания в python3.6 выглядит следующим образом
_int = int
for i in reversed(range(1, len(x))):
# pick an element in x[:i+1] with which to exchange x[i]
j = _int(random() * (i+1))
x[i], x[j] = x[j], x[i]
Почему бы просто не выбрать глобальные местоположения и поменять местами?
1 ответ
random()
это число с плавающей запятой в диапазоне
[0, 1)
. Когда вы умножаете это на
i+1
, вы получите поплавок в диапазоне
[0, i+1)
. Когда вы конвертируете это в целое число, вы получаете целое число в диапазоне
[0, i]
.
Конечно, вы можете просто использовать
random.randint(0, i)
. А также
reverse(range(1, len(x))
можно упростить до
range(len(x)-1, 0, -1)
.