Каков принцип случайного выбора позиций для обмена в функции перемешивания

Перемешивание Фишера – Йетса означает, что мы каждый раз берем последнее число из выбранного сегмента и меняем его местами на ранее случайно выбранное число, непрерывно выполняем итерацию и, наконец, добиваемся случайного перемешивания. Код для официального перемешивания в 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).

Другие вопросы по тегам