[algo] Toutes les combinaisons d'un tableau à 2 dimensions?

Toutes les combinaisons d'un tableau à 2 dimensions? [algo] - PHP - Programmation

Marsh Posté le 13-12-2011 à 17:42:35    

Bonjour,
Ça parait facile, mais c'est un vrai casse-tête! :cry:  
J'ai un tableau dont chaque case contient un tableau, on ne sait bien sûr pas le nombre de cases dans les 2 cas. Je n'ai besoin que des n° de case mais je dois écrire toutes les combinaisons possibles.
 
 
Exemple, un print_r() donne pour le tableau d'entrée:
 
Array
(
    [1] => Array
        (
            [1]
            [2]
        )
 
    [2] => Array
        (
            [1]
            [2]
            [3]
            [4]
            [5]
        )
 
    [3] => Array
        (
            [1]
        )
 
    [4] => Array
        (
            [1]
            [2]
        )
)
 
 
Résultat recherché:
1,1,1,1
2,1,1,1
1,2,1,1
1,3,1,1
1,4,1,1
1,5,1,1
1,2,1,2
1,3,1,2
1,4,1,2
....
en tout 20 combinaisons possibles puisque 2*5*1*2 éléments...  :sweat:


Message édité par Daxorp le 13-12-2011 à 17:43:03

---------------
Daxorp - Portail Kiao
Reply

Marsh Posté le 13-12-2011 à 17:42:35   

Reply

Marsh Posté le 14-12-2011 à 10:48:37    

fonctions récursives, 3 lignes. tu connais ?  c une fonction qui s'appelle elle même.
en gros elle reçoit un tableau et une chaine.
a chaque boucle, le tableau doit depiler, la chaine doit empiler et faut une condition pour s'arreter :D


Message édité par rengzehn le 14-12-2011 à 10:49:07
Reply

Marsh Posté le 14-12-2011 à 19:22:59    

Je pensais bien à quelque chose dans ce goût-là, mais je n'arrive à rien.
Je suis plutôt parti dans le sens de faire x chaines dans un tableau s'il faut x combinaisons, et de remplir ces x chaines au fur et à mesure. C'est moins propre mais je n'arrive pas autrement! :sweat:


---------------
Daxorp - Portail Kiao
Reply

Marsh Posté le 14-12-2011 à 22:16:22    

Essaie ça :
Soit LEN la longueur du grand tableau Tab.
On crée un tableau Index de la taille Len qui contiendra les indices courants des differents sous tableaux du tableau principal Tab
Ce tableau Index est intialisé à 0 (si les indices de tableaux dans ton langage commencent à 0).
n sera l'indice courant dans le tableau Index.

debut
 n <- 0
 tant que n est strictement inférieur à LEN faire
  afficher la combinaison courante
  Incrémenter Index[n] de 1
  tant que N est strictement inférieur à LEN && Ind[n] est égal à la taille de Tab[n] faire
   Ind[n] reçoit 0
   incrémenter n de 1
   si n est strictement inférieur à LEN alors
    incrémenter Ind[n] de 1
   finsi
  fin tant que
  si n est strictement inférieur à LEN alors
   n reçoit 0
  fin si
 fin tant que
fin


Message édité par Trap D le 14-12-2011 à 22:17:12
Reply

Marsh Posté le 15-12-2011 à 08:33:41    

voici un exemple de fonction recursive :

Code :
  1. function combi($a,$s)
  2. {
  3.   // pour chaque premier sous-tableau
  4.   foreach ( current($a) as $val )
  5.     // si on est a la fin de l'arbre on ecrit la ligne
  6.     if ( count($a) === 1 ) echo( $s.$val."\n" );
  7.     // sinon on continue de parcourir l'arba avec les autres sous tableaux
  8.     else combi( array_slice($a, 1, count($a)-1) , $s.$val );
  9. }
 

et tu l'appelles avec

Code :
  1. combi($a,'');


$a c'est ton tableau


Message édité par rengzehn le 15-12-2011 à 08:36:59
Reply

Marsh Posté le 15-12-2011 à 09:44:21    

Trap D, ça ressemble à ce que j'ai fait, je vais essayer de terminer comme ça.
rengzehn, je vais essayer aussi parce que c'est joli en récursif et je ne suis pas très à l'aise avec cette méthode!
Merci à vous 2. :jap:


---------------
Daxorp - Portail Kiao
Reply

Sujets relatifs:

Leave a Replay

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