Быстрая перестановка -> число -> алгоритмы отображения перестановки
У меня есть n элементов. Для примера, скажем, 7 элементов, 1234567. Я знаю, что есть 7! = 5040 возможных перестановок из этих 7 элементов.
Я хочу быстрый алгоритм, состоящий из двух функций:
f (число) отображает число от 0 до 5039 на уникальную перестановку, и
f '(перестановка) отображает перестановку обратно на число, из которого она была сгенерирована.
Меня не волнует соответствие между числом и перестановкой, при условии, что каждая перестановка имеет свой уникальный номер.
Так, например, у меня могут быть функции, где
f(0) = '1234567'
f'('1234567') = 0
Самый быстрый алгоритм, который приходит на ум, - это перечислить все перестановки и создать таблицу поиска в обоих направлениях, чтобы после создания таблиц f (0) был бы равен O (1), а f ('1234567') был бы равен поиск по строке. Тем не менее, это требует памяти, особенно когда n становится большим.
Кто-нибудь может предложить другой алгоритм, который бы работал быстро и без недостатка памяти?