无聊的时候, 总喜欢拿着个硬币让人猜, 好验证他奇差的命中率。 某天, 一时兴起, 便有了以下对话:
“连续猜中两次的概率是...”
“1/4”
“期望呢”
“6”
“是么”
“肯定是, 我还知道连续n次的期望和方差的计算方法呢”
于是, 悲剧诞生了, 为了验证这个问题, 我拿起笔随手写了个方程, 结果却是三小时一去不复返.....
模型: 有一个抛硬币游戏, 当连续出现n次正面的时候结束, 设P(n, m)为m次时结束的概率, 求m的期望和方差
既然要求m的期望和方差, 那么我们就需要先分析一下P(n, m)吧, 首先, 我们可以从n = 2的情况分析,,
当m = 2, 则抛硬币的序列可能有1种(为简洁起见,以0为反面, 1为正面):
11
当m = 3, 抛硬币的序列可能为1种:
011
当m = 4, 抛硬币的序列可能为2种:
0011
1011
当 m = 5, 抛硬币的序列可能为3种:
00011
01011
10011
1, 1, 2, 3令你想到什么呢, 费波拉数列么, 是否有点惊喜的感觉呢, 当然, 这只是一个推测, 我们下面将会将会尝试证明这一点:
设f(m)为抛掷m次时结束的序列数,
假设抛m次结束时, 序列为(S1,S2,....Sm(别想歪,by accident), 则子序列(S1, S2.。。Sm-n)中必然不会出现连续n个1
如果S1 = 0, 那么,(S2, ....Sm)的可能情况为f(m - 1)
如果S1 = 1, 则S2 = 0, 那么(S3 ....Sm)的可能情况为f(m-2),
所以f(m) = f(m -1) + f(m - 2)
而边界条件为, {f(1) = 0; f(2) = 1}
所以, P(2, m) = P(2, m - 1) / 2 + P(2, m - 2) / 4
并且可以由此推广, 对于抛掷n次的情况, 有
f(n, m) = Σf(n, k), 其中k = n - m + 1.....m - 1
此外, 边界条件为, {f(n, m) = 0 if n > m; f(n, n) = 1}
P(n, m) = ΣP(n, m - k) / 2k, 其中k ∈ [1, n] (1)
P(n, n) = 1 / 2n (2)
P(n, m) = 0 if n > m (3)
既然知道了P(n, m)的概率, 那么怎么求概率呢? 这里可以使用生成函数(如果不知道的话, 可以google了解一二)。
P(n, m)的生成函数为:
G(x) = ΣP(n, k)xk 其中k 属于[1, +∞)
由式(1)(2) (3)可得
G(x) = ΣG(x)xk / 2k + xn/2n k = [1, n] (4)
所以
G(x) = (2 - x) * xn / (2n+1(1 - x) + xn+1) (5)
好了, 现在我们得到了生成函数G, 那么怎么求期望T呢. 我们知道
T = ΣkP(n, m)
那么对G求导, 得到
G′(x) = Σk * P(n, k)xk-1 , 所以
期望T = ΣkP(n, m) = G′(1) = 2n+1 - 2
方差的话也很好计算, 有兴趣的话可自行算一下