Хорошо известно, что этот «наивный» алгоритм перестановки массива путем замены каждого элемента на другой, случайно выбранный, не работает правильно:
for (i=0..n-1)
swap(A[i], A[random(n)]);
В частности, поскольку на каждой из итераций делается один из вариантов (с одинаковой вероятностью), существует возможных «путей» в вычислениях; потому что количество возможных перестановокне делится равномерно на количество путей , для этого алгоритма невозможно получить каждый изперестановки с равной вероятностью. (Вместо этого следует использовать так называемый случайный случай Фишера-Йейтса , который существенно меняет вызов для выбора случайного числа из [0..n) с вызовом для выбора случайного числа из [i..n); это спорный вопрос, хотя.)н н н н н ! н н н н !
Мне интересно, насколько «плохим» может быть наивное перемешивание? Точнее говоря, пусть будет множеством всех перестановок, а будет числом путей через наивный алгоритм, который создает результирующую перестановку , что является асимптотическим поведением функцииC ( ρ ) ρ ∈ P ( n )
а также
?
Главным фактором является «нормализация» этих значений: если наивное перемешивание «асимптотически хорошо», то
.
Я подозреваю (основываясь на некоторых компьютерных симуляциях, которые я видел), что фактические значения ограничены от 1, но известно ли, если конечен, или если отделен от 0? Что известно о поведении этих величин?