如何找到 40 个字母字符串的所有组合?
我必须找出 20 D
有多少种组合和 20 R
可以制作。
因为在一种组合中可能是......
DDDDDDDDDDDDDDDDDDDDRRRRRRRRRRRRRRRRRRRR
这是 1 个组合,现在我如何计算其余的?
最佳答案
要计算 20 个 D
和 20 个 R
的每个组合,我们可以认为有 40 个“槽位”,其中 20 个槽位将由 填充D
,其余部分由R
填充。所以,我们可以计算出combinations的总数使用C(40, 20),或者40选择20,可以用下面的公式表示:
40!/(20!*(40-20)!)
或者在 Python 中:
>>> import math
>>> math.factorial(40) / (math.factorial(20) * math.factorial(40-20))
137846528820L
请注意,这与具有 20 个 D
和 20 R< 的字符串的唯一排列数量相同
,但是如果您只计算该字符串的排列数,您将计算出很多重复项,并且如果您尝试通过创建每个排列来计算它,则将花费很长时间。
如果您想实际生成唯一的排列(我不建议这样做),一种方法是使用 itertools.combinations(range(40), 20)
。这里返回的每个元素都是一个由 20 个整数组成的元组,它们是该特定排列中每个 D
的索引。
关于python - 寻找不同的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12699132/