Szybka permutacja -> liczba -> algorytmy mapowania permutacji
Mam n elementów. Dla przykładu, powiedzmy, 7 elementów, 1234567. Wiem, że jest 7! = 5040 możliwych kombinacji tych 7 elementów.
Chcę szybkiego algorytmu zawierającego dwie funkcje:
f (liczba) odwzorowuje liczbę z zakresu od 0 do 5039 na unikalną permutację i
f '(permutacja) odwzorowuje permutację z powrotem do liczby, z której została wygenerowana.
Nie obchodzi mnie zgodność między liczbą a permutacją, pod warunkiem, że każda permutacja ma swój unikalny numer.
Na przykład mogę mieć funkcje gdzie
f(0) = '1234567'
f'('1234567') = 0
Najszybszym algorytmem, jaki przychodzi do głowy, jest wyliczenie wszystkich permutacji i utworzenie tabeli odnośników w obu kierunkach, tak że po utworzeniu tabel f (0) będzie O (1), a f („1234567”) będzie wyszukiwanie na łańcuchu. Jest to jednak głód pamięci, zwłaszcza gdy n staje się duże.
Czy ktoś może zaproponować inny algorytm, który działałby szybko i bez wad pamięci?