ennumération de combinaisons d'éléments

ennumération de combinaisons d'éléments - Algo - Programmation

Marsh Posté le 19-07-2007 à 11:21:54    

Bonjour;
 
Petite question:
Soit un ensemble de n éléments distincts (un vecteur d'entiers dans mon cas), comment faire pour lister toutes les combinaisons possibles d'éléments pris m à m
 
Quelqu'un a-t-il une solution simple pour cette tache ?

Reply

Marsh Posté le 19-07-2007 à 11:21:54   

Reply

Marsh Posté le 19-07-2007 à 15:30:39    

oui, utiliser les boucles for
 
ps : on ne fait pas les exos ici. Viens avec ton code et on en reparle...


Message édité par rufo le 19-07-2007 à 15:31:48
Reply

Marsh Posté le 19-07-2007 à 16:07:34    

Moi je dirais plutôt une boucle tant que avec trois tableaux : le tableau qui représente le vecteur source (indice 1 .. n), ke tableau qui représente le vecteur but (indice 1 .. m) et un tableau d'index dans le vecteur source (indice 1.. m).

Reply

Marsh Posté le 19-07-2007 à 19:12:14    

Trap D a écrit :

Moi je dirais plutôt une boucle tant que avec trois tableaux : le tableau qui représente le vecteur source (indice 1 .. n), ke tableau qui représente le vecteur but (indice 1 .. m) et un tableau d'index dans le vecteur source (indice 1.. m).


 
Ben en fait, le problème reste entier, comment tu met à jour ton tableau d'index sur le vecteur source ?
 
Si on veut prendre des éléments 2 à 2, on fait simplement deux boucles imbriquées et basta

Code :
  1. for (int i=0; i<n-1; i++) {
  2.    for (int j=i+1; j<n; j++{
  3.       ...
  4.    }
  5. }


 
Pour le cas général, (choisir des éléments m à m), on peut visiblement le faire avec une fonction récursive appelée m fois, mais je me demande s'il n'y a pas plus simple...
 
 
 

Reply

Marsh Posté le 19-07-2007 à 19:19:58    

J'ai simplement oublié de dire qu'il faut un tableau pour mémoriser les combinaisons, mais sinon, tu as le principe.

Reply

Marsh Posté le 20-07-2007 à 10:19:18    

Moi j'aurai tendance a faire une class Combinaison en definisant entier A et entier B et redefinir ce qu'il faut pour faire des recherche dans un Vector de Combinaison.
 
Et un code genre :

Code :
  1. Vector<Combinaison> vComb = new Vector<Combinaison>();
  2.    Combinaison objComb;
  3.    for (int i = 0; i < n - 1 ; i++) {
  4.       for (int j = i + 1 ; j < n ; j++) {
  5.          objComb = new Combinaison(v1.get(i), v2.get(j));
  6.        
  7.          if (not vComb.exists(objComb)) {
  8.             vComb.add(objComb);
  9.          }
  10.       }
  11.    }


Message édité par MEI le 20-07-2007 à 10:20:47

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

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