2010-05-09 5 views
1

Je suis à la recherche d'un algorithme en C# qui permet de résoudre un problème de combinatoires:Combinatoire groupement

Supposons que j'ai les objets 1,2,3,4

Je veux tous les moyens possibles pour regrouper ces objet dans plusieurs groupes, qui contiennent à chaque fois tous les objets. L'ordre n'est pas important. Exemple:

< 1,2,3,4> < 1,2/3,4> < 1,3/2,4> < 1,4/3,2> 1,2 < , 3/4> < 1,2,4/3> < 1,3,4/2> < 2,3,4/1> < 1,2/3/4> < 1,3/2/4> < 1,4/3/2> < 2,3/1/4> < 4,3/1/2> < 1/2/3/4>

Dans le premier cas, il y a un groupe qui contient les 4 objets. Ensuite, il y a des cas avec 2 groupes qui contiennent tous les objets de différentes façons. Le dernier cas est de 4 groupes, chacun contenant un seul objet.

+0

Qu'en est-il de '<1,2/3/4>' et d'autres groupes de taille 3? – polygenelubricants

Répondre

0

Je suppose que l'algorythme est commun, pas l'algorythme C#. Il y a quelques approches comment regrouper tous les moyens possibles (avec certaines restrictions) here

1

Commencez avec < 1>. Avec l'ajout de chaque nouvel objet, pour chacune des solutions précédentes, il peut aller dans l'un des groupes ou un nouveau groupe de ses propres.

1: <1> 
12: <1> => {<1,2> <1|2>} 
123: <1,2> => {<1,2,3> <1,2|3>}, <1|2> => {<1,3|2> <1|2,3> <1|2|3>} 
1234: <1,2,3> => {<1,2,3,4> <1,2,3|4>}, 
     <1,2|3> => {<1,2,4|3> <1,2|3,4> <1,2|3|4>}, 
     <1,3|2> => {<1,3,4|2> <1,3|2,4> <1,3|2|4>}