![]()
bonsoir
j'essai de realiaser toutes les combinaisons de nombre de taille X dans une serie de nombres.
avec des filtres eliminants certaines d'entres elles
merci d'avance
![]()
bonsoir
j'essai de realiaser toutes les combinaisons de nombre de taille X dans une serie de nombres.
avec des filtres eliminants certaines d'entres elles
merci d'avance
SalutEnvoyé par didier.schmit
comme d'hab, pas tout compris :
tu as 6 nombres
tu veux le nombre de combinaisons différentes ? 15, 2, 4 est-il différent de 2,15, 4 ?
Tes histoires de filtres : pourquoi éliminer dans la série que tu donnes en exemple 15, 2, 4 ?
A+
bonsoir à tous et à toutes
bonsoir GORFAEL
exemple dansle fichier joint
la serie cite en exemple 15-2-4-6-7-3 (la longueur de cette serie est variable . elle est peu contenir de 0 numeros à 15 numeros max. dans notre exemple elle a 6 nuemros)
![]()
1) dans le textbox "taille des combinaison" , l'utlisateur doit rentrer la longueur de sa combinaison (celle ci peut etre de 2 mini à 8 maxi) Dans l'exemple, le choix de la longueur de la combinaison de l'utilisateur est de 3.
soit des combinaisons du 15-2-3, 15-2-7, etc......
2)en appuyant sur le bouton calcul , je souherai realise toutes les combinaison de taille 3 (dans l'exemple) pouvant etre calculer avec la serie (dans l'exemple) 15-2-4-6-7-3.
soit 15-2-4
15-2-6
15-2-7
etc.........
3) si les filtres sont coches. (par exemples le filtre 1)
on elimine les combinaisons composées de numeros qui se suivent.
exemple poiur notre serie
la combinaison 2-4-3 sera trouve mais comme lle filtre1 est coché alors cette combinaison 2-4-3 ne sera pas retenue.
pourquoi eliminer 2-4-3 ?
en fait elle est compose de 3 chiffres consecutif 2-3-4 donc par le filtre1 elle est elimionee.
voila , j'espere avoir ete plus clair.
merci de votre aide
didier
Bonsoir,
Et (abstraction faite de tout langage informatique) quel est l'algorithme que tu as fait pour ce qui parait être la recherche de toutes les combinaisons possibles de x éléments choisis x à x parmi n éléments ?
(Encore que tu as omis de dire si l'ordre de ces 3 éléments avait ou non une importance)
et en ajoutant qu'aucun sous-ensemble ainsi choisi ne devrait être constitué d'éléments sans solution de continuité possible entre eux ?
Fournis donc cet algorithme (juste pour voir) et nous le transcrirons fidèlement en syntaxe VBA ...![]()
Prépare également, dans cette perspective (et surtout celle des combinaisons x à x parmi 15 éléments) , une TRES GRANDE feuille Excel, hein ...
Bonne continuation...
![]()
Bonsoir à tous
Bonsoir ucfoutu
Tu me semble pointu dans le domaine.
Dans excel , comme tu dois le savoir, il existe une formule « Combin(nombre element ;nb elmentchoisi) » qui renvoi le nb de combinaison que l’on veut former avec un nb donnée d’elements.
La formule combinatoire classique est :
Pour une combinaison, l'ordre est indifférent : au loto que le tirage soit 1 2 3 4 5 6 ou 6 3 5 2 4 1 , c'est identique! La question est donc pour une combinaison, on a combien d'arrangement?
Si on a une combinaison de p éléments, on peut les classer de p! manières différentes. Le nombre de combinaisons de p éléments parmi n ( ) vérifie donc .p!= . Ceci donne :
C p = n!
n p!(n-p)!
Par exemple pour le loto
Au loto, on a 6 numéros parmi 49, ceci donne =49!/(6!.43!)=13983816
Je rentrerai pas dans le detail des arrangements (ordre et desordre)
Si on veut le nombre d'arrangement de 2 éléments parmi trois (ABC), ceci donne =3!/(3-2)!=6/1=6. Exact, nous avons AB, AC, BA, BC, CA et CB.
Bref ! sauf erreur de ma part !
Pour la taille du tableau je te rassure, je ne m’attaque pas au loto avec ces 13983816 combinaisons mais à un pari qui ce limite à 20 numeros max
Ça, ça ressemble à une demande du type donnez moi un algorithme ou du code tout pondu pour faire mon application.
Retourne lire les règles du forum, s'il te plaît.
bonsoir à tous et à toutes
Zazaraignee ,
je te remercie rappeler les regles de bases du forum
certains sont certainement tres passionnés comme peuvent le montrer certains messages.
pour info , je ne programme plus depuis 10ans. mise à part excel
Pour en revenir à mon fichier excel d'orignie est il comprehensible on faut il detailler?
malheureusement je ne rien ecrire mise à part qql blc for ..to . en fin qql chose trop basic pour obtenir un resultat .
cordialment![]()
Prenons l'exemple de l'extraction de tous les "quadruplés" (n = 4) possibles
de l'ensemble 123456 (e = 6)
1) on démarre du 1
1 23456 ==>> 1 234 à ignorer car dans le cas d'une série suivie
1 23456 ===>> 1 345
1 23456 ===>> 1 456
2) on avance maintenant d'un rang (donc du 2)
2 34561 ==>> 2 345 à ignorer car dans le cas d'une série suivie
2 34561 ==>> 2 456
2 34561 ==>> 2 561
3) on avance d'un rang de plus (donc du 3)
3 45612 ==>> 3 456 à ignorer car dans le cas d'une série suivie
3 45612 ==>> 3 561
3 45612 ==>> 3 612
4) on avance d'un rang de plus (donc du 4)
4 56123 ==>> 4 561 à ignorer car forcément traité en plus haut (en 1)
4 56123 ==>> 4 612
4 56123 ==>> 4 123 à ignorer car forcément traité en plus haut (en 1)
5) on avance d'un rang de plus (donc du 5)
5 61234 ==>> 5 612 à ignorer car forcément traité en plus haut (en 2)
5 61234 ==>> 5 123
5 61234 ==>> 5 234 à ignorer car forcément traité en plus haut (en 2)
6) on avance d'un rang de plus (donc du 6)
6 12345 ==>> 6 123 à ignorer car forcément traité en plus haut (en 3)
6 12345 ==>> 6 234
6 12345 ==>> 6 345 à ignorer car forcément traité en plus haut (en 3)
Il est clair que :
- le nombre e d'étapes est égal à celui de l'ensemble des éléments
parmi lequels ont doit en extraire n
- l'on ne retient jamais le 1er de chaque étape
- lors de chaque étape, le nombre possible de boucles est égal à e-n + 1
- à partir de l'étape n (ou n = le nombre d'éléments à extraire), on ne retient jamais
le dernier (car forcément déjà extrait lors d'une étape antérieure
Petite observation accessoire mais que nous n'allons pas utiliser (même pas
nécessaire) : une série de n chiffres n'est pas suivie si la différence entre le plus grand et le plus petit de ces n chiffres est supérieure ou égale à n)
Nous avons donc là la base même de notre mécanisme :
Un nombre d'étapes (avancement d'un cran) égal à celui du nombre total des éléments parmi
lesquels en extraire n
mise à l'écart systématique (à chaque étape, du 1er élément)
Mise à l'écart systématique, à partir de l'étape n, du dernier élément
Quelles combinaisons nous resteraient-elles dans l'exemple ci-dessus (de
triolets à extraire de 123456) ?
1345 - 1456 - 2456 - 2561 - 3561 - 3612 - 4612 - 5123 - 6234
Bien, nous avons ainsi obtenu nos 9 "quadruplés" possibles parmi l'enseomble 1,2,3,4,5,6
Voilà qui est facile, mais nous n'avons pas là considéré autre chose que des "quadruplés",
sans tenir compte de leur "date de naissance", les différentes possibilités en
considérant leur ordre.
Si l'ordre doit être également pris en compte, il nous suffit, pour chacun de ces 9
groupes de "quadruplés", d'en faire toutes les permutations possibles.
Tu trouveras assez facilement, avec Google, un code tout fait (en boucles imbriquées)
pour traiter de telles permutations avec VB.
Chouette alors, diras-tu, sans t'apercevoir de ce que procéderainsi pour chacue groupe
de "quadruplés" ralentirait tes extractions (que dire alors si tu devais traiter des
groupes de 8 choisis parmi 15, puisque le nombre des permutations possibles sur chacun
des groupes serait égal à 8! (factorielle 8)... Aïe !
On va alors se montrer un peu plus astucieux :
nous allons simplement extraire, une fois pour toutes, toutes les permutations possibles
de "12345...n" (donc de 1234 dans l'exemple des quadruplés)
SQur notre feuille excel, nous allons mettre en 1ère colonne, à partir de la ligne 2,
tous nos "quadrublés"
en ligne 1 (au dessus, donc), nous allons mettre tous les résultats permutés de "1234",
à partir de la 2ème colonne.
Que reste-t-il à faire ?
Tout bêtement, dans chaque colonne (à partir de la 2ème) de chaque ligne, appliquer à
ce qui se trouve en 1ère colonne l'ordre défini en toute 1ère ligne de la colonne
Voilà qui diminuera considérablement la durée de ton traitement.
Voilà donc. J'ai en ce qui me concerne terminé.
A toi de mettre tout celà en oeuvre.
Bonne continuation...
PS : la rédaction de cet exposé de mécanisme m'a pris énormément plus de temps que l'élaboration même du mécanisme !![]()
![]()
bonjour à tous et à toutes
merci pour ton expose ucfoutu. il tres interation.
il est vrai que si on peut diminue le nb itiration , c'est royal (le temps)pour le programme.
si mes petites, voir tres petites connaissance en vb me permettent d'ecrire le code, je regarde cela.
une question , j'ai retrouve un algo en delphi.
les code delphi sont t'ils facilement transposable en VB
cordialement
Tu perdras beaucoup plus de temps à transposer un code tout fait dans un autre langage (Delphi, dis-tu) que d'écrire directement ton code (et tu as tous les éléments de la pensée déjà établis !).
Et surtout : tu développes en VBA/EXCEL, donc avec une feuille et ses cellules, ce qui n'est pas le cas avec Delphi).
Bonne continuation ...
et quid ? duEnvoyé par ucfoutu
1 23456 ==>> 1 245
1 23456 ==>> 1 246
1 23456 ==>> 1 235
1 23456 ==>> 1 236
1 23456 ==>> 1 256
et j'en oublie surement
ha oui 1 356 par exemple
et j'ajouterais
COMBIN(6;4) = 15
et ceci sans tenir compte de l'ordre.
et le nombre de combinaison total, en utilisant la même formule
20 3 1140
20 4 4845
20 5 15504
20 6 38760
20 7 77520
20 8 125970
...= 263739
et si l'on prend l'exemple 20/3 combien en existe t'il qui se suivent ?
123 234 345 .....181920 soit 18 combinaisons, il en reste quand même 1122 a trouver. je passe sur les autres
bon courage
Bonjour, alsimbad,
Tu as diablement raison !
Mon esprit "matinal" m'a en effet fait sauter un maillon !
A chacune des "étapes", il convient d'appliquer la permutation signalée dans mon exposé sur tout ce qui suit l'espace...
Désolé d'avoir sauté ce maillon.
Ceci dans le but de diminuer le temps de traitement, qui demeurera toutefois assez important dans certains cas.
Autre méthode (que je n'aime pas du tout car elle est excessivement lente au delà d'un ensemble "originel" de 7 chiffres parmi lesquels en élire n) :
1) - extraire toutes les permutations sur ces huit chiffres et :
2) - en examiner les n premiers et :
n'accepter que les suites de n chiffres dont la différence entre le plus grand et le plus petit serait supérieure ou égale à n
Il existe à ce propos une méthode de recherche, par boucles imbriquées, de toutes les permutations possibles. J'ai il y a quelque temps fait la mienne également.
Les résultats sont les suivants : jusqu'à la permutation de 7 chiffres, ma méthode est beaucoup plus rapide. Au delà : c'est celle de boucles imbriquées qui l'est.
Dans tous les cas de figure : tout est lent à partir de 8 chiffres à permuter. C'est la raison pour laquelle je préconise une décomposition (voir plus haut)
C'est sans doute la raison pour laquelle (au passage) celui qui a imposé cet exertcice (car c'en est un) à didier.schmit a décidé de limiter à 15 le nombre de chiffres composant l'ensemble dans lequel choisir des combinaisons de 8 au maximum.
Ouais ... cette deuxième méthode (celle de l'extraction de toutes les permutations puis choix des n premiers chiffres) reste démesurée si l'ordre n'est pas à considérer, car il faudrait alors (en cas d'acceptations de combionaisons dans le désordre), boucler à nouveau pour éliminer tous les "doublons" (déterminés par un sigma identique de la "suite")
Voilà donc...
Partager