Dénombrement et permutations

Résolu
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005 - 2 mai 2005 à 17:19
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005 - 3 mai 2005 à 01:36
Bonjour,


J'ai des valeurs que je souhaite additionner entre elles afin de tester le résultat.
Comment prévoir et tester toutes les combinaisons possibles ?

ex : si j'ai 4 valeurs (a, b, c, d)


je sais que je pourrai avoir :


a+b+c+d
a+b+c;a+b+d;a+c+d;b+c+d
a+b;a+c;a+d;b+c;b+d;c+d


donc, je sais que pour mes 4 valeurs j'aurai :


- 1 possibilité avec 4 valeurs
- 4 possibilités avec 3 valeurs
- 6 possibilités avec 2 valeurs


=> soit 11 calculs possibles en tout.


Comment donc evaluer toutes les possibilités, quel que soit le nombre

de valeurs ?

J'ai déjà avancé un peu côté Maths et je sais évaluer
le nombre total de possibilités grâce notamment à :
(Cnk=n!/(k!*(n-k)!))

Mais j'aurai besoin d'aide pour tester toutes les combinaisons.

Merci d'avance,

[mailto:Fior@H Fior@H].

10 réponses

Gobillot Messages postés 3140 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 11 mars 2019 34
3 mai 2005 à 00:40
Dim T() As String
Dim Nb As Integer
Dim s As String
Dim n As Integer
Dim i As Integer
Dim j As Integer
Dim z As Integer


Nb = 4
ReDim T(Nb)T(1) "A": T(2) "B": T(3) = "C": T(4) = "D"

For i = 1 To (2 ^ (Nb)) - 1
z = 2 ^ (Nb - 1) j 0: n Nb: s = ""
While z > 0 If (i And z) Then j j + 1: s s & T(n) z z \ 2: n n - 1
Wend
If j > 1 Then Debug.Print s
Next

Daniel
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
2 mai 2005 à 20:37
Ton problème est intéressant... Cependant, je crois que ta formule est trop compliquée!!! Il faut se souvenir d'un truc pour calculer le nombre totale de possibilités : 8=23

C'est à dire, si on a 3 cases et deux possibilités par cases (000-111) on n'a que 8 combinaisons possibles. En fait, cette "formule" permet de connaitre le nombre de "nombres" dans une base donnée avec un nombre de chiffres donné. Autrement dit, la "formule" est :
NbrDePossibilités = Base puissance Cases
où Cases est le nombre de nombres.
Max=B
<SUP>Nbr

</SUP>Je ne comprends d'ailleurs pas ton équation!!! Faudrait-en expliquer les termes tu ne crois pas???

Mais ton problème est plus complexe puisque visiblement tu ne veux pas de "a+a"! Je crois qu'il faut déjà le diviser en 2 parties. C'est à dire, la première, connaitre le nombre de formes (2 [x+x], 3 [x+x+x], ...) et la deuxième, calculer, pour chacune de ces formes le nombre de possibilités sans doublons. Resterait plus qu'a additionner le tout.

Si on pose le problème à plat concernant les formes, il ressort déjà clairement une règle :
avec 2 entités, on peut avoir qu'une addition
avec 3 entités et le nombre maximum d'additions on n'a qu'une seule possibilité (ABC => A+B+C [puisque l'addition est commutative!])
avec 4, idem.
Donc, si on veut le nombre maximum d'additions possible dans une forme donnée en utilisant toutes les entittés, ce sera toujours 1!!!
(oui, je sais, c'est con mais faut quand même bien le dire!!!)

Enfin, tout ça pour dire que j'en sais foutrement rien et que j'aimerais autant que toi le savoir!!!
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
2 mai 2005 à 20:46
Salut,

Si je suis ton raisonnement fiorah, tu as oublié ::

a;b;c;d

donc 15 possibilités

Loup Gris
0
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005
2 mai 2005 à 22:51
Dans l'absolu, tu as raison.

Mais dans le cas qui m'intéresse non, étant donné que ce que je veux faire
c'est tester la somme des valeurs pour évaluer le résultat de toutes les
opérations possibles. Autrement dit, il me faut au moins 2 valeurs, ce qui
exclue de facto les valeure seules.

Fior@H.

______________________________________
Salut,

Si je suis ton raisonnement fiorah, tu as oublié ::

a;b;c;d

donc 15 possibilités

Loup Gris
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
2 mai 2005 à 22:59
Mais que cherches-tu vraiment à faire au juste ???
N'y aurait-il pas un autre moyen d'y arriver en contournant ton problème par quelque astuce de prog ???
Explique, chuit sûr qu'on va trouver la solution ;-)
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
2 mai 2005 à 23:07
Si j'ai bien compris... moi, ce que je te propose c'est d'implémenter une fonction qui fera successivement chaque test. Alors certes, c'est moins propre qu'une fonction mathématique mais c'est toujours mieux que de rester bloqué 20 ans sur un truc pareil!!! Ceci dit, si tu as beaucoup d'entités, ça risque de ne pas être super rapide (encore que, avec les processeurs de nos jours!!!)... Mais ce n'est peut-être pas non plus le but!!!

Si tu veux je peux te coder un ptit truc si tu m'expliques mieux...
0
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005
2 mai 2005 à 23:44
La formule que j'ai donné n'est autre que le binôme de Newton (bon, là je fais le cake, mais y'a 1 semaine j'en avais jamais entendu parler ).
Si je ne me suis pas étendu sur le sujet, c'est que ce n'est pas ce qui a motivé
mon post au départ, étant donné que ça, je sais déjà le calculer.

Ce qui m'intéresse donc, n'est pas de savoir le nombre de calculs possibles, mais de
tous les tester individuellement.

Ceci étant, je peux qd même expliquer la formule pour calculer le nbre
de possibilités :

(Cnk=n!/(k!*(n-k)!))

1° n représente le nombre total de valeurs
k représente le nombre de valeurs que je veux additionner ensemble
(donc, le max de k est n)

2° le '!' est la factorielle (ex !3=3x2x1=6
!20=20x19x18...x1=190)

pour info voir la fonction Excel FACT() et, tant que j'y suis, je fournis ma version
VB de ladite fonction EXCEL :
--------------------------------------------
Function Fact(nb As Integer) As Variant
Dim i As Integer
' Donne la factorielle du nbre passé en argument
' ex : Fact(4)=4*3*2*1=24
If nb 0 Then Fact 1: Exit Function

For i = nb To 1 Step -1 If i nb Then Fact nb Else Fact = Fact * i
Next


End Function
--------------------------------------------

3° Donc, si je veux savoir combien il y a de calculs possibles sur 2 valeurs
parmi 20 valeurs, je fais ds la fenêtre de debug (cf binôme de Newton) :

? FACT(20)/(FACT(2)*FACT(20-2))

-> ce qui donne bien 190

et pour ce qui m'intéresse, je retrancherai de ces 190 les 20 possibilités ne
concernant qu'1 valeur (vu que pour additionner, il m'en faudra au moins 2)
=> il me reste donc 170 additions possibles pour une somme de 2 valeurs
parmi 20

Reste ensuite que pour 20 valeurs, il faut tester également les calculs sur
3 valeurs, 4 valeurs... jusqu'au dernier calcul impliquant 20 valeurs et pour lequel
on sait qu'il n'y aura forcément qu'une seule opération possible.

Bref j'ai codé une fonction permettant de calculer tout ça et juste pour 20
valeurs, il y a 1.048.555 possibilités (pour 30 : 1.073.741.793)

Maintenant reste plus qu'à coder ds des boucles pour gérer tout ça

Si ça peut inspirer quelqu'un, j'ai trouvé une page web qui fait ça, mais le code
est en javascript et c'est pas mon truc :

http://homeomath.imingo.net/denombrer.htm
(pour mon prb, faut prendre la 3è option:Combinaison)

J'ai aussi vu plusieurs sources sur le sujet dans le site, mais rien qui, jusqu'ici
ne me permette de faire ce que je veux.

A bon entendeur... !

[mailto:Fior@H Fior@H].

___________________________________________________
Je ne comprends d'ailleurs pas ton équation!!! Faudrait-en expliquer les termes tu ne crois pas???
0
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005
2 mai 2005 à 23:50
petite précision, qd j'écris :

valeurs, il y a 1.048.555 possibilités (pour 30 : 1.073.741.793)
Maintenant reste plus qu'à coder ds des boucles pour gérer tout ça>

Je veux en fait dire que j'ai déjà codé ce qui me permet de savoir le nbre
total de calculs possibles. Mais en fait, ce qui m'intéresse est bien de tous
les tester, et c'est là que j'ai besoin d'aide.

[mailto:Fior@H Fior@H].
0
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005
2 mai 2005 à 23:56
T'as tout compris

La fonction Mathématique, c'était juste pour calculer le nombre de possibilités.
Par contre ce que je voudrais c'est justement de monter une fonction qui
saura faire tous les calculs, quel que soit leur nombre ! Evidemment je verrai
ensuite les temps de traitement pour voir où je devrais borner, encore que,
je pourrai tjrs rafraîchir régulièrement un txtbox afin de voir évoluer les calculs et de
ne pas avoir l'impression d'être 'planté'

[mailto:Fior@H Fior@H].

__________________________________________________________
Si j'ai bien compris... moi, ce que je te propose c'est d'implémenter une fonction qui fera successivement chaque test. Alors certes, c'est moins propre qu'une fonction mathématique mais c'est toujours mieux que de rester bloqué 20 ans sur un truc pareil!!! Ceci dit, si tu as beaucoup d'entités, ça risque de ne pas être super rapide (encore que, avec les processeurs de nos jours!!!)... Mais ce n'est peut-être pas non plus le but!!!

Si tu veux je peux te coder un ptit truc si tu m'expliques mieux...
0
fiorah Messages postés 6 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 3 mai 2005
3 mai 2005 à 01:36
Merci Daniel (et les autres aussi).

Ton code est simple et efficace

Je n'ai eu qu'à l'adapter pour pouvoir gérer tous les cas et pas seulement ceux sur mes 4 valeurs d'exemple (a;b;c;d)

Excellent !!!

Fior@H.
0
Rejoignez-nous