两个有趣的概率问题

来源:互联网 发布:广州拓飞数据恢复公司 编辑:程序博客网 时间:2024/06/06 02:27

首先考虑问题1:
从自然数1,2….n选择m个不重复的数,其中最大值的期望是多少?
假设一次试验中最大值是k,那么

P(k)=C(k1m1)C(mn)

E(Max)=k=mnP(k)k=k=mnmC(mk)C(mn)

因为
k=mnC(mk)=C(m+1n+1)

E(Max)=mC(m+1n+1)C(mn)=m(n+1)/(m+1)

先给出python代码进行模拟验证:

def simulation_notrepeat(n,m):    tot_average = 0    for i in range(10000):        max = 0        count = 0        is_repeated = set([])        while count < m:            x = random.randint(1,n)            if x not in is_repeated:                is_repeated.add(x)                count += 1                if x > max:                    max = x        tot_average += max    print(tot_average/10000)def test_notrepeat(n,m):    print(m*(n+1)/(m+1))

问题2:假设问题1种所有数字可以重复,则最大数字的期望。
假设一次试验最大值是k

P(k)=km(k1)mnm

E(Max)=k=1nP(k)k

具体的闭式表达式我没有求解出来,有解出来的请告知一下^_^.
同样利用Python验证:

import randomdef simulation(n,m):    tot_average = 0    for i in range(10000):        max = 0        for j in range(m):            x = random.randint(1,n)            if x > max:                max = x        tot_average += max    print(tot_average/10000)def test_math(n,m):    average = 0    for k in range(1,n+1):        average += (k**m - ((k-1)**m))*k    print(average/(n**m))
def test_notrepeat(n,m):    print(m*(n+1)/(m+1))def test(n,m,simulation,test_math):    simulation(n,m)    test_math(n,m)test(100,35,simulation,test_math)test(100,35,simulation_notrepeat,test_notrepeat)

结果:

这里写图片描述
看到不重复的相对重复的期望要大一点,但是很接近。

0 0