Partage
  • Partager sur Facebook
  • Partager sur Twitter

Algorithme de combinaison

Sans répétition et avec ordre...

Sujet résolu
    14 mars 2009 à 1:28:51

    Bonsoir les gens.

    Je cherche à réaliser une fonction récursive permettant d'obtenir toutes les combinaisons de n lettres, sans répétition et avec ordre.
    C'est à dire que si je pars d'un tableau ["A","B","C"], j'aimerais obtenir en résultat (dans un tableau de chaînes) :
    ["ABC","ACB","BAC","BCA","CAB","CBA"]

    Mais je galère totalement là... J'ai tenté pas mal de choses... mais y'a rien qui marche. Avec la récursivité, je me perds dans la portée des variables, etc.

    Bref, si quelqu'un avait la gentillesse de donner une piste concrète, ce serait très gentil. :)

    Merci d'avance. Bonne nuit. ;)
    • Partager sur Facebook
    • Partager sur Twitter
      14 mars 2009 à 9:04:40

      C'est un truc dans ce genre là que tu veux?
      var input=["A","B","C"];
      var output=new Array();
      
      function is_already_in(str,car){
      //sert à vérifier si le caractère est déjà dans la chaîne
      	for(var i=0,l=str.length;i<l;i++){
      		if(str.charAt(i)==car) return true;
      	}
      	return false;
      }
      
      function combinatoire(str_combin){
      //fonction récursive permettant d'obtenir toutes les combinaisons de n lettres, sans répétition et avec ordre.
      	var str=str_combin || "";
      	var l=input.length;
      	if(str_combin.length==l){ //fin de la récursivité
      		output.push(str_combin);
      		return;
      	}
      	for(var i=0;i<l;i++){
      		if(is_already_in(str,input[i])) continue;
      		combinatoire(str_combin+input[i]); //recursivité
      	}
      	return;
      }
      
      combinatoire("");
      alert(output.toString());
      

      Je ne suis pas sûr que le code est bien optimisé.
      De même il pourrait être amélioré en mettant les variables input et output en arguments à la place de variables globales.
      • Partager sur Facebook
      • Partager sur Twitter
        14 mars 2009 à 10:07:33

        Hey merci restimel !

        Je verrais si j'arrive à l'optimiser un peu.

        Merci beaucoup en tous cas. :D
        • Partager sur Facebook
        • Partager sur Twitter

        Algorithme de combinaison

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown