Быстрая перестановка -> число -> алгоритмы отображения перестановки

У меня есть n элементов. Для примера, скажем, 7 элементов, 1234567. Я знаю, что есть 7! = 5040 возможных перестановок из этих 7 элементов.

Я хочу быстрый алгоритм, состоящий из двух функций:

f (число) отображает число от 0 до 5039 на уникальную перестановку, и

f '(перестановка) отображает перестановку обратно на число, из которого она была сгенерирована.

Меня не волнует соответствие между числом и перестановкой, при условии, что каждая перестановка имеет свой уникальный номер.

Так, например, у меня могут быть функции, где

f(0) = '1234567'
f'('1234567') = 0

Самый быстрый алгоритм, который приходит на ум, - это перечислить все перестановки и создать таблицу поиска в обоих направлениях, чтобы после создания таблиц f (0) был бы равен O (1), а f ('1234567') был бы равен поиск по строке. Тем не менее, это требует памяти, особенно когда n становится большим.

Кто-нибудь может предложить другой алгоритм, который бы работал быстро и без недостатка памяти?

Ответы на вопрос(12)

Ваш ответ на вопрос