Probleme Boucle "pour" en nombre variable

Probleme Boucle "pour" en nombre variable - Algo - Programmation

Marsh Posté le 26-05-2008 à 13:03:29    

Bonjour,
 
J'ai un problème d'algorithmique par rapport au parcours de dossiers et fichiers mais plus particulièrement pour coder un nombre variable de boucles "pour".
 
Mon Problème :
 
J'ai à ma disposition n dossiers contenant chacun k(n) fichiers. (Chaque dossier ne contient pas forcément le même nombre de fichiers)
 
Je voudrais à partir de ces fichiers créer toutes les combinaisons possibles de fichiers en prenant un fichier dans chaque dossier.
Cependant la fonction que je chercher à coder devra pouvoir prendre le nombre de dossiers en paramètre. Mon problème se trouve donc à cet endroit la. En effet, avec un nombre de dossiers fixe j'avais pensé à la solution suivante :
 
Pour 3 dossiers A,B,C contenant respectivement Nb_fichiers_A, Nb_fichiers_B et Nb_fichiers_C fichiers :
 
 

Code :
  1. Pour a de 1 à Nb_fichiers_A
  2.       Pour b de 1 à Nb_fichiers_B
  3.             Pour c de 1 à Nb_fichiers_C
  4.                       ....
  5.             Fait
  6.      Fait
  7. Fait


 
 
En partant des dossiers :
A : FichierA_1 FichierA_2 FichierA_3 (3 fichiers)
B : FichierB_1 FichierB_2 (2 fichiers)
C : FichierC_2 FichierC_3 (2 fichiers)
 
Je voudrais donc obtenir les (3*2*2=12) combinaisons :
A1-B1-C1 A1-B1-C2
A1-B2-C1 A1-B2-C2
A2-B1-C1 A2-B1-C2
A2-B2-C1 A2-B2-C2
A3-B1-C1 A3-B1-C2
A3-B2-C1 A3-B2-C2
afin de réutiliser ces fichiers pour une utilisation ultérieure.
 
Comment faire pour avoir un nombre de dossiers variable sans recourir à une solution "moche" consistant à poser un nombre max de dossiers et faire des tests ...
Si cela peut vous être utile, j'utilise le language R pour programmer mais une solution algorithmique me permettrait d'avancer.
 
En espérant avoir été assez clair, Merci par avance de votre aide!
 
Bonne journée

Reply

Marsh Posté le 26-05-2008 à 13:03:29   

Reply

Marsh Posté le 26-05-2008 à 18:29:44    

Salut
 
Celà se fait avec un seul indice t, un tableau Cur(N) qui mémorisera la position dans les différents tableaux k(N), et un tableau Max(N) qui mémorise le nombre maximum d'éléments du tableau K(n).
t sert à se promener dans les différents tableaux Cur(N) au moment de l'incrémentation


Initialisation
On est au premier élément de tous les tableaux
pour i de 1 à N faire
 Cur(i) = 1
fin pour
 
On balaie le premier tableau
t = 1
tant que t <= N faire
 construire la chaine courante indicée par t (par exemple K(1)(Cur(1)) + K(2)(Cur(2)) + K(3)(Cur(3))+ ...)
 Cur(t) <- Cur(t) + 1
 tant que t <= N et Cur(t) > Max(t) faire
     On remet le compteur au départ pour ce tableau
  Cur(t) <- 1
  on passe au tableau suivant
  t <- t + 1
  On vérifie qu'on n'a pas dépasser le nombre de tableaux
  si t <= N alors
      on augment l'indice courant de ce tableau
   Cur(t) <- Cur(t) + 1
   Si on ne dépasse l'indice maxi du tableau courant
   si Cur(t) <= Max(t)  
       on repart pour un tour  
    t = 1;
   fin si
  fin si    
 fin tant que
fin tant que


Message édité par Trap D le 26-05-2008 à 18:30:22
Reply

Marsh Posté le 28-05-2008 à 10:54:51    

Merci Trap D.  
J'ai malheureusement trouvé une autre solution plus rapidement! Mais j'essaierais quand même la tienne si j'ai un peu de temps pour voir laquelle est la mieux!
 
Bonne journée


Message édité par zz2f3 le 28-05-2008 à 10:55:20
Reply

Marsh Posté le 29-08-2008 à 12:04:25    

je sais que je poste un peu tard ^^ mais on peut aussi le faire très simplement de manière récursive ^^

Reply

Sujets relatifs:

Leave a Replay

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