Algorithme de permutations

Algorithme de permutations - Algo - Programmation

Marsh Posté le 23-12-2005 à 09:56:58    

voilà mon problème, le but c'est d'écrire une fonction récursive permutation(n) qui renvoie la liste contenant toutes les permutations des chiffres 1 à n. Par exemple permutation(2)->[[1,2],[2,1]]
On me done deux types de liste : listesimple du genre [1,2] et listedansliste du genre [[1,2],[2,1]]
Et on me donne 4 fonctions que je peux admettre et utiliser :  
 
copie(liste) qui renvoie une copie des éléments de la liste
insére(l,k,p) qui insère l'élément p dans la liste l avant l'élément de rang k
ajoutefin(listedansliste,listesimple) qui rajoute listesimple comme dernier élément de liste dans liste.
 
On peut aussi utiliser longueur(l) qui renvoie la longueur d'une liste
 
Et avec ça je n'arrive quand meme pas. Parce que admettons que je teste pour n=3, il faut que je fasse à partir de la permutation de 2 qui est [[1,2],[2,1]] mais je ne sais pas commetn atteindre le premier élément [1,2] de cette liste pour insérer le 3 après.
 
Pouvez vous m'aider?

Reply

Marsh Posté le 23-12-2005 à 09:56:58   

Reply

Marsh Posté le 23-12-2005 à 10:30:26    

"Et avec ça je n'arrive quand meme pas. Parce que admettons que je teste pour n=3, il faut que je fasse à partir de la permutation de 2 qui est [[1,2],[2,1]] mais je ne sais pas commetn atteindre le premier élément [1,2] de cette liste pour insérer le 3 après. "
 
Pourrais tu expliquer ton raisonnement? Je ne comprends pas...

Reply

Marsh Posté le 23-12-2005 à 10:45:40    

eh bien en fait pour faire les permutatiosn de 1 à 3 à partir des permutations de 1 à 2 il faut ajouter 3 en première position dans [1,2] puis au milieu puis à la fin, comme ça on obtient [3,1,2],[1,3,2],[1,2,3] et on fait la meme chose avec [2,1]  et on a    [3,2,1],[2,3,1],[2,1,3] et on a bien toutes les permutations de 1 à 3 donc on utilise insere([1,2],k,3) pour k=0 jusqu'à longueur [1,2] mais je ne sais pas comment prendre [1,2] dans [[1,2][2,1]].  
Est-ce que je suis plus claire là?

Reply

Marsh Posté le 23-12-2005 à 11:01:20    

Oui, tu est bien plus claire.
 
Tu ne crois pas que tu pourrais supposer que listedansliste(i) renvoie une listesimple?

Reply

Marsh Posté le 23-12-2005 à 11:08:59    

oui je pourrais et je pense que c'est ce que je ferais si je trouve rien d'autre mais je suis pas sure que ce soit comme ça puisque jusqu'à présent je n'avais travaillé que sur les listes chainées et là c'ets interdit de les utiliser Merci pour toute ton aide en tout cas

Reply

Marsh Posté le 29-12-2005 à 23:35:58    

salut! je suis curieux de savoir si tu a resolu cet algo!
si oui peut tu le posté sur ce topic merci

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed