나는 지금 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'
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다