Rapide permutation -> nombre> permutation de cartographie des algorithmes

J'ai de n éléments. Pour le bien d'un exemple, disons, 7 éléments, 1234567. Je sais qu'il y a 7! = 5040 permutations possibles de ces 7 éléments.

Je veux un algorithme rapide composée de deux fonctions:

f(nombre) cartes un nombre entre 0 et 5039 à un unique permutation, et

f'(permutation) les cartes de la permutation de retour pour le nombre qu'il a été généré à partir.

Je ne m'inquiète pas à propos de la correspondance entre le numéro et la permutation, fournissant à chaque permutation a son propre numéro unique.

Ainsi, par exemple, je pourrais avoir les fonctions où

f(0) = '1234567'
f'('1234567') = 0

L'algorithme le plus rapide qui vient à l'esprit consiste à énumérer toutes les permutations et de créer une table de recherche dans les deux directions, de sorte que, une fois que les tables sont créées, f(0) O(1) et f('1234567") devrait être une recherche sur une chaîne de caractères. Cependant, c'est la mémoire de la faim, en particulier lorsque n devient grand.

Quelqu'un peut proposer un autre algorithme de travailler rapidement et sans la mémoire inconvénient?

  • Bien que l'algorithme ci-dessous est très complet, vous avez bien remarquer que l'algorithme le plus rapide est une table de recherche. Vous êtes vraiment pas à parler de " autant que de mémoire, même si bien sûr, cela dépend de votre système d' & plate-forme. Mais si une table de recherche est suffisant, et si c'est une application du monde réel, de l'utiliser. Fast & simple!
  • Vous le dire, mais n n'a pas à être très grand pour elle d'être bête. Pour 12 éléments, le 12! est 479,001,600 permutations. C'est une grande table de!
  • Ne pas se tromper par les différents postes de l'utilisation n de sens différent. Certains n stand pour la longueur de la chaîne, certains n stand pour le nombre de permutations possibles. Ne pas aveuglément comparer le big O notion. -- Retardataires être avertir -- –
InformationsquelleAutor ijw | 2009-10-01