Возможно ли перетасовать элементы массива n-размера равномерно, то есть вероятность любого из n! Комбинации происходят одинаково, в ожидаемое время O(n)
. Как так?
Я должен перетасовать элементы A
в новый массив B
Первое, что приходит мне в голову, когда я пытаюсь это сделать, это просто выбрать случайное число i
от 1 до n, посмотреть, было ли выбрано A[i]
, если да, то повторить, в противном случае поставить A[i]
в первой доступной позиции в B
.
Однако эта проблема со сборщиком купонов ожидала времени O(n log n)
.
Может кто-нибудь предложить O(n)
алгоритм ожидаемого времени.
Спасибо.