Formule de combinaison

Fermé
sgtfinx Messages postés 11 Date d'inscription vendredi 30 octobre 2009 Statut Membre Dernière intervention 31 octobre 2009 - 31 oct. 2009 à 00:27
 pacorabanix - 31 oct. 2009 à 01:14
Bonjour à tous,

Je me creuse la tête depuis un bon moment déjà pour résoudre ceci :
J'ai 2 éléments Comment faire pour construire toutes les combinaisons possibles (1,2) (1,2) (1,2) (1,2) (1,2)(1,2) (1,2) (1,2) (1,2) (1,2) (1,2) (1,2) (1,2) sachant que le nombre d'éléments peut aller jusqu'à 1 reponse par parentese. Le nombre de combinaisons est n!, mais part ça... je sais que pour avoir le nombre de combinaison je dois faire 2 a la puissance 13 ce qui donne 8192 combinaison, mais la je veux voir toutes les combinaison.
J'ai essayé en vain plusieurs combinaisons de boucles FOR/NEXT, DO/LOOP...

A défaut de me donner l'algorythme, voire le prog en VB, si quelqu'un a une piste, une idée de départ, ou le truc pour le faire avec excel c'est pas de refus!

merci sgtfinx (nul en informatique)

1 réponse

pacorabanix
31 oct. 2009 à 01:14
Je crois que j'ai une idée, même si je n'ai pas envie d'essayer de la coder, ça pourrait être une bonne piste :

D'une part tu dis deux choses différentes concernant le nombre de possibilité. Si tu prends effectivement une valeur de chaque couple, c'est bien 2 puissance N possibilités (N=nombre de couples) qu'il y a. pas N!

A part ça :
Essayons, pour trouver un algorithme, de le faire nous-mêmes, sur une feuille de papier par exemple.

Pour faire simple, on ne va pas prendre 13 couples, car 2^13 possibilités à écrire c'est un peu beaucoup.

prenons 4 couples. il y aura 2^4 donc 16 possibilités à faire. avec (1,2) (1,2) (1,2) (1,2)


Comment s'y prendre ? il ne faut pas écrire les possibilités au bol et deviner celles qui manquent, on va se prendre trop la tête. il faut ranger les possibilités. D'abord, commençons par la plus simple.

on prend les premiers nomrbes à chaque fois pour commencer, c'est le plus simple.
1 1 1 1
ensuite on peut changer le premier
2 1 1 1

Ensuite il n'y a plus rien à changer. Revenons au début et changeons le deuxième
1 2 1 1
Puis changeons le premier aussi, comme avant.
2 2 1 1

Ensuite revenons et début et changeons le troisième ...
1 1 2 1
On peut changer le premier comme avant
2 1 2 1
Ou changer le deuxième avant
1 2 2 1
Et après avoir changé le deuxième, comme quelques ligne plus haut on peut changer le premier, çA donne une autre...
2 2 2 1

Tout ceci fait 8 possibilités car on a laissé le dernier fixé.

et on refait toutes ces possibilités mais avec un 2 en dernier à la place du 1, ce qui en donne 8 autres.

je résume pour mieux voir ce que ça donne :

1 1 1 1
2 1 1 1
1 2 1 1
2 2 1 1
1 1 2 1
2 1 2 1
1 2 2 1
2 2 2 1
1 1 1 2
2 1 1 2
1 2 1 2
2 2 1 2
1 1 2 2
2 1 2 2
1 2 2 2
2 2 2 2


regarde bien les "motifs" qui apparaissent...

Dans la 1ere colonne, on prend 1 (2 puissance 0)seule fois chaque valeur avant de changer
Dans la 2ème colonne, on prend 2 (2 puissance 1) fois à la suite chaque valeur
Dans la 3ème colonne, on prend 4 (2 puissance 2) fois à la suite chaque valeur
Dans la 4ème colonne, on prend 8 (2 puissance 3) fois à la suite chaque valeur...

donc si on appliquait ce principe, à la Nième colonne on écrirait 2 puissance N-1 à la suite et de manière alternée les différentes valeurs.


En fait, il suffit de faire comme ceci comme avant en dit légèrement différent :
dans la première colonne tu écris chaque valeur 1 ou 2 alternativement, à chaque ligne. Autrement dit tu changes la valeur à écrire toutes les lignes.
dans la deuxième colonne tu écris chaque valeur 1 ou 2 alternativement mais tu ne changes que toutes les deux lignes.
etc...

à la Nème colonne tu écris les valeurs en changeant toutes les 2 puissance N-1 lignes


Et à la fin tu auras un grand tableau à 2 puissance 13 lignes et 13 colonnes où tous les arrangements sont écrits.


Pour écrire ces choses il faut faire une grande boucle :

pour chaque colonne (numérotée N)
  valeur à écrire = première valeur de ton couple (1)
  pour chaque ligne (numérotée i)
    si i est un multiple de 2puissance(N-1) alors on change la valeur à écrire.
    on écrit la valeur à écrire dans la case (colonne N, ligne i)
  fin pour
fin pour


pour savoir si i est un multiple de qqchose, il faut que i MODULO qqchose donne 0 (le modulo est souvent "%" en prog, je ne sais pas pour VBA)
0