两个有趣的概率问题

原创 2016年06月01日 11:28:40

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

结果:

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

一些有趣的算法

本文专门记录一些有趣的算法。计算二进制数中1的个数这道题目的一个解决方案是通过%2来计算,这个比较简单。现在推荐一个快速算法,利用n=n&(n-1);来计算,可以这么解释这个运算的作用:一个数减1以后...
  • linshijun33
  • linshijun33
  • 2016年08月04日 23:54
  • 1027

概率论问题_生日问题

生日也会有问题,人生如此艰难。问题描述: 在一个教室中最少应有多少学生才使得至少有两个学生的生日在同一天的概率不小于1/2?直觉回答这应该是个三位数的答案,对吧! 然而答案是23!!!!第一次遇到这个...
  • KgdYsg
  • KgdYsg
  • 2017年01月12日 02:14
  • 1024

两个有趣的问题 .

有n瓶粉末,一瓶有毒。有毒的粉末融在水里一小时后水会变蓝。你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间。 这道题最基本的想法就是时间换空间或者空间换时间,...
  • zynevermore
  • zynevermore
  • 2014年08月08日 22:28
  • 161

三门问题 概率论

三门问题,亦称为蒙特霍问题(英文:Monty Hall problem),最初的表述形式:参赛者会看见三扇关闭了的门,其中一扇的后面有一辆汽车,选中后面有车的那扇门就可以赢得该汽车,而另外两扇门后面则...
  • neuldp
  • neuldp
  • 2016年07月10日 11:18
  • 970

一个关于概率的问题的思考

最近需要给公司内部编写一个随机生成人员名单的小工具,在解决这个问题的过程中,我认识到这是一个概率相关的问题,即使在过去我曾经设计过类似转盘抽奖这样的应用程序,可我并不认为我真正搞清楚了这个问题,所以想...
  • qinyuanpei
  • qinyuanpei
  • 2016年10月19日 00:00
  • 1915

一些特别有趣的C++面试题(持续更新中)

一、根据C++11标准,以下程序输出什么? #include using namespace std; class A { public: A() { cout ...
  • ZSGG_ACM
  • ZSGG_ACM
  • 2016年04月01日 21:43
  • 2429

有趣的C++算法_(:з」∠)_

摘要在刷算法题的过程中,被一些大神的想法折服,方知天外有天,山外有山_(:з」∠)_...
  • LeYOUNGER
  • LeYOUNGER
  • 2017年04月08日 14:54
  • 482

[算法]有趣算法合辑[1-10]

最近在网上看到一些不错的C语音算法。枚举一些,供自己学习使用。有些有意思的算法会附上C#的不同实现。 题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分...
  • wzhiu
  • wzhiu
  • 2014年06月16日 16:41
  • 1600

[笔试题] 两个有趣的问题

两个有趣的笔试题,看看你是不是都能轻松搞定~ 有n瓶粉末,一瓶有毒。有毒的粉末融在水里一小时后水会变蓝。你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间。 给定一个...
  • u014204710
  • u014204710
  • 2014年08月08日 02:19
  • 2236

关于Java你可能不知道的10件事 (转载的文章,感觉比较有意思,等有空的时候好好玩一下)

呃,你是不是写Java已经有些年头了?还依稀记得这些吧: 那些年,它还叫做Oak;那些年,OO还是个热门话题;那些年,C++同学们觉得Java是没有出路的;那些年,Applet还风头正劲…… 但我打...
  • u011760575
  • u011760575
  • 2014年11月21日 15:48
  • 1169
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:两个有趣的概率问题
举报原因:
原因补充:

(最多只允许输入30个字)