Schnelle Permutation -> Zahl -> Permutationszuordnungsalgorithmen
Ich habe n Elemente. Nehmen wir zum Beispiel 7 Elemente, 1234567. Ich weiß, dass es 7 gibt! = 5040 Permutationen dieser 7 Elemente möglich.
Ich möchte einen schnellen Algorithmus mit zwei Funktionen:
f (number) ordnet einer eindeutigen Permutation eine Zahl zwischen 0 und 5039 zu
f '(Permutation) ordnet die Permutation der Zahl zu, aus der sie generiert wurde.
Die Entsprechung zwischen Nummer und Permutation ist mir egal, vorausgesetzt, jede Permutation hat ihre eigene eindeutige Nummer.
So könnte ich zum Beispiel Funktionen haben, bei denen
f(0) = '1234567'
f'('1234567') = 0
Der schnellste Algorithmus, der in den Sinn kommt, besteht darin, alle Permutationen aufzulisten und eine Nachschlagetabelle in beide Richtungen zu erstellen, sodass f (0) nach dem Erstellen der Tabellen O (1) und f ('1234567') a sein würde Nachschlagen an einer Schnur. Dies ist jedoch speicherhungrig, insbesondere wenn n groß wird.
Kann jemand einen anderen Algorithmus vorschlagen, der schnell und ohne den Gedächtnisnachteil arbeitet?