我正在寻找一种方法来枚举n成员的所有可能的双成员群星座。枚举所有可能的双成员群星座
例如,对于n = 4名成员以下3点独特的组的星座是可能的(请注意,无论是成员的一个组内的顺序,也不是组顺序是重要的):
((1,2), (3,4))
((1,3), (2,4))
((1,4), (2,3))
例如,对于n = 6个成员的15个不同的星座是可能的:
((1,2), (3,4), (5,6))
((1,2), (5,4), (3,6))
((1,2), (6,4), (5,3))
((1,3), (2,4), (5,6))
((1,3), (2,6), (5,4))
((1,3), (2,5), (4,6))
((1,4), (3,2), (5,6))
((1,4), (3,5), (2,6))
((1,4), (3,6), (5,2))
((1,5), (3,4), (2,6))
((1,5), (3,2), (4,6))
((1,5), (3,6), (2,4))
((1,6), (3,4), (5,2))
((1,6), (3,5), (2,4))
((1,6), (3,2), (5,4))
对于n个成员的独特基团的数目可以为
choose(n,2)*choose(n-2,2)*...*choose(2,2)/factorial(n/2),
来计算
其中choose(n,k)是二项式系数。
对于n = 4,我们有
choose(4,2)/factorial(4/2) = 3
可能的两构件组的星座。对于n = 6,它是
choose(6,2)*choose(4,2)/factorial(6/2) = 15.
对于超过n = 6个成员手动激活组是不可行的。有没有一种简单的方法来获得所有可能的群星座的列表/数据框?
我不知道究竟该怎么办它,但看看itertools:http://docs.python.org/library/itertools.html – robert 2012-01-16 21:32:50
我认为我了解它,但现在我意识到我不知道。你的清单包括((3,2),(1,4),(5,6))和((1,4),(3,2),(5,6))以及几个我的代码认为是等价的其他对。我错过了什么? – DSM 2012-01-16 22:18:33
是的,它看起来像OP中的列表是不正确的。尽管如此,还是有十五个满足条件的独特列表;看到我的答案。 – tzaman 2012-01-16 23:07:08