Combinaisons

Contenu du snippet

Renvoi toutes les combinaisons de n booléens et toutes les combinaisons d'une chaine de caractère.

Algorythme :
Utilise le fait que les combinaisons d'un octets (en binaire évidemment) sont les chiffres en base 10 de 0 à 255

Code :
Deux fonctions : une qui travaille sur des booléens et une sur des chaînes de caractère.
+des fonctions d'affichage et de test

Source / Exemple :


class combinaisons{
 //renvoi toutes les combinaisons de t booléens
 static boolean[][]Combinaisons(int t){//t=taille de la chaine
     boolean[][]comb=new boolean[(int)Math.pow(2,t)][t];
     for(int i=0;i<comb.length;i++){
      int a=i;
      for(int j=comb[0].length-1;j>=0;j--){
       if(a%2==1){
        comb[i][j]=true;
        a=(int)(a/2);
       }
       else{
        a/=2;
       }
      }
     }
     return comb;
    }
    
    //renvoi toutes les combinaisons d'une chaine de caractère
    static char[][] Combinaisons(String mot){
     int longueur=mot.length();
  int nbr=(int)Math.pow(2,longueur);//nbr=nombre de combinaisons
     char[][] comb=new char[nbr][longueur];
     int k=0;
     for(int i=0;i<nbr;i++){
      k=i;
      for(int j=longueur-1;j>=0;j--){
       if(k%2==0){
        k/=2;
       }
       else{
        comb[i][j]=mot.charAt(j);
        k/=2;
       }
      }
     }
     return comb;
    }
    static void afficher(char[][] a){
     for(int i=0;i<a.length;i++){
      for(int j=0;j<a[0].length;j++){
       System.out.print(a[i][j]);
      }
      System.out.println();
     }
    }
    static void afficher(boolean[][] a){
     for(int i=0;i<a.length;i++){
      for(int j=0;j<a[0].length;j++){
       System.out.print(a[i][j]);
      }
      System.out.println();
     }
    }
    public static void main(String[]adrien){
     afficher(Combinaisons(5));
     afficher(Combinaisons("abcd"));
    }
}

Conclusion :


Remarques :
Remplacez les tableaux par des listes si vous ne voulez pas de blanc dans les combinaisons.
Ne dépassez pas la capacité du type primitif utilisé !!!
  • ne marche pas pour les mots de plus de n lettres :
  • n tq : 2^n=capacité du type
  • pour les byte n=1*8=8
  • pour les short n=2*8=16
  • pour les int : n=4*8=32
  • pour les long : n=8*8=64


Signature :
Le danseur de Java qui fume des Caml

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.