[转载]
http://www.matrix67.com/blog/
1,考虑这么一个游戏:不断在区间 [0, 1] 中概率均等地选取随机数,直到所取的数第一次比上一个数小。那么,平均需要抽取多少个随机数,才会出现这样的情况?
答案:
记 Pi 为第 i 次才取到小于前一个数的数的概率。则我们要求的就是
P1 + 2 * P2 + 3 * P3 + 4 * P4 + … |
妙就妙在下面这个变形(在继续看下去之前你能想到吗):
|
P1 + 2 * P2 + 3 * P3 + 4 * P4 + … |
= (P1 + P2 + P3 + …) + (P2 + P3 + …) + (P3 + …) + … |
= P(取数次数≥1) + P(取数次数≥2) + P(取数次数≥3) + … |
显然,取数次数是一定大于等于 1 的。事实上,取数次数也是一定大于等于 2 的。要想取到第 3 个数,则前面两个数必须是递增的,其概率是 1/2 ;取数次数达到了 4 次或者更多,当且仅当前三个数是递增的,其概率为 1/3! = 1/6
因此,本题的答案为:
1 + 1 + 1/2! + 1/3! + 1/4! + ... |
没错,这个问题的答案竟然是 e 。
2,类似的问题:
随便取一个 0 到 1 之间的数,再加上另一个 0 到 1 之间的随机数,然后再加上一个 0 到 1 之间的随机数??直到和超过 1 为止。一个有趣的问题:平均需要加多少次,才能让和超过 1 呢?
答案是 e 次。
为了证明这一点,让我们先来看一个更简单的问题:任取两个 0 到 1 之间的实数,它们的和小于 1 的概率有多大?容易想到,满足 x+y<1 的点 (x, y) 占据了正方形 (0, 1)×(0, 1) 的一半面积,因此这两个实数之和小于 1 的概率就是 1/2 。
类似地,三个数之和小于 1 的概率则是 1/6 ,它是平面 x+y+z=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 |
分享到:
相关推荐
在这个游戏中,计算机将生成一个随机数,然后让用户尝试猜测这个数字,直到猜对为止。 首先,我们需要了解易语言中的随机数生成。在易语言中,可以使用"系统.随机数"模块来生成随机数。这个模块提供了几个函数,如...
根据给定的文件信息,我们可以总结出以下几个关键的知识点: ### 1. C++基本语法与文件操作 #### 1.1 包含必要的头文件 - `#include<fstream>`:此头文件包含了用于文件输入输出操作的所有类,如`ifstream`(用于...
5. 二次机会页面置换算法(Second Chance):基于FIFO的基础上,添加一个访问位,当检查到的页面不是最近访问的,就给它第二次机会,如果再次未被访问,则进行替换。 三、实验内容及步骤 1. 实现上述页面置换算法:...
第一次`array_flip()`会将数组的键值对调换,第二次再调换回来,这样相同的值就会被替换掉,留下不重复的值。当生成的随机数达到指定数量时,循环结束。 为了确保返回的数组顺序是随机的,我们在返回结果之前使用`...
- 射击命中事件可以通过组合逻辑表示,如至少命中一次、恰好命中两次等。 这些习题展示了概率统计中的基本概念,如样本空间、随机事件、概率计算、事件的运算以及在实际问题中的应用。通过解答这些问题,学生能够...
5. **概率模拟**:第五题中,为了模拟从10支圆珠笔中随机取一支是一级品的概率,可以通过生成1到10的随机整数,并将1-7视为一级品,8-10视为二级品,通过多次试验来估计取到一级品的概率。 6. **随机模拟在概率问题...
本算法采用随机快速选择的方法,通过生成随机数的方式指定基准数据,并将其放置在序列的第一位,随后对序列两侧的数据进行同样的排序处理,直至形成有序序列。这种方法相比于传统快速排序将序列的第一个元素作为基准...
如果你想在程序中手动控制随机数序列,可以使用特定的种子值调用`srand()`,例如`srand(time(0))`会使用当前时间作为种子,确保每次运行都产生不同的序列。 接下来,讲座提到了几个使用随机整数的实际例子: 1. **...
这个元素通常选取序列的第一个元素或者最后一个元素,但也有其他策略,如三数取中等方法,以提高算法的平均性能。 2. **分区操作(Partitioning)**:重新排列序列,使得所有小于主元的元素都移到主元的左边,所有...
关键在于“线性反馈”部分,这意味着寄存器的一部分输出会被反馈回输入端,通过逻辑门(通常是异或门)影响下一次移位的结果。这种反馈机制使得LFSr能够产生看起来随机但实际上可预测的比特序列。 在Verilog中,...
数组的第一个元素 `X[0]` 设为0,接着使用 `Gauss()` 函数生成高斯分布的随机数,并除以 `(N-1)` 来调整尺度,确保整个序列在 [0,1] 区间内变化。 - `InitGauss` 算法:此算法用于初始化随机数生成器,设置全局变量...
根据给定文件的信息,我们可以提炼出以下几个核心知识点: ### 一、随机算法的应用场景与目的 **随机算法**是一种在解决问题的过程中使用随机性选择的方法。它通常被用于那些难以找到确切解或者寻找确切解非常耗时...
**直接选择排序**是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。直接选择排序的平均和最坏时间复杂度都...
在实验中,快速排序展示了如何通过不断的划分和递归,将5个随机数排序。 3. **归并排序**是另一种基于分治策略的排序算法。它将数组分为两个子数组,分别进行排序,然后将排序后的子数组合并为一个有序的数组。在...
如果在第一次就猜对,得100分;如果在第26次或之后猜对,则得0分;其他情况,得分公式为`100 - k * 4`,意味着每多猜一次,得分将减少4分。 8. **输出得分**: - 在循环结束后,调用`Getmark(k)`计算得分并显示给...
本文将详细介绍蒙特卡罗方法的基本原理,尤其是随机数生成技术,这对于任何蒙特卡罗计算而言都是至关重要的第一步。 #### 一、蒙特卡罗计算概述 蒙特卡罗方法是一种基于概率统计的数值计算方法,其基本思想是通过...
2. 希尔排序:希尔排序是插入排序的一种优化版本,通过增量序列分组进行插入排序,使得原本无序的数据在经过几轮排序后变得有序,最后再进行一次直接插入排序。Java实现时需要设计一个增量序列,并按此序列对元素...
此数字表示要四舍五入至小数下第几位。如果省略,Round函数将返回整数。 8. Sgn函数:Sgn函数返回一个整数代表参数的正负号。参数number可以是任何的数值表达式。Sgn函数有下列返回值: | number | 返回值 | | ---...
根据描述,“书外知识第一次测试,抽取随机数”,我们可以推测这些Python脚本可能涉及到随机数的生成和操作,这在许多计算任务和算法实现中都是常见的需求。以下是根据这些信息可能涵盖的几个关键知识点的详细说明:...
这可以通过初始化寄存器中的位来完成,或者在第一次时钟上升沿时设置。 2. **移位寄存器**:这是一个具有固定长度的二进制寄存器,用于存储当前的伪随机数序列。在每个时钟周期,所有位向右移动一位,最右边的位移...