Bonjour,
Cela fait deux jours que je suis sur un algo qui m'a paru trivial au début mais qui me fait tourner la tête à l'envers. J'ai cherché moi-même une bonne partie du temps puis je suis allé voir sur Google et ensuite j'ai fouillé developpez.com ainsi que la partie cours d'algo...
Mon souci est surtout de positionner les points et conditions d'arrêt de la partie récursive car je me doute bien qu'il me faille utiliser la récursivité.
Je vais énoncer le problème (très simple) et montrer comment je pense faire.
Ensuite viens le problème de l'implémentation (Perl)
Soit donc un ensemble de p éléments, pour exemple je vais le fixer a 6, mais ceci doit pouvoir être variable :
x1 x2 x3 x4 x5 x6
De cet ensemble je veux toutes les possibilités, sans ordre, de prendre n éléments parmi ces p. Pour exemple je vais prendre n = 3.
Il y a donc C6 3 soit 20 possibilités.
Je fixe le premier élément et je fais varier les 2eme et 3eme
Je fixe le 2eme élément et je fais varier le 3eme
Lorsque j'ai toutes ces combinaisons je passe à l'élément suivant.
Voici ce que l'on obtient comme solution par cet algo :
elt1 fixé, elt 2 fixé, elt 3 variable :
x1 x2 x3
x1 x2 x4
x1 x2 x5
x1 x2 x6
On augmente l'elt 2 de 1 et on varie de nouveau le 3 :
x1 x3 x4
x1 x3 x5
x1 x3 x6
puis :
x1 x4 x5
x1 x4 x6
puis
x1 x5 x6
Toutes les combinaisons avec le premier élément sont passées, on prend ensuite le deuxième élément :
x2 x3 x4
x2 x3 x5
x2 x3 x6
puis
x2 x4 x5
x2 x4 x6
puis
x2 x5 x6
Hop au 3eme :
x3 x4 x5
x3 x4 x6
x3 x5 x6
Enfin le dernier :
x4 x5 x6
On voit que l'on s'arrête lorsque l'on est sur l'élément numéro p - n + 1 soit l'element 6-3+1=4
Ceci est le point d'arrêt final de l'algo.
Un autre point d'arrêt intermédiaire doit être lorsque la sous-liste atteint n, soit ici 3 puisque nous voulons lister les sous-ensembles de 3 éléments.
Je m'arrête là de ma réflexion ce soir. J'apporterais d'autres précisons demain sur la formalisation de l'algo et sur le début de l'implémentation qui me pose problème.
Merci de votre attention !!!
Partager