adfhjk01 adfhjk01
关注数: 0 粉丝数: 259 发帖数: 4,944 关注贴吧数: 8
红旗要来了,模拟下,如果完全随机,需要多少次才能开出25个数 ############################################################ #这里的前提假设是完全随机,游戏里的的骰子可能可能不是等概率的!! ############################################################ 按照以下步骤模拟 1从99个数里选25个数 2从25个数里选一个(每个数等概率),直到25个都被选过一次 3重复 50000次步骤1和2,分析。 结果如下 平均需要95.6次能选完25个数 方差是30.3, 中位数是90次,25%和75% 百分位是74次和111次 99.93%的情况下需要的次数小于260次 6e-5,几乎为零的情况下大于320次 0.06%的情况下需要的次数在260到320之间 下面是次数的分布大多数集中在70-100之间。 本人非专业,如有错误请指正 附上代码 import random import scipy as sp import matplotlib import matplotlib.pyplot as plt import numpy as np matplotlib.use('TkAgg') def guess(seed): random.seed(seed) onehundred=[x for x in range(1,100)] your_numbers=random.sample(onehundred,25) your_numbers=list(your_numbers) left_numbers={n for n in your_numbers} random.seed(seed) k=0 while True: n=random.choice(your_numbers) if n in left_numbers: left_numbers.remove(n) k+=1 if len(left_numbers)==0: break return k seed=17 ks=[] times=50000 import time start =time.time() for i in range(times): k=guess(i) ks.append(k) if i%1000==0: print(i,time.time()-start) print(sum(ks)/times) print(sp.std(ks)) print(sp.median(ks)) print(np.percentile(ks,25)) print(np.percentile(ks,75)) print(len([k for k in ks if k < 260])/times) print(len([k for k in ks if k >320])/times) print(len([k for k in ks if 260<=k <= 320])/times) plt.hist(ks,bins=100) plt.xlim(xmin=25,xmax=300) plt.xticks(np.arange(25,300,step=20)) plt.show()
首页 1 2 3 下一页