Algo de combinaison

Algo de combinaison - Java - Programmation

Marsh Posté le 20-02-2006 à 14:21:47    

hello
 
J'ai une liste d'éléments finis noté (A0, A1, ..., Ax) (dans un vector ou un tab, n'importe)
 
je cherche a avoir tous les N-uplets possible de cette liste, sans avoir de doublon car l'ordre n'est pas important (ex : A0/A1/A2 == A0/A2/A1), ni plusieurs fois le meme éléments dans le tuple (interdit d'avoir A0/A0/A1).
 
pour N=2, facile, il suffit de faire :
  for (int i=0; i<n; i++) {
   for (int j=i+1; j<n; j++) {
    System.out.println( "couple " + i + "/" + j);
   }  
  }
 
fais je cherche une méthode générique pour n'importe quel N ?
 
Qq a une idée ? (mes cours de maths datent de qq années ....)
 

Reply

Marsh Posté le 20-02-2006 à 14:21:47   

Reply

Marsh Posté le 20-02-2006 à 15:23:53    

Bon, j'ai trouvé en faisant une fct récursive :
 

Code :
  1. public class Test {
  2. public static void couple (int nbElement, int cur, int loop, int nTuple, String prefixe) {
  3.  String tmp;
  4.  for (int i=cur; i<nbElement; i++) {
  5.   if (prefixe==null) {
  6.    tmp= "" + i;
  7.   } else {
  8.    tmp = prefixe + "," +i;
  9.   }
  10.   if (loop<nTuple-1) {
  11.    couple(nbElement, i+1, loop+1, nTuple, tmp);
  12.   } else {
  13.    System.out.println(" > "  + tmp);
  14.   }
  15.  }
  16. }
  17. public static void main(String[] args) {
  18.  int n=3;
  19.  int tuple=2;
  20.  couple(n, 0, 0, tuple, null);
  21. }
  22. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed