Случайная перестановка - Random permutation
А случайная перестановка это случайный упорядочивание набора объектов, то есть перестановка -значен случайная переменная. Использование случайных перестановок часто является фундаментальным для полей, которые используют рандомизированные алгоритмы Такие как теория кодирования, криптография, и симуляция. Хорошим примером случайной перестановки является шаркающий из колода карт: в идеале это случайная перестановка 52 карт.
Генерация случайных перестановок
Пошаговый метод перебора
Один метод генерации случайной перестановки набора длины п равномерно случайно (т.е. каждый из п! перестановки с одинаковой вероятностью появится), будет генерировать последовательность взяв случайное число от 1 до п последовательно, гарантируя, что нет повторения, и интерпретируя эту последовательность (Икс1, ..., Иксп) как перестановка
показано здесь в двухстрочная запись.
Этот метод грубой силы потребует периодических повторных попыток всякий раз, когда выбранное случайное число является повторением уже выбранного числа. Этого можно избежать, если на яй шаг (когда Икс1, ..., Икся − 1 уже были выбраны), выбирается номер j случайным образом от 1 до п − я + 1 и наборы Икся равно jth по величине из невыбранных чисел.
Фишер-Йейтс тасует
Простой алгоритм генерировать перестановку п элементы равномерно в случайном порядке без повторных попыток, известные как Перемешивание Фишера – Йетса, должно начинаться с любой перестановки (например, перестановка идентичности ), а затем пройти позиции от 0 до п - 2 (мы используем соглашение, согласно которому первый элемент имеет индекс 0, а последний элемент имеет индекс п - 1), и для каждой позиции я замена элемент, который в настоящее время находится там, со случайно выбранным элементом из позиций я через п - 1 (конец) включительно. Легко проверить, что любая перестановка п элементы будут производиться этим алгоритмом с вероятностью ровно 1 /п!, что дает равномерное распределение по всем таким перестановкам.
беззнаковый униформа(беззнаковый м); / * Возвращает случайное целое число 0 <= uniform (m) <= m-1 с равномерным распределением * /пустота initialize_and_permute(беззнаковый перестановка[], беззнаковый п){ беззнаковый я; за (я = 0; я <= п-2; я++) { беззнаковый j = я+униформа(п-я); / * Случайное целое число такое, что i ≤ j замена(перестановка[я], перестановка[j]); / * Заменить случайно выбранный элемент перестановкой [i] * / }}
Обратите внимание, что если униформа ()
функция реализована просто как случайный ()% (m)
то смещение результатов вводится, если количество возвращаемых значений случайный()
не кратно m, но это становится несущественным, если количество возвращаемых значений случайный()
на порядки больше m.
Статистика случайных перестановок
Фиксированные точки
В распределение вероятностей из числа фиксированные точки в равномерно распределенной случайной перестановке приближается к распределение Пуассона с ожидаемое значение 1 как п растет. В частности, это элегантное приложение принцип включения-исключения чтобы показать, что вероятность отсутствия неподвижных точек приближается к 1 /е. Когда п достаточно большой, распределение вероятностей из фиксированные точки это почти распределение Пуассона с ожидаемое значение 1.[1] Первый п моменты этого распределения точно соответствуют распределению Пуассона.
Проверка на случайность
Как и в случае со всеми случайными процессами, качество результирующего распределения реализации рандомизированного алгоритма, такого как перемешивание Кнута (то есть, насколько оно близко к желаемому равномерному распределению), зависит от качества основного источника случайности, такого как а генератор псевдослучайных чисел. Есть много возможных тесты на случайность для случайных перестановок, таких как некоторые из Несгибаемые испытания. Типичный пример такого теста - пройти несколько статистика перестановок для которого распределение известно, и проверьте, насколько близко распределение этой статистики на множестве случайно сгенерированных перестановок к истинному распределению.
Смотрите также
- Формула выборки Ювенса - связь с популяционная генетика
- Перетасовка фаро
- Константа Голомба – Дикмана
- Статистика случайных перестановок
- Алгоритмы перетасовки - метод случайной сортировки, метод итеративного обмена
Рекомендации
- ^ Дюрстенфельд, Ричард (1964-07-01). «Алгоритм 235: Случайная перестановка». Коммуникации ACM. 7 (7): 420. Дои:10.1145/364520.364540.
внешняя ссылка
- Случайная перестановка в MathWorld
- Генерация случайной перестановки - подробное и практическое объяснение алгоритма тасования Кнута и его вариантов для генерации k-перестановки (перестановки k элементы, выбранные из списка) и k-подмножества (генерирование подмножества элементов в списке без замены) с псевдокодом