关闭

两个有趣的概率问题

348人阅读 评论(0) 收藏 举报
分类:

首先考虑问题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 random
def 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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:184478次
    • 积分:5756
    • 等级:
    • 排名:第4492名
    • 原创:403篇
    • 转载:8篇
    • 译文:0篇
    • 评论:12条
    最新评论