Изменения

Перейти к: навигация, поиск

Получение объекта по номеру

46 байт убрано, 02:17, 16 ноября 2011
Нет описания правки
Заметим, что всем префиксом на каждом шаге будет соответствовать диапазон номеров одинакового размера, (так как количество перестановок не зависит от префикса) то есть можем просто посчитать "количество диапозонов, которые идут до нас" (количество цифр уже полностью занятых перестановками с меньшим номером) за <tex>O(1) </tex>:
*<tex>P_{'''p[n} </tex> ]''' {{---}} количество перестановок размера <tex>n</tex>
*'''permutation[n]''' {{---}} искомая перестановка
*мы должны поставить ту цифру, которая еще полностью не занята, то есть ('''alreadyWas''' + 1) - ую, которой еще нет в нашем префиксе, считаем, что это цифра '''j'''
'''for''' i = 1 '''to''' n '''do''' '''{'''
alreadyWas = (numOfPermutation - 1) div <tex>P_{p[n-i} </tex> ] numOfPermutation = ((numOfPermutation - 1) mod <tex>P_{p[n-i} </tex>) ] + 1 ans[i] = j (посчитаем за <tex>O(n) </tex>)
теперь j-ый элемент занят (находится в нашем префиксе)
'''}'''
Анонимный участник

Навигация