させて
- x = 100xは範囲の上端、場合はです。x=100
- n = 25nはドローの総数で、です。n=25
任意の数のの配列の数nはシーケンス内の各番号の数字≤ yがあるY N。これらのシーケンスのうち、y s を含まない数は(y − 1 )nであり、1つのyを含む数はn (y − 1 )n − 1です。したがって、2つ以上のy sを持つシーケンスの数は、
y n − (y − 1 )n − ny≤xn≤yyny(y−1)nyn(y−1)n−1y少なくとも2つの yを含む最大数 yのn個
のシーケンスの総数は、
x ∑ y = 1(y n − (y − 1 )n − n (y − 1 )n − 1)
yn− (y− 1 )n− n (y− 1 )n − 1
nyy∑y= 1バツ(yn− (y− 1 )n− n (y− 1 )n − 1)= ∑y= 1バツyn− ∑y= 1バツ(y− 1 )n− ∑y= 1バツn (y− 1 )n − 1= xn− n ∑y= 1バツ(y− 1 )n − 1= xn− n ∑y= 1x − 1yn − 1
シーケンスの総数は単純にです。全ての配列は、同様に可能性が高いと確率であるようである
X N - N Σ Y = X - 1 、Y = 1、Y N - 1バツn
バツn− n ∑y= x − 1y= 1yn − 1バツn
では私は確率0.120004212454を作ります。x = 100 、n = 25
x 、n
import itertools
import numpy.random as np
def countinlist(x, n):
count = 0
total = 0
for perm in itertools.product(range(1, x+1), repeat=n):
total += 1
if perm.count(max(perm)) > 1:
count += 1
print "Counting: x", x, "n", n, "total", total, "count", count
def simulate(x,n,N):
count = 0
for i in range(N):
perm = np.randint(x, size=n)
m = max(perm)
if sum(perm==m) > 1:
count += 1
print "Simulation: x", x, "n", n, "total", N, "count", count, "prob", count/float(N)
x=100
n=25
N = 1000000 # number of trials in simulation
#countinlist(x,n) # only call this for reasonably small x and n!!!!
simulate(x,n,N)
formula = x**n - n*sum([i**(n-1) for i in range(x)])
print "Formula count", formula, "out of", x**n, "probability", float(formula) / x**n
このプログラムは出力しました
Simulation: x 100 n 25 total 1000000 count 120071 prob 0.120071
Formula count 12000421245360277498241319178764675560017783666750 out of 100000000000000000000000000000000000000000000000000 probability 0.120004212454