Fonction donnant ttes les combinaisons ...
Pépé Lélé
-
jcodeunpeu Messages postés 308 Date d'inscription Statut Membre -
jcodeunpeu Messages postés 308 Date d'inscription Statut Membre -
Bonjour,
J'aimerais connaître, que ce soit en C ou juste en algorithme, le code de la fonction qui permet à partir d'un ensemble de n élements (qui se trouvent dans un tableau) de construire un tableau contenant toutes les combinaisons possibles (donc en fait, tous les ordres) à partir de ces n élements (que l'on peut supposer différents, pour que ce soit plus simple).
Il y a normalement n*(n-1)*(n-2)*...*1 combinaisons dans ce cas là.
J'ai cherché sur le net le code d'une telle fonction, mais je ne l'ai pas trouvé.
J'ai construit cette fonction pr n=4, et de façon non récursive. Mais le cas qui m'intéresse est celui pour lequel n=6 (soit 720 combinaisons possibles), et je pense qu'il est plus judicieux d'utiliser une fonction récursive.
Si quelqu'un pouvait me fournir un lien fournissant une telle fonction, à défaut du code, merci.
À bientôt.
J'aimerais connaître, que ce soit en C ou juste en algorithme, le code de la fonction qui permet à partir d'un ensemble de n élements (qui se trouvent dans un tableau) de construire un tableau contenant toutes les combinaisons possibles (donc en fait, tous les ordres) à partir de ces n élements (que l'on peut supposer différents, pour que ce soit plus simple).
Il y a normalement n*(n-1)*(n-2)*...*1 combinaisons dans ce cas là.
J'ai cherché sur le net le code d'une telle fonction, mais je ne l'ai pas trouvé.
J'ai construit cette fonction pr n=4, et de façon non récursive. Mais le cas qui m'intéresse est celui pour lequel n=6 (soit 720 combinaisons possibles), et je pense qu'il est plus judicieux d'utiliser une fonction récursive.
Si quelqu'un pouvait me fournir un lien fournissant une telle fonction, à défaut du code, merci.
À bientôt.
2 réponses
-
Méthode 1 :
Tu peux le faire en récursifSoit E= {x} u E' melanges(E)= { {x} cat melanges(E') } u { melanges(E') cat {x} } //appel récursif melanges({y})={y} //condition d'arret
Avec u : union ; cat concaténation d'un prefixe / suffixe à un ensemble de valeurs
Méthode 2 :
Appel récursif basé sur un arbre de recherche :main(){ f({0...9},0,""); } //D valeurs restantes //i nombre de valeurs fixées (=position dans le résultat) //seq = un resutat en cours de construction f(D,i,seq){ si D={} { afficher seq return } pour chaque valeur encore dans D{ f(i+1,D\{valeur},seq cat valeur); } }
Bonne chance -
salut,
j'ai trouvé çà ...
Factorielle :long fact(int n) { if(n < 2) return 1; return n*fact(n-1); } void test (n){ int i=1; for( ; i < n;i++) { System.out.println("f( " + i + " ) = " + fact(i)); } System.out.println("factorielle de n : " + fact(i)); }pour les combinaisons : p(n,k) c(n,k) = ____ k ! permutations : n ! p(n,k) = _____ (k+1) !
A+