re,
si vous en connaissiez un très rapide pour générer toutes les permutations (ou mieux juste celle qui commencent par '1').
Si je me plante pas tu veux jor generer
(1,2,3,4,5)
(1,2,3,5,4)
...
(1,5,2,3,4)
Toutes les poss ou le 1 est devant.
Si c'est le cas, voici un script php
- Code: Tout sélectionner
/**
* @param e un nombre
* @param listeUtilises tableau de nombres
* @return vrai si e est present dans listeUtilises
* faux si e n'est pas present
*/
function estUtilise($e,$listeUtilises){
return in_array($e,$listeUtilises);
}
/**
* Affiche la liste des permutations qui commencent par la valeur "e".e prend sa valeur
* dans listeNombres
* @param n nombre delements a permuter. n vaut la taille du tableau de listeNombres...
* @param listeNombres tableau de nombres (1,4,6,8,10)
* @param listeUtilises tableau contient les valeurs des nombres deja utilises dans la permutation courante
* @param indiceCourant indice du degre de recursivite
* @param e element a ajouter dans la permutation (on initialise la permutation avec 1 par defaut)
* @param permutCourante un tableau qui contient la permutation en cours
*/
function recurreMoi($n,&$listeNombres,$e,$listeUtilises = array(),$indiceCourant=0,&$permutCourante=array()){
/*
* Algorithme :
* Initialisation : On remplit notre permutation par le premier nombre : e
* Ensuite, on va remplir la case numero 1 de la permutation (la case numero 0 contenant e)
* Pour ca, on pioche tous les nombres disponibles, et on teste s'ils n'ont pas déjà été utilisés
* Si on peut utiliser un nombre, on se rappele pour remplir la case numero 2, et on marque le nombre
* qu'on vient d'utiliser (pour ne plus l'utiliser par la suite)
* Lorsque la case numero n-1 (la permutation est pleine) est atteinte, on affiche le résultat
*
*/
//on le rajoute l'element ou i faut dans notre permutation (dans la bonne "case")
$permutCourante[$indiceCourant] = $e;
//on le marque en tant qu'utilisé
array_push($listeUtilises,$e);
//Si on a fini, cad on est en derniere case du tableau de permutation
if($indiceCourant == $n -1){
//on affiche notre permutation
show($permutCourante);
}else{
//pour tous les elements de listeNombres
for($i = 0; $i< $n; $i++){
$e = $listeNombres[$i];
//si on s'est pas encore servi du nombre
if(!estUtilise($e,$listeUtilises)){
//on va remplir la case suivante de notre permutation
recurreMoi($n,$listeNombres,$e,$listeUtilises,$indiceCourant+1,$permutCourante);
}
}
}
}
Bon, on peut remarquer qu'on a une liste de nombres au lieu de numéroter de 1 a n.
Qui peut le plus peut le moins...
On remarque aussi qu'on peut tout faire commencer par un autre nombre que 1, jor 2.
J'espère que c'était ca que tu cherchais.
Si tu cherches a donner précisément une permutation (ou tu les as toutes ordonnées), alors chui a coté :marteau: