2013-03-02 3 views

ответ

3

Есть n! перестановок, только один из которых является правильным (в предположении отдельных элементов). Поэтому в ручном смысле вы ожидаете выбрать правильный ответ после примерно O(n!) итераций. * Но каждая операция тасования/проверки сама по себе O(n). Следовательно, O(n.n!) в целом.


* Для того, чтобы быть точным, вы можете моделировать как geometrically-distributed random variable с параметром р = 1/п!. Ожидаемое значение такой переменной: 1/p = n!.

+1

Предполагая равномерное распределение, в среднем будут выполняться попытки «n!/2», а не 'n!', А не то, что он меняет сложность. – SomeWittyUsername

+0

@icepack: Ах, хороший звонок! –

+0

@icepack why 'n!/2'? –

1

Среднее число попыток выполнить операцию обратное к вероятности каждой попытки.

Есть n! способы перетасовки n элементы. Если все элементы различны, только один способ создает сортированный вывод. Таким образом, вероятность сортировки shuffle равна 1/n!, а среднее число попыток - n!.

Каждый случайный выбор занимает O(n) времени (при условии, что Fisher-Yates перемещается или что-либо в равной степени разумно).

Таким образом, временная сложность O(n!*n).

+0

'O ((n + 1)!) = O (n! * N)' – SomeWittyUsername

+0

@icepack не уверен в равенстве, но 'O ((n + 1)!)' Является надмножеством 'O (n! * п) '. Я не думал, что это стоит включить в ответ. –

+1

@JanDvorak: Да, они эквивалентны (n + 1)! = (n + 1) n! = (n! + n.n!). –

Смежные вопросы