Bonjour.
Je m'arrache les cheveux depuis quelques jours sur un problème d'algorithmique.
Sur le net, j'ai déjà trouvé des solutions s'en approchant mais je ne parviens pas à obtenir ce que je souhaite pour autant.
Voici mon problème initial :
J'ai une liste d'éléments de taille N, chaque élément étant différent des autres.
Je souhaite lister toutes les combinaisons possibles de longueur n (combinaisons, et non permutations, donc l'ordre n'est pas important ; avec 0 < n <= N) , en sachant qu'il peut y avoir répétition de chaque élément. L'ordre n'est pas important car chaque élément est pondéré, et au final je souhaite faire la somme de chaque pondération. Donc si j'ai AB et BA, avec A=1 et B=2, ma somme sera la même (3).
Un exemple sera beaucoup parlant (je l'espère ... ) :
Mais pour des longueurs supérieures, cela devient plus compliqué :Liste d'éléments : A - B - C - D - E
Longueur des combinaisons souhaitée : 2
Je veux obtenir :
AA
AB
AC
AD
AE
BC
BD
BE
CC
CD
CE
DD
DE
EE
En gros, c'est comme si on avait une machine à sous avec n rouleaux (slots), et que je voulais toutes les combinaisons possibles (chaque rouleau étant constitué de ma liste initiale), et qu'on retirait ensuite les doublons (car pour une longueur de 3 par exemple, ABC = ABC = BCA = BAC = ...).Longueur : 3
AAA
AAB
AAC
AAD
AAE
ABB
ABC
ABD
ABE
ACC
ACD
ACE
ADD
ADE
AEE
BBB
BBC
BBD
BBE
...
Je pense qu'on peut s'en sortir avec la récursivité mais je débute dans ce domaine, et j'ai un peu de mal à créer mon algo.
Difficulté supplémentaire, je dois ensuite coder cet algo en VBA Excel (mais je code pas mal en VBA Excel donc ce n'est pas ce qui m'inquiète le plus).
Désolé si ce problème a déjà été traité dans un autre post, mais j'ai bien parcouru le forum et d'autres sites/forums et je ne trouve rien qui puisse m'aider.
Merci pour votre aide !
Partager