[Résolu] Permutation de groupes de caractères
Re: [Résolu] Permutation de groupes de caractères
Bon bref, ont va pas en faire une montagne si ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: [Résolu] Permutation de groupes de caractères
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.
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.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [Résolu] Permutation de groupes de caractères
En passant par un test de factoriel.Shadow a écrit :Comment je calcule le nombre de permutation sans passer par le test de chaque position ?
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)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Permutation de groupes de caractères
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:
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
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [Résolu] Permutation de groupes de caractères
Bonjour Micoute.
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
Quand je teste la procédure que j'ai posté j'ai bien un résultat de 24.Micoute a écrit :il y a un problème dans ton code
ha bon ? c'est la meme que la mienne non ?Micoute a écrit :Ta procédure est différente de la mienne
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
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Permutation de groupes de caractères
Bonjour,
Je confirme que cela donne bien : 24.
Cordialement,
GallyHC
Je confirme que cela donne bien : 24.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: [Résolu] Permutation de groupes de caractères
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.
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.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Un homme doit être poli, mais il doit aussi être libre !
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [Résolu] Permutation de groupes de caractères
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 remplacerpar
Il aurait fallu voir ton code comprenant la chaîne que tu envoies pour voir pourquoi tu vois 66 au lieu de 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)
Code : Tout sélectionner
Debug "Nombre de combinaisons possibles " + Str(Factoriel(CountString(Chaine, ",") + 1))
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Permutation de groupes de caractères
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 ?
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 ?
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [Résolu] Permutation de groupes de caractères
Ben non ça ne l'était pas.Shadow a écrit :mon message est pourtant assez explicite non ?
J'ai bien compris et je ne donnerais pas suite.Shadow a écrit :Tu me suis mieux là ou toujours pas ?
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Permutation de groupes de caractères
Et bien alors pourquoi tous ce cinéma alors ?J'ai bien compris et je ne donnerais pas suite.
Bien à toi.
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
- falsam
- Messages : 7324
- Inscription : dim. 22/août/2010 15:24
- Localisation : IDF (Yvelines)
- Contact :
Re: [Résolu] Permutation de groupes de caractères
Whaouu Monsieur monte sur ses grands chevaux. Contrairement à ce que tu dis, il n'y a pas de cinéma :Shadow a écrit :Et bien alors pourquoi tous ce cinéma alors ?
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.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: [Résolu] Permutation de groupes de caractères
Bonjour,
Oui bien sur et je vous en remercie
Oui bien sur et je vous en remercie

Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.
PureBasic: 5.60 x64 Bits.
Re: [Résolu] Permutation de groupes de caractères
Pour un nombre N d'objets, le nombre total de combinaisons possibles est bien N*(N-1)*(N-2)....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.
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
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Re: [Résolu] Permutation de groupes de caractères
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))
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits