Permutación rápida -> número -> algoritmos de mapeo de permutación
Tengo n elementos. Por un ejemplo, digamos, 7 elementos, 1234567. ¡Sé que hay 7! = 5040 permutaciones posibles de estos 7 elementos.
Quiero un algoritmo rápido que comprenda dos funciones:
f (número) asigna un número entre 0 y 5039 a una permutación única, y
f '(permutación) asigna la permutación al número desde el que se generó.
No me importa la correspondencia entre el número y la permutación, siempre que cada permutación tenga su propio número único.
Así, por ejemplo, podría tener funciones donde
f(0) = '1234567'
f'('1234567') = 0
El algoritmo más rápido que viene a la mente es enumerar todas las permutaciones y crear una tabla de búsqueda en ambas direcciones, de modo que, una vez creadas las tablas, f (0) sea O (1) yf ('1234567') sea una búsqueda en una cadena. Sin embargo, esto es hambre de memoria, particularmente cuando n se hace grande.
¿Alguien puede proponer otro algoritmo que funcione rápidamente y sin la desventaja de la memoria?