Retour à la liste complète des articles
VsCode : comment ouvrir un dossier avec le menu contextuel
Mac Osx : Comment écrire ² facilement
Prestashop sur mesure : pourquoi ? Pour qui ?
Mac : comment ouvrir Sublime Text 2 avec le menu contextuel
Wordpress : création de vos thèmes sur mesure
3 points cruciaux pour un e-commerce efficace
Prestashop : Mise en forme des prix
CSS : Comment utiliser les symboles +, > ET ~
Comment bien utiliser les flex boxes ?
Comment importer une grosse base de données
JS : Les permutations d'un tableau en javascript
Récement confronté à devoir comparer des ensembles dans des ordres différents de données identiques, j'ai été amené à faire des permutations de mes tableaux de données.
Je vous suggère les deux fonctions ci-dessous, elles sont récursives et bouclent automatiquement pour afficher tous les cas de figure.
La première :
- Fixe la chaine à la position de départ (first),
- Trouve toutes les permutations circulaires à partir de cette chaine jusq’à la dernière
- Et pour chaque permutation, chercher les anagrammes à partir de la chaine suivante grâce à la seconde fonction qui pourrait dirrectement être intégrée dans la première mais que l'on garde sortie pour faciliter la lisibilité et la compréhention du code.
La seconde :
- Fixe la chaine à la position de départ (i),
- Decale tous les elements d’un rang vers la gauche, a partir de la position i+1
- Met le premier element à la dernière position
/**
* @var Arr(array) tableau à permuter
* @var first(int) premier index à prendre en compte
* @return (string) affiche dans les logs le tableau permuté
*/
function anagramma(Arr, first)
{
if ((Arr.length - first) <= 1)
{
console.log( Arr.join('-') );
}
else
{
for (var i = 0; i < Arr.length-first ; i++)
{
anagramma(anagramma_round(Arr, first), first+1);
}
}
}
/**
* @var Arr(array) tableau à permuter
* @var i(int) premier index à prendre en compte
* @return (array) retourne le tableau après avoir permuté tous les élément de un niveau vers la gauche
*/
function anagramma_round(Arr, i){
var temp = Arr[i];
for(var j=i;j < Arr.length-1;j++)
{
Arr[j] = Arr[j+1];
}
Arr[Arr.length-1] = temp;
return Arr;
}
// déclanche la fonction
anagramma([1, 2, 'a'], 0);
Ce qui affiche dans la console :
2-1-a
2-a-1
a-2-1
a-1-2
1-a-2
1-2-a
Liens utiles :
- Les permutations, les arrangements et les combinaisons
- Généralités sur les algorithmes de permutations
Enjoy!!