pyb的博客

一个编程之路上的初学者

两个有趣的概率问题

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

结果:

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pp634077956/article/details/51554648
个人分类: 趣味思考
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

两个有趣的概率问题

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭