Toutes les combinaisons possibles d'un tablea

Fermé
Absot Messages postés 777 Date d'inscription mardi 28 octobre 2008 Statut Membre Dernière intervention 4 septembre 2020 - 12 sept. 2011 à 18:27
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 12 sept. 2011 à 18:45
Bonjour, je suis en train de créer une fonction qui reçoit en paramètre un tableau et retourne toutes les combinaisons possibles de ce tableau.

Par exemple, si on reçoit le tableau suivant:
$tableau = array("a", "b");


Je voudrais faire en sorte de créer toutes les combinaisons possibles avec toutes les tailles possibles.

Avec ce tableau, ca doit retourner:
<quote>
a
b
aa
ab
ba
bb
</quote>

Voilà actuellement où j'en suis:
// longueur actuelle du mot
$longueur = 1;
// longueur maximum des mots
$longueurMax = 3;
// 
$i = 0;
// mot actuel
$currentWord = "";
$tabExemple = array("a", "b");
// nombre de caracteres dans le tableau
$nbrTab = count($tabExemple)-1;
// nombre de mots total
$nbrTotal = 0;

while($longueur <= $longueurMax)
{
	$nbrTotal = $nbrTotal + parcourDictionnaire($tabExemple, $currentWord);
	
	if($i <= $nbrTab)
	{
		$currentWord = $currentWord . $tabExemple[$i];
		$i++;
	}else
	{
		$i = 0;
	}
	$longueur++;
}

echo "Nombre d'entree dans le tableau: " . $nbrTab . "<br/>";
echo "Nombre total de mots: " . $nbrTotal;

function parcourDictionnaire($tabCaractere, $motCourant)
{
	$nbr = 0;
	foreach($tabCaractere as $caractere)
	{
		echo $motCourant . $caractere . "<br/>";
		$nbr++;
	}
	return $nbr;
}


Malheureusement, cela me renvoit:
<quote>
a
b
aa
ab
aba
abb
</quote>

Et je ne sais pas trop malheureusement ce qui ne va pas et cela fait quelques jours que je suis dessus. :/



1 réponse

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
12 sept. 2011 à 18:45
Ce genre de programme fait appel à de la récursivité. Je ne connais pas ton langage de programmation mais en gros :

AfficherTout(tableau, nombre, chaine)
    Si nombre=0
        Afficher(chaine)
    Sinon
        PourChaque element du tableau
            AfficherTout(tableau, nombre-1, chaine+element)
0