平均要取多少个(0,1)中的随机数才能让和超过1

简介:

先用程序估算一下

复制代码
from __future__ import division
import random
N = 1000000
sums = 0
for i in range(N):
    count = 0
    s = 0
    while 1:
        s += random.random()
        count += 1
        if s > 1:
            sums += count 
            break
print sums / N
复制代码

三次给出的结果分别是

1
2.716957 2.718334  2.71885

2.718不就是e的味道吗,下面证明一下

先取两个特例

特例1:x+y < 1——两个随机数之和小于1

结果是紫色部分,为1/2

特例2:x+y+z< 1——三个随机数之和小于1

结果为深底下面的,占整个体积的1/6(锥体积:1/3*底面积*好=1/3 * 1/2 * 1 *1)

这个 1/6 可以利用截面与底面的相似比关系,通过简单的积分求得:

   ∫(0..1) (x^2)*1/2 dx = 1/6

推广:四个 0 到 1 之间的随机数之和小于 1 的概率就等于四维立方体一角的“体积”,它的“底面”是一个体积为 1/6 的三维体,在第四维上对其进行积分便可得到其“体积”

  ∫(0..1) (x^3)*1/6 dx = 1/24

依此类推, n 个随机数之和不超过 1 的概率就是 1/n! ,反过来 n 个数之和大于 1 的概率就是 1 – 1/n! ,因此加到第 n 个数才刚好超过 1 的概率就是

 (1 – 1/n!) – (1 – 1/(n-1)!) = (n-1)/n!

因此,要想让和超过 1 ,需要累加的期望次数为

       ∑(n=2..∞) n * (n-1)/n! = ∑(n=1..∞) n/n! = e

 

转自:http://www.matrix67.com/blog/archives/3507






本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3946384.html,如需转载请自行联系原作者

相关文章
|
6月前
|
算法
面试题:如何找出数组里出现次数超过总数1/3的数
如果你每次从nums中拿出3个不一样的数作为一组,肯定会出现两种情况。一,nums被取空了,那么nums中每个数出现次数最多占总次数的1/3,写代码很好处理吧!! 二,还有剩余,这个情况就复杂了,有可能剩余多个,但是……但是,最多只可能剩余两种数。 为什么? 3个不同的数凑一组才能删掉,所以不可能删掉超过1/3的数。所以超过1/3的数肯定被剩下来,但是,剩下来的俩数并不一定都是超过1/3的,这点额外注意。
33 1
|
1月前
919: 我们被平均了
919: 我们被平均了
|
3月前
|
算法 测试技术 C++
【大根堆】【C++算法】871 最低加油次数
【大根堆】【C++算法】871 最低加油次数
|
10月前
1186:出现次数超过一半的数
1186:出现次数超过一半的数
|
12月前
|
算法 C++ Python
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
124 0
|
C++
13.数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
39 0
|
算法 搜索推荐
数组中出现次数超过一半的数字(简单难度)
数组中出现次数超过一半的数字(简单难度)
95 0
|
算法
【刷算法】数组中出现次数超过一半的数字
【刷算法】数组中出现次数超过一半的数字