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