2010-05-09 82 views
1

我正在寻找在C#中的算法,解决了一个组合数学问题:组合学分组

假设我有对象1,2,3,4

我希望得到所有可能的方式来组织这些对象在多个组中,每次都包含所有对象。订单并不重要。例如:

< 1,2,3,4-> < 1,2/3,4> < 1,3/2,4> < 1,4/3,2> < 1,2- ,四分之三> < 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>

在第一种情况下,有一个组包含所有4个对象。接下来是两个组以多种不同方式包含所有对象的案例。最后一种情况是4组,每组只包含一个对象。

+0

“<1,2/3/4>”和其他大小为3的分组又如何呢? – polygenelubricants 2010-05-09 08:30:33

回答

0

我想algorythm是常见的,而不是C#algorythm。 有一些方法如何组合所有可能的方式(有一些限制)here

1

开始于< 1>。通过添加每个新对象,对于以前的每个解决方案,它都可以进入任何组或它自己的新组。

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>}