Bonjour à tous(tes),
Quelqu'un aurait un algo de permutation en pseudo-code.
Pour une chaine de caractères a$ de longueur n avec f=n!
Sans doublons si possible
J'ai la première ligne
Pour x=1 to f
Gros merci aux savants.
Bonjour à tous(tes),
Quelqu'un aurait un algo de permutation en pseudo-code.
Pour une chaine de caractères a$ de longueur n avec f=n!
Sans doublons si possible
J'ai la première ligne
Pour x=1 to f
Gros merci aux savants.
Bonjour
J'ai la première ligne
Pour x=1 to fIl ne faut pas mettre la réalisation avant la conception.
De plus, ta question est sibylline.
Dans quel contexte es-tu ? Et que cherches-tu à faire ?
Normalement, on permute de la façon suivante, que ce soit des nombres, des lettres, ou des cageots de fraises :
En Perl, on utiliserait une syntaxe comme celle-ci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 temp <- a a <- b b <- temp
Code : Sélectionner tout - Visualiser dans une fenêtre à part ($a,$b)=($b,$a);
Je cherche à avoir toutes les combinaisons d'une chaine de caractères
Je sais que par exemple pour 6 caractères je dois avoir 720 combinaisons (6!)
J'en conclus donc que je dois faire 720 traitements
D'où une boucle de 720 pas
C'est pas ça ?
On peut l'appeler comme ça, sauf qu'il n'y aura pas que des lettres.
Je cherche une explication claire des opérations à effectuer.
Pour parvenir au but.
EDIT:C'est bon pour l'instant, je fouille le forum avec "anagramme" et je trouve pas mal de choses.
Le but n'a jamais été exprimé.
Si c'est pour éviter les doublons car tu considères 2 ensembles comme identiques à une permutation près, le conseil est de trier et comparer. Ne va pas t'amuser à lister les anagrammes.
Si le but est de comparer à un dictionnaire, le conseil est parfois de partir du dictionnaire et d'écrire une fonction de comparaison, entre ta réglette de départ et ton entrée de dictionnaire, qui détermine s'ils sont anagrammes l'un de l'autre.
Si tu veux lister les possibilités, tu as déjà vu un concours de beauté.... 4ème dauphine .... 3ème dauphine .... 2ème dauphine .... 1ère dauphine .... Miss France ! Tu dois faire pareil.
Puisque tu veux connaître le but final, le voici:
Je veux, à partir d'une expression du genre: "x=a+(b*c) (en restant conscient que le nombre de caractères sera forcément limité par n!)
Obtenir les expressions équivalentes de toutes les variables de l'expression.
Pour ce faire je compte utiliser la force brute, à savoir:
Donner des valeurs numériques arbitraires aux variables.
Calculer x
Faire la combinatoire des variables, opérateurs et parenthèses
Eliminer les incohérents (+=)a(b...)
Calculer, comparer, extraire.
Le tout pour le fun, of course.
Bonjour,
Au moins, c'est plus clair, et cela peut de simplifier dans la mesure où:
1) la chaîne commence obligatoirement par 'x=';
2) les parenthèses sont inutiles dans l'exemple donné, puisque
'x=a+b+c' a un sens, de même que 'x=a+b*c' , 'x=a*b+c' , 'x=a*b*c' ... si tu te limites aux deux opérations mentionnées.
3) les symboles des nombres alternent nécessairement avec ceux des signes: 'x=u#v#w' .
Les contraintes grammaticales limitent ainsi drastiquement le nombre de possibilités: 3! * 22 = 24 .
Cependant, en relisant un détail de ton dernier message
je crains qu'il n'arrive de sérieuses complications.
Je ne veux pas limiter à l'expression donnée en exemple, mais limiter aux quatre opérateurs.
Je veux voir combien de caractères seront prohibitifs pour le temps de calculs.
Ce qui impliquera d'optimiser le code (ce qui est la moitié du but).
Je crois me souvenir que tu m'a donné il y a un moment un code en Windev, que la version d'évaluation n'a pas voulu lancer; et qui malgré mes efforts m'est resté obscur (Windev, c'est spécial...)
Tu as déjà (je m'en souviens) amené un sujet apparenté, mais je ne t'ai sûrement pas suggéré un code écrit en Windev (que je ne pratique pas, et ne connais que de nom) ...
L'introduction des parenthèses va s'accompagner d'une liste considérable d'incompatibilités. Y a-t-eu un peu réfléchi ?
Ne vaudrait-il pas mieux commencer par des choses simples, par exemple des lettres et les quatre signes d'opérations ?
Je recopie :Si je comprend bien, à partir de x=a+(b*c)Je veux, à partir d'une expression du genre: "x=a+(b*c)
Obtenir les expressions équivalentes de toutes les variables de l'expression.
Les solutions que tu veux sont :
a=x-(b*c)
b=(x-a))/c
c=(x-a)/b
C'est à dire isoler à chaque fois une des variables, et l'écrire en fonction des 3 autres.
Accessoirement, on peut lister d'autres réponses : a = x-(c*b) par exemple, mais je pense que celle-ci ne t'intéresse pas, car doublon avec a=x-(b*c)
j'imagine que ton besoin, c'est ça. En tout cas, ton besoin était celui là il y a un an ( cf : https://www.developpez.net/forums/d1...nnees/jouable/ ) , et à l'époque, tu n'avais pas obtenu tout à fait la réponse voulue.
@: wiwaxia: En traitant les parenthèses à part ça paraît faisable. De toutes façons, des parenthèses il ne peut pas y en avoir beaucoup parce qu'avec plus de 10 caractères ça doit devenir ingérable au niveau temps.
@: tbc92: C'est bien ce que j'espère.
Partager