J'essaie de résoudre un problème en utilisant backtracking et j'ai besoin des permutations de nombres pour cela. J'ai cet algorithme de base qui le fait mais le problème est ... les résultats ne viennent pas dans l'ordre normal.permutations Python récursive
def perm(a,k=0):
if(k==len(a)):
print(a)
else:
for i in range(k,len(a)):
a[k],a[i] = a[i],a[k]
perm(a, k+1)
a[k],a[i] = a[i],a[k]
Exemple: pour [1,2,3] les résultats normaux seraient: [1,2,3] [1,3,2] [2,1,3] [2,3,1 ] [3,1,2] [3,2,1]
Considérant que cet algorithme va échanger les 2 derniers éléments. Je comprends pourquoi. Je ne sais pas comment corriger cela.
Je ne veux pas utiliser les permutations d'itertools. Le code ci-dessus peut-il être facilement réparé pour fonctionner correctement? Quelle serait la complexité de cet algorithme d'en haut?
Voici un code non récursif qui utilise un ancien algorithme de Narayana Pandita pour produire des permutations dans l'ordre lexicographique (en supposant que la liste initiale est triée correctement): http://stackoverflow.com/a/31678111/4014959 –
Vous pouvez également trouver http://stackoverflow.com/a/ 28525468/4014959 d'intérêt: il peut produire toute permutation à partir d'un numéro d'index. –