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?

Respuestas a la pregunta(12)

Su respuesta a la pregunta