the (Modern, он же «Кнут») Фишер – Йейтс случайное число
- относительно просто реализовать
- довольно эффективный O (n) для времени и O (1) или действительно O (0) для пространства
- беспристрастно (каждая перестановка равновероятна)
- хорошо известно / хорошо понято, проверено, проверено.
Что еще мы могли бы хотеть от алгоритма (ну, да, когда число перестановок становится огромным, можно попробовать что-то еще, но в большинстве случаев такие огромные количества не учитываются)?
Редактировать :
'только что заметил, что этот ответ отвечает на заголовок вопроса, а не на содержание . (Вот почему хорошо, чтобы эти две части вопроса соответствовали лучше ...)
В двух словах, случайное перемешивание будет столь же случайным, как конкретный ГСЧ, использованный для реализации алгоритма .
Интуитивно понятное объяснение состоит в том, что для массива с элементом m, даже несмотря на то, что при n нисходящая управляющая переменная цикла уменьшается в направлении 1, возможные ячейки, в которых ячейка в позиции n может поменяться местами, уменьшаются, вероятность того, что эта ячейка был легко перемещен увеличивается в той же пропорции. Другими словами, последний элемент массива может оказаться в любом месте массива, но у него есть только один шанс для перемещения (после самой первой итерации). У второго до последнего элемента, подлежащего перемещению, требуется меньше места, но существует вероятность 1 / m, что он мог быть легко перемещен во время самой первой итерации. и т.д.