gpt4 book ai didi

python - 在给定的翻转次数中找到特定数量的正面和反面的所有组合

转载 作者:行者123 更新时间:2023-12-04 09:32:22 26 4
gpt4 key购买 nike

我正在尝试计算给定硬币翻转次数的所有可能组合,目前使用 10 作为我的测试用例。我相信那是笛卡尔积,但我上一堂数学课是很久以前的事了。然而,扭曲是我想首先计算最可能的分布。这是我开始的代码:

import itertools
for x in itertools.product(['H','T'],repeat=10):
print(x)
这将为我提供 10 次抛硬币的所有可能组合。但是第一个结果全是正面,这个可能性不大。我的想法是从一个均匀分布开始,5个正面和5个反面的所有组合,然后继续4个正面和6个反面(加上逆)、3个正面和7个反面(加上反面)等。但是,我不太确定是否可以使用 itertools 或其他一些内置模块或模块组合来做到这一点。
如果我使用这个:
import itertools
for x in itertools.permutations(['H','H','H','H','H','T','T','T','T','T']):
print(x)
然后有很多重复,因为它认为每个“H”和“T”都是唯一的。关于如何解决这个问题的任何建议?

最佳答案

来自进口multiset_permutations .这将计算 252 个排列,(10!/5!/5!)

>>> from sympy.utilities.iterables import multiset_permutations
>>> for item in multiset_permutations(['H','H','H','H','H','T','T','T','T','T']):
print(item)

['H', 'H', 'H', 'H', 'H', 'T', 'T', 'T', 'T', 'T']
['H', 'H', 'H', 'H', 'T', 'H', 'T', 'T', 'T', 'T']
['H', 'H', 'H', 'H', 'T', 'T', 'H', 'T', 'T', 'T']
['H', 'H', 'H', 'H', 'T', 'T', 'T', 'H', 'T', 'T']
['H', 'H', 'H', 'H', 'T', 'T', 'T', 'T', 'H', 'T']
['H', 'H', 'H', 'H', 'T', 'T', 'T', 'T', 'T', 'H']
['H', 'H', 'H', 'T', 'H', 'H', 'T', 'T', 'T', 'T']
['H', 'H', 'H', 'T', 'H', 'T', 'H', 'T', 'T', 'T']
['H', 'H', 'H', 'T', 'H', 'T', 'T', 'H', 'T', 'T']
['H', 'H', 'H', 'T', 'H', 'T', 'T', 'T', 'H', 'T']
['H', 'H', 'H', 'T', 'H', 'T', 'T', 'T', 'T', 'H']
['H', 'H', 'H', 'T', 'T', 'H', 'H', 'T', 'T', 'T']
['H', 'H', 'H', 'T', 'T', 'H', 'T', 'H', 'T', 'T']
['H', 'H', 'H', 'T', 'T', 'H', 'T', 'T', 'H', 'T']
['H', 'H', 'H', 'T', 'T', 'H', 'T', 'T', 'T', 'H']
...
['T', 'T', 'T', 'H', 'H', 'T', 'H', 'T', 'H', 'H']
['T', 'T', 'T', 'H', 'H', 'T', 'T', 'H', 'H', 'H']
['T', 'T', 'T', 'H', 'T', 'H', 'H', 'H', 'H', 'T']
['T', 'T', 'T', 'H', 'T', 'H', 'H', 'H', 'T', 'H']
['T', 'T', 'T', 'H', 'T', 'H', 'H', 'T', 'H', 'H']
['T', 'T', 'T', 'H', 'T', 'H', 'T', 'H', 'H', 'H']
['T', 'T', 'T', 'H', 'T', 'T', 'H', 'H', 'H', 'H']
['T', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'H', 'T']
['T', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'T', 'H']
['T', 'T', 'T', 'T', 'H', 'H', 'H', 'T', 'H', 'H']
['T', 'T', 'T', 'T', 'H', 'H', 'T', 'H', 'H', 'H']
['T', 'T', 'T', 'T', 'H', 'T', 'H', 'H', 'H', 'H']
['T', 'T', 'T', 'T', 'T', 'H', 'H', 'H', 'H', 'H']
编辑: OP 提到在某些情况下这可能会超出递归限制。这里有一些计算,实际上,multiset_permutation 的项目数可能会变得非常大。我想你需要知道你的集合有多大。
>>> from math import comb
>>> '{:,}'.format(comb(50,25))
'126,410,606,437,752'
>>> '{:,}'.format(comb(20,10))
'184,756'
>>> '{:,}'.format(comb(10,5))
'252'

关于python - 在给定的翻转次数中找到特定数量的正面和反面的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62779914/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com