【发布时间】:2012-01-16 21:26:40
【问题描述】:
我正在寻找一种方法来为 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:docs.python.org/library/itertools.html
-
我以为我明白了,但现在我意识到我不明白。您的 15 个列表包括 ((3,2), (1,4), (5,6)) 和 ((1,4), (3,2), (5,6)),以及几个我的代码认为等效的其他对。我错过了什么?
-
是的,看起来 OP 中的列表不正确。尽管如此,仍然有一个满足给定条件的 15 个独特列表;看我的回答。
-
-2 没有发布可以轻松检查的答案。编辑了你的“答案”。
-
@DSM 是的,我在列举 n = 6 示例时犯了一个错误。对不起。但是,正如我在上面所写的那样,手动枚举非常麻烦。这就是我问这个问题的原因。不过还是谢谢你。