Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214
itc:tps:tp4:exercice2

Table des matières

Énumération des permutations d'une liste

On prend une liste, par exemple L = [1, 2, 3], et on voudrait donner la liste de toutes les « permutations » que l'on peut faire.

Par exemple, pour L = [1, 2, 3], on obtiendrait [[1, 2, 3], [2, 3, 1], [3, 1, 2], [1, 3, 2], [3, 2, 1], [2, 1, 3]].

On utilise pour cela un algorithme récursif.

Exemple pour n = 3, L = [A, B, C],

On a ainsi obtenu toutes les permutations possibles de [A, B, C].

Il y a donc récursivité puisque pour obtenir les permutations de n items, on doit calculer les permutations de n-1 items.

fonction récursive

Pour l'implémentation de cet algorithme en Python, on commence par créer une fonction récursive permute(L, i, result) qui permute les éléments de la liste L en laissant fixes les éléments d'indices strictement inférieurs à i et ajoute à la liste result des permutations déjà obtenues la nouvelle permutation ainsi créée.

On remarquera que lorsque i == len(L)-1, on se contente d'ajouter L à result.

FONCTION permute
ENTRÉES:
  L: liste dont on veut les permutations
  i: les items de rang <= i restent à leur place
  result: tableau, collecte les permutations trouvées
DÉBUT
  soit n le nombre d'items de L
  SI i est n - 1 ALORS
    ajouter L au bout de result
  FIN
  POUR j allant de i à n-1 FAIRE
    permuter les items de rang i et j dans L
    
    ... complétez
    
    permuter les items de rang j et i dans L
  FIN
FIN    

fonction qui amorce la récurrence

Dans une fonction permutations(L) on initialise la liste attendue des permutations à pmt = [], puis on lance permute(L, 0, pmt) et on retourne pmt en fin du processus récursif.

def permutation(L):
    pmt = []
    permute(L, 0, pmt)
    return pmt

À faire : Faites l'implémentation et testez.