Page 3 sur 4
Re: [Résolu] Permutation de groupes de caractères
Publié : mar. 23/févr./2016 11:05
par Shadow
Bon bref, ont va pas en faire une montagne si ?
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 2:58
par Shadow
Je reviens vers vous.
Calculer toute les positions des objets est fastidieuse et très grande consommation de temps.
N'y à t-il aucun moment de faire ça autrement ?
Il dois bien exister un calcule pour ça non ?
Au lieux de tester chaque position...
Je parle pas de factoriel ici bien que peut être que c'est à base.
Mais par exemple si j'ai ceci:
Objet classé du plus petit au plus grand -> A, B, C, D
Une position d'objet au pif -> D, A, C, B
Comment je calcule le nombre de permutation sans passer par le test de chaque position ?
Si ont pouvais juste calculer se serait infiniment plus rapide au lieux de faire tous les tests.
Est ce que c'est possible au moins ?
Peut être en regardant leur position actuel ?
D est en première position, il étais en 4ème place avant, il à bougé de 3 place !
A à été rétrogradé à la 2ème place, il à bougé de 1 place !
C conserve ça position !
B est en dernière position, c'est à dire 4ème place, il à bougé de 3 place !
Ensuite quoi ?, 3 + 1 + 0 + 3 = 7 ?
Je doute fort que ce soit ça !
3 * 1 * 3 = 9 ?
Je ne sais pas !
Merci.
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 3:10
par falsam
Shadow a écrit :Comment je calcule le nombre de permutation sans passer par le test de chaque position ?
En passant par un test de factoriel.
Code : Tout sélectionner
Procedure.q Factoriel(n.q)
If n=0
ProcedureReturn #True
Else
ProcedureReturn n*Factoriel(n-1)
EndIf
EndProcedure
Chaine.s = "A,B,C,D"
Debug "Nombre de combinaisons possibles " + Factoriel(CountString(Chaine, ",") + 1)
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 10:41
par Micoute
Bonjour falsam, il y a un problème dans ton code, pour moi quand on fait l'opération suivante : 1*2*3*4, on obtient 24, pourquoi obtient-on 66 au lieu de 24 ?
Ta procédure est différente de la mienne:
Code : Tout sélectionner
Procedure.q Factorielle(Nombre.q) ; - Calcul la factorielle d'un nombre
If Nombre = 1
ProcedureReturn #true
Else
ProcedureReturn Nombre * Factorielle(Nombre - 1)
EndIf
EndProcedure
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 10:51
par falsam
Bonjour Micoute.
Micoute a écrit :il y a un problème dans ton code
Quand je teste la procédure que j'ai posté j'ai bien un résultat de 24.
Micoute a écrit :Ta procédure est différente de la mienne
ha bon ? c'est la meme que la mienne non ?
Ha si il y a quelques différences :
- Tu l'as nommé Factorielle au lieu de Factoriel
- Nombre au lieu de n
- J'aurais pu faire une récursivité de moins en mettant
if n=1 au lieu de
if n=0
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 11:00
par GallyHC
Bonjour,
Je confirme que cela donne bien : 24.
Cordialement,
GallyHC
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 12:25
par Micoute
C'est quand même bizarre, j'ai ré-essayé et j'ai toujours la même réponse : "Nombre de combinaisons possibles 66".
Dans ta procédure, tu utilises la fonction CountString dont la sortie "A,B,C,D" doit donner 4, là je suis d'accord, mais je ne comprends pas pourquoi le résultat est faux.
Je viens à nouveau de refaire l'opération et en tapant : Debug "Nombre de combinaisons possibles " + Str(Factoriel(CountString(Chaine, ",") + 1)), le résultat est bon.
Je travaille avec la version 5.42 Béta 5.
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 13:00
par falsam
De la version 4.20 à 5.42 Beta 5 le résultat est le même : 24
A noter qu'avec la version 4.20, il faut remplacer
Code : Tout sélectionner
Debug "Nombre de combinaisons possibles " + Factoriel(CountString(Chaine, ",") + 1)
par
Code : Tout sélectionner
Debug "Nombre de combinaisons possibles " + Str(Factoriel(CountString(Chaine, ",") + 1))
Il aurait fallu voir ton code comprenant la chaîne que tu envoies pour voir pourquoi tu vois 66 au lieu de 24.
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 13:34
par Shadow
Bonjour,
Falsam merci de ta réponse mais ce n'est pas ce que je veux dire
mon message est pourtant assez explicite non ?
Imagine que tu as 4 objet en vraie (Physique):
un Cube Rouge
une Sphère Bleu
un Triangle Vert
un Losange Jaune
Les couleurs et les forme, ont s'en fou c'est juste pour les différencier.
Trier dans l'ordre des couleurs et des formes.
Ont as donc: CR, SB, TV, LJ
Ok ?
Classer ça donne ceci: CR, LJ, SB, TV
Ok ?
Pour savoir toutes les permutation possible tu va faire
le calcule que tu ma donner, j'ai bien dit TOUTES !
Tu prends une calculette ou tu fais ça dans ta tête: 1 * 2 * 3 * 4 = 24 Ok ?
Et bien, ça c'est pour savoir LE NOMBRE TOTALE de permutation.
Mais imagine que les objet soit dans cette ordre-ci:
SB, CR, TV, LJ
Tu veux savoir le nombre de permutation qu'il a fallut jusque
cette organisation-ci, alors comment tu fais ça ?
A part noter toutes les permutation possible sur une feuille de papier tu
ne va pas pouvoir sauf si tu refais toutes les permutation à la main !
Ok ?
Alors si tu pouvais par un calcule savoir le nombre de permutation qu'il à fallut
faire pour en arriver jusque là, se serrait extrêmement plus simple !
Tu me suis mieux là ou toujours pas ?
Ici tu as 4 objet, c'est facile mais avec 10 ?
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 13:45
par falsam
Shadow a écrit :mon message est pourtant assez explicite non ?
Ben non ça ne l'était pas.
Shadow a écrit :Tu me suis mieux là ou toujours pas ?
J'ai bien compris et je ne donnerais pas suite.
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 16:42
par Shadow
J'ai bien compris et je ne donnerais pas suite.
Et bien alors pourquoi tous ce cinéma alors ?
Bien à toi.
Re: [Résolu] Permutation de groupes de caractères
Publié : dim. 28/févr./2016 21:37
par falsam
Shadow a écrit :Et bien alors pourquoi tous ce cinéma alors ?
Whaouu Monsieur monte sur ses grands chevaux. Contrairement à ce que tu dis, il n'y a pas de cinéma :
Pour résumé tu veux connaitre le nombre de combinaisons à partir d'une distribution.
Exemple la distribution ABCD dans cette ordre donnera 24 combinaisons possibles.
Jusque là c'était facile et mon code était dans ce sens.
Nouvelle demande de ta part : Si je sors la combinaison BCDE tu veux savoir combien de permutations il a fallu pour arriver à ça ?
J’espère que tu te rends bien compte que ce nombre de permutations pour arriver à ça peut varier suivant le mode de calcul utilisé ?
Je ne donnerais pas suite parce que tu as une solution dans tout ce qui a était dit parmi les 44 commentaires précédents
Tu as suffisamment usé de mon temps et surement des autres utilisateurs sur ce sujet.
Re: [Résolu] Permutation de groupes de caractères
Publié : lun. 29/févr./2016 11:48
par Shadow
Bonjour,
Oui bien sur et je vous en remercie

Re: [Résolu] Permutation de groupes de caractères
Publié : lun. 29/févr./2016 16:56
par SPH
Shadow a écrit :Pour savoir toutes les permutation possible tu va faire
le calcule que tu ma donner, j'ai bien dit TOUTES !
Tu prends une calculette ou tu fais ça dans ta tête: 1 * 2 * 3 * 4 = 24 Ok ?
Et bien, ça c'est pour savoir LE NOMBRE TOTALE de permutation.
Pour un nombre N d'objets, le nombre total de combinaisons possibles est bien N*(N-1)*(N-2)....
Par exemple, 4 objets peuvent etre combiné de 24 facons possibles (4*3*2*1)
Maintenant, ce que tu cherches est le nombre minimum d'echanges pour arriver a un arrangement precis.
Par exemple : 1,2,3,4 deviens 2,3,1,4
Et bien, le nombre d'echange est compris entre 1 et N-1
Par exemple, pour 4 elements (1,2,3,4), il faut entre 1 et 3 echanges seulement !
Exemple :
depart : 1,2,3,4
un echange : 2,1,3,4
un deuxieme echange : 2,3,1,4
fini
Re: [Résolu] Permutation de groupes de caractères
Publié : lun. 29/févr./2016 20:07
par SPH
Meilleur score : 8 pass pour 10 chiffres
Code : Tout sélectionner
Dim p(9)
For i=0 To 9
p(i)=i
Next
For i=0 To 9
Swap p(i),p(Random(9))
Next
pass=0
Repeat
a$=""
For u=0 To 9
a$+Str(p(u))
Next
Debug a$
;pass+1
For i=0 To 9
If p(i)<>i
Swap p(i),p(p(i))
EndIf
a$=""
ok=0
For u=0 To 9
a$+Str(p(u))
If p(u)=u
ok+1
EndIf
Next
Debug a$
pass+1
If ok=10
Goto fin
EndIf
Next
Until ok=10
fin:
Debug("Pass = "+Str(pass))