Python Itertools Product Repeat To Big
Solution 1:
Of course it fails when the repeat becomes large. The loop
for combination in itertools.product(['W','L'], repeat=(K*2)-1):
iterates through 2**(K*2-1)
elements, which becomes prohibitively large very quickly. For example, when K=3, the loop executes 32 times, but when K=25 it executes 562949953421312 times.
You should not exhaustively try to enumerate all possible combination. A little bit of mathematics can help you: see Binomial Distribution.
Here is how to use the Binomial Distribution to solve your problem: If chance to win a single game is p, then the chance to lose is 1-p. You want to know what is the probability of winning k out of n games. It is:
(n choose k) * p**k (1 - p)**(n - k)
Here (n choose k)
is the number of combinations that have exactly k wins.
Solution 2:
The following gives you a clue:
>>> for K in range(1,11):
... n = 0
... for combination in itertools.product(['W','L'], repeat=(K*2)-1):
... n+=1
... print (K,n),
...
(1, 2) (2, 8) (3, 32) (4, 128) (5, 512) (6, 2048) (7, 8192) (8, 32768) (9, 131072) (10, 524288)
>>>
So you are going to have to wait a long time for a result at K=25. maybe it is time to work out your probability rather than simply calculating it!
Post a Comment for "Python Itertools Product Repeat To Big"