Fonction donnant ttes les combinaisons ...

Fermé
Pépé Lélé - 16 nov. 2005 à 14:46
jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 2 décembre 2006 - 17 nov. 2005 à 05:30
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.
A voir également:

2 réponses

mamiemando Messages postés 33432 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 décembre 2024 7 809
17 nov. 2005 à 01:19
Méthode 1 :

Tu peux le faire en récursif
Soit 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
0
jcodeunpeu Messages postés 365 Date d'inscription mercredi 9 novembre 2005 Statut Membre Dernière intervention 2 décembre 2006 6
17 nov. 2005 à 05:30
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+
0