Fonction donnant ttes les combinaisons ...

Pépé Lélé -  
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.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    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
  2. jcodeunpeu Messages postés 308 Date d'inscription   Statut Membre 6
     
    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