J'aimerais deuxième Permaquid de réponse. L'algorithme, il cite les œuvres d'une façon fondamentalement différente de l'différents permutation énumération des algorithmes qui ont été proposés. Il ne génère pas de toutes les permutations de n objets, il génère un distinct spécifique de permutation, étant donné un nombre entier compris entre 0 and n!-1
. Si vous avez besoin qu'une seule permutation, c'est beaucoup plus rapide que d'énumérer tous et en sélectionnant l'un.
Même si vous avez besoin de toutes les permutations, il fournit des options qu'une seule permutation algorithme d'énumération n'est pas. Une fois, j'ai écrit un brute-force cryptarithm cracker, qui a essayé tous les moyens possibles d'affectation des lettres aux chiffres. Pour base-10
problèmes, il a été adéquat, car il y a seulement 10!
permutations à essayer. Mais pour l' base-11
des problèmes ont pris une couple de minutes et base-12
des problèmes a fallu près d'une heure.
J'ai remplacé la permutation algorithme d'énumération que j'avais été à l'aide d'un simple i=0--to--N-1
pour la boucle, à l'aide de l'algorithme Permaquid cité. Le résultat a été que légèrement plus lent. Mais puis-je diviser l'intervalle entier dans les quartiers, et a couru de quatre pour-boucles simultanément, chacun dans un thread séparé. Sur mon processeur quad-core, le programme s'est déroulé près de quatre fois plus rapide.
Tout comme le fait de trouver une personne de permutation à l'aide de la permutation de l'énumération des algorithmes est difficile, générant délimitées sous-ensembles de l'ensemble de toutes les permutations est également difficile. L'algorithme que Permaquid cité fait à la fois de ces très facile