Page 1 sur 1

Génération de combinaisons sans répétition avec ordre.

Posté : 12 déc. 2013, 23:19
par jojolapine
Bonsoir à tous,

Je suis actuellement à la recherche d'un code pour générer les combinaisons possibles d'un tableau sans répétition et de toutes les tailles possibles.
Comme je ne suis pas un as pour expliquer le besoin, voici un exemple avec le tableau [A,B,C] :
A
AB
AC
ABC
ACB
B
BA
BC
BAC
BCA
C
CA
CB
CAB
CBA
Et je ne trouve pas ce que je souhaite, j'ai cherché un bon moment et j'ai trouvé ceci par exemple : php-debutant/combinaison-lettres-t33035.html mais l'ordre n'est pas pris en compte.
J'avoue etre bien perdu, j'ai tenté différentes choses, mais je ne parviens pas à mes fins...
Si une bonne ame pouvait m'indiquer un algorithme en pseudo code utilisable ?

Merci d'avance pour votre aide !

Re: Génération de combinaisons sans répétition avec ordre.

Posté : 13 déc. 2013, 12:42
par sirakawa
Je réfléchissais là-desus quand je suis tombé sur ce mystère (j'ai réduit le code au problème)
<?PHP
print "<h1>test</h1>";
$nb=6;
for ($i = 0; $i < $nb; $i++)
{
 	print "<br> I $i";
//idem avec $k = $i+1
	for($k = 0; $k < $nb; $k++);
	{
		print "<br> I $i K $k";			
	}	
}
$i = 0;

while ($i < $nb)
{
	 	print "<br> I $i";
	 	$k = 0;
	 	while ($k < $nb)
	 	{
		print "<br> I $i K $k";		
		$k++;		 		
	 	}
	$i++; 	
}
?>
sortie
test

I 0
I 0 K 6
I 1
I 1 K 6
I 2
I 2 K 6
I 3
I 3 K 6
I 4
I 4 K 6
I 5
I 5 K 6
I 0
I 0 K 0
I 0 K 1
I 0 K 2
I 0 K 3
I 0 K 4
I 0 K 5
I 1
I 1 K 0
I 1 K 1
I 1 K 2
I 1 K 3
I 1 K 4
I 1 K 5
I 2
I 2 K 0
I 2 K 1
I 2 K 2
I 2 K 3
I 2 K 4
I 2 K 5
I 3
I 3 K 0
I 3 K 1
I 3 K 2
I 3 K 3
I 3 K 4
I 3 K 5
I 4
I 4 K 0
I 4 K 1
I 4 K 2
I 4 K 3
I 4 K 4
I 4 K 5
I 5
I 5 K 0
I 5 K 1
I 5 K 2
I 5 K 3
I 5 K 4
I 5 K 5

Re: Génération de combinaisons sans répétition avec ordre.

Posté : 13 déc. 2013, 13:07
par Mazarini
function combine($tab,$longueur) {
     if ($longueur == 0) {
        return (array(''));
     }
     $result = array();
     for ($i=1;$i++;$i<=$longueur) {
        foreach ($tab as $index=>$valeur) {
            $tab2 = $tab;
            unset($tab2[$index]);
            $tab3 = combine($tab2,$longueur-1);
            foreach ($tab3 as $valeur3) {
                $result[] = $valeur . $valeur3;
            }
     }
     return $result; 
  }
  var_dump(combine(array('A','B','C'),3))
 
Non testé. Surtout, je ne sais pas si $tab2 = $tab duplique le tableau ou utilise les pointeurs.