类似无穷期望概率题

首先介绍:两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛者吃到苹果的概率是多少?

此种,先假设某种情况,需要P,再根据下一个状态推出递推方程,即可求解。


以下借鉴:

http://www.matrix67.com/blog/archives/3638

http://www.cnblogs.com/atyuwen/archive/2010/09/12/coin.html

http://blog.csdn.net/wangran51/article/details/8882088

http://blog.csdn.net/pure_life/article/details/8100984

题1:

问题描述:

有一个木桶,里面有M个白球,小明每分钟从桶中随机取出一个球涂成红色(无论白或红都涂红)再放回,问小明将桶中球全部涂红的期望时间是多少?

分析过程:

数学期望类的题目,主要是要理解什么是数学期望,数学期望是干什么用的,关于这些问题的解答,大家可以自己去理解,思考或者翻书,我要讲的内容是如何利用这些数学期望的特点。

数学期望的递归特性:

飞行棋大家都玩过吧,应该知道每次抛到6,就有一架飞机可以出门了,那么问你一架飞机可以出门的时候,抛筛子次数的数学期望是多少?

你估计会毫不犹豫的说是6(P=1/6,E=1/P=6),但是你思考过深一层次的原因吗?

好吧,我来告诉你,我们记抛6的期望次数是E,如果第一次抛的是6,那么就是1次,概率是1/6;如果第一次不是6呢,那么次数是1+E,概率为5/6;

那么 E = 1 * (1/6) + (1+E) * (5/6),你可以很容易的解出 E = 6

上面加粗的红色字体用的就是类似一个递归的概念,希望你能理解吧,不行的话,那只能自己去努力理解了,呵呵。

现在我们开始解答上面的问题:

令P[i]代表M个球中已经有i个球是红色后,还需要的时间期望,去将所有球都变成红色。

So,给出递归式:P[i]= (i/M) * P[i] + (1-i/M)* P[i+1] + 1

我相信大家都能理解这个公式的含义,不过还是解释一下,在P[i]的情况下,我们选一次球,如果是红球,那么概率是i/M,子问题还是P[i],如果是白球,那么概率是1-i/M,子问题是P[i+1],注意你当前的选球操作要计算在内,即一次

化简如上递归式得:P[i] = P[i+1] + M/(M-i),显然P[M] = 0;

所以:

P[M-1] = P[M] + M/1

P[M-2] = P[M-1] + M/2

P[0] = P[1] + M/M

综上:P[0] = 0 + M/1 + M/2 + … + M/M至此问题已经解决,不过我希望大家学到的不是这个答案,而是分析这个题目的过程

题二:

在一款游戏中,武器等级可以分为0-7级,武器每次升级需要一块宝石,每次升级可能出现三种情况:升一级、保持不变、降一级

已知i->i+1升一级概率为Ai,保持不变概率为Bi,降一级概率为Ci。

A0~A7,B0~B7,C0~C7均已知,其中从等级0到等级1必定成功,即A0=1,B0=0,C0=0

现在问你将武器从0级升级到3级需要的宝石数的期望?

如果大家在看这篇博文之前,没有阅读我之前的博文:面试题中的概率问题-数学期望(1),请大家先去看看,主要关注【数学期望中的递归特性

分析过程:

设f(x,y)表示从x升级到y的宝石数期望,则:

f(0,3)  =  1 + f(1,3)

f(1,3)  =  A1*(1+f(2,3)) + B1*(1+f(1,3)) + C1*(1+f(0,3))

f(2,3) =  A2*1 + B2*(1+f(2,3)) + C2*(1+f(1,3))

很明显,这是一个三元一次方程组,必定可以计算出f(0,3),f(1,3),f(2,3)

其中f(0,3)为最终的答案

其实,这个思想并不难,关键是有没有想到,下面做简单分析

  • f(0,3)用一块宝石升级到1级后,继续的期望是f(1,3) =>  f(0,3) = 1 +f(1,3)
  • f(x,y)用一块宝石升级一次后,有Ax的概率升一级,之后期望为f(x+1,y),这部分为Ax*(1+f(x+1,y)),之后部分类似分析,即可得到 f(x,y) = Ax*(1+f(x+1,y)) + Bx*(1+f(x,y)) + Cx*(1+f(x-1,y)),关于x与y的大小,还有一些边界就自己去考虑吧
  • f(x,x)为0

最终答案:

如果我们令[A0,B0,C0] = [1,0,0] ,[A1,B1,C1] = [1/3,1/3,1/3],[A2,B2,C2] = [1/9,4/9,4/9] ,那么f(0,3) = 30  f(1,3) = 29   f(2,3) = 25

注意,根据我们上面简单分析中的第二条f(x,y)的计算,其实可以解决升级到任意等级的需要的宝石数,包括将最高等级扩展到N,只要有对应的[Ai,Bi,Ci],因为实际上最后问题都是一个方程组,可以编程来解决,参考矩阵的相关知识,见数值计算。

题3:

假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。

上面这个题目我第一次见到是在pongba的TopLanguage的一次讨论上,提出问题的人为Shuo Chen,当时我给出了一个解法,自认为已经相当简单了,先来考虑一下抛硬币的过程:首先先抛一枚硬币,如果是花,那么需要重头开始;如果是字,那么再抛一枚硬币,新抛的这枚如果也是字,则游戏结束,如果是花,那么又需要重头开始。根据这个过程,设抛硬币的期望次数为T,可以得到关系

  T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T)  //可以用分支递归状态法

解方程可得到 T = 6. 由于上面这个方法只能得到期望,而无法得到方差以及具体某个事件的概率,后来我又仔细分析了一下,推出了概率生成函数为(推导的过程暂时略过,后面你会看到一个更一般、更简单的推导)

  

于是可以算出方差 V = G''(1) + G'(1) - G'(1)^2 = 22。将G(z)根据Rational Expansion Theorem [CMath 7.3]展开,可以得到需要抛n次硬币的概率为

  

其中Fn是Fibonacci数列的第n项。到这里,我觉得这个问题似乎已经完全解决了,直到昨天看到Matrix67的牛B帖。在此帖中Matrix67大牛用他那神一般的数学直觉一下将需要连续抛出n个字的一般情形给解决了,而且得出的结果相当简洁:Tn = 2^(n+1) - 2,其中Tn为首次出现连续的n个字的期望投掷数。这也给了我一些启发,我试着将上面的过程进行推广,居然得到一个简单得出人意料的解法(甚至比上面n=2的推导过程还简单)。这个解法的关键在于下面这个递推关系

  Tn = Tn-1 + 1 + 0.5 * Tn

也即是有 Tn = 2 * Tn-1 + 2。由于 T1 = 2,因此可以得到 Tn = 2^(n+1) – 2。上面的递推关系是怎么来的呢,一个直观的理解是这样的:首先先抛掷Tn-1次,得到连续的n-1个字,然后再抛一次,若是字,则游戏结束;否则需要重头开始,也就是说又需要 Tn 次。

期望投掷次数已经得出来了,但是我们还想知道方差、恰好需要投掷 m 次的概率等其它一些更具体的性质。为了方便理解概率的分布情况,我先用程序生成了一个概率表如下所示。在下表中,第n行、第m列的元素为 Pnm,表示首次出现连续n个字的投掷数为m的概率。

1/21/41/81/161/321/641/1281/2561/5121/1024
01/41/82/163/325/648/12813/25621/51234/1024
001/81/162/324/647/12813/25624/51244/1024
0001/161/322/644/1288/25615/51229/1024
00001/321/642/1284/2568/51216/1024

仔细观察上表,你发现什么有趣的性质没?如果忽略掉分母的话,那么第n行恰好是一个n阶Fibonacci数列。例如可以考查各行的最后一列,有

第一行:1 = 1

第二行:34 = 21 + 13

第三行:44 = 24 + 13 + 7

第四行:29 = 15 + 8 + 4 + 2

第五行:16 = 8 + 4 + 2 + 1 + 1

怎么解释这个现象呢?我们再来仔细考虑一下掷硬币的过程,为方便在下文中用1表示字,用0表示花,于是我们的目标是要恰好使用m次投掷,得到连续的n个1.

若第一次的结果为 0,那么剩下的任务就是恰好使用m-1次投掷得到到连续的n个1.

若前两次的结果为 10, 那么剩下的任务就是恰好使用m-2次投掷得到到连续的n个1.

若前三次的结果为 110, 那么剩下的任务就是恰好使用m-3次投掷得到到连续的n个1.

若前四次的结果为 1110, 那么剩下的任务就是恰好使用m-4次投掷得到到连续的n个1.

若前n-1次的结果为 1…10(n-2个1), 那么剩下的任务就是恰好使用1次投掷得到到连续的n个1.

你或许已经看出来了,这里实际上是在枚举首次出现0的位置。由于首个0出现在位置i的概率为1/2^i,于是得到Pnm的递推公式

  

于是根据初始条件:,我们可以推出所有事件的概率。现在来推一下概率生成函数,设需要得到连续n个1的投掷数的概率生成函数为Gn(z),于是有

  

根据上面的递推公式和初始条件,可以得到

  

于是可解得

  

分别代入 n = 1 和 n = 2 可以得到

  

  

以我们前面得到的结果一致,这证明这个概率生成函数的确是正确的。有了生成函数后,我们又多了一种计算期望的方式

  

而方差也可以非常容易的得到

  

至此,这个抛硬币的问题终于应该算是被完全解决了,完。

此题的一个推广:

设想有这么一家赌场,赌场里只有一个游戏:猜正反。游戏规则很简单,玩家下注 x 元钱,赌正面或者反面;然后庄家抛出硬币,如果玩家猜错了他就会输掉这 x 元,如果玩家猜对了他将得到 2x 元的回报(也就是净赚 x 元)。
    让我们假设每一回合开始之前,都会有一个新的玩家加入游戏,与仍然在场的玩家们一同赌博。每个玩家最初都只有 1 元钱,并且他们的策略也都是相同的:每回都把当前身上的所有钱都押在正面上。运气好的话,从加入游戏开始,庄家抛掷出来的硬币一直是正面,这个玩家就会一直赢钱;如果连续 n 次硬币都是正面朝上,他将会赢得 2^n 元钱。这个 2^n 就是赌场老板的心理承受极限——一旦有人赢到了 2^n 元钱,赌场老板便会下令停止游戏,关闭赌场。让我们来看看,在这场游戏中存在哪些有趣的结论。

首先,连续 n 次正面朝上的概率虽然很小,但确实是有可能发生的,因此总有一个时候赌场将被关闭。赌场关闭之时,唯一赚到钱的人就是赌场关闭前最后进来的那 n 个人。每个人都只花费了 1 元钱,但他们却赢得了不同数量的钱。其中,最后进来的人赢回了 2 元,倒数第二进来的人赢回了 4 元,倒数第 n 进来的人则赢得了 2^n 元(他就是赌场关闭的原因),他们一共赚取了 2 + 4 + 8 + … + 2^n = 2^(n+1) – 2 元。其余所有人初始时的 1 元钱都打了水漂,因为没有人挺过了倒数第 n + 1 轮游戏。

    另外,由于这个游戏是一个完全公平的游戏,因此赌场的盈亏应该是平衡的。换句话说,有多少钱流出了赌场,就该有多少的钱流进赌场。既然赌场的钱最终被赢走了 2^(n+1) – 2 元,因此赌场的期望收入也就是 2^(n+1) – 2 元。而赌场收入的唯一来源是每人 1 元的初始赌金,这就表明游戏者的期望数量是 2^(n+1) – 2 个。换句话说,游戏平均进行了 2^(n+1) – 2 次。再换句话说,平均抛掷2^(n+1) – 2 次硬币才会出现 n 连正的情况。

题4: 面对面试概率题几乎屡试不爽的分叉树递归列方程法。————》个人觉得分支递归状态法名字比较合适(题二,题一,三均可用此法!!)

这是一个求数学期望的问题,最终是求1,2,3出现至少一次的最短长度的期望。

这样分叉树的每个节点是一个期望状态,而每个分叉是一次投掷结果。将后续期望出现1、2、3各至少一次的情形记作L123(即题目所求),将后续期望出现1、2各至少一次(3无关)情形记作L12,而1至少一次(2,3无关)情形L1,其余数值符号类推,则树结构如下(列出4级结构已经足够):

第一级(树根)第二级第三级第四级别
L123掷1->L23掷1->L23同状态


掷2->L3根据投掷结果,或继续期待L3,或已经达到目标


掷3->L2根据投掷结果,或继续期待L2,或已经达到目标

掷2->L13掷1->L3根据投掷结果,或继续期待L3,或已经达到目标


掷2->L13同状态


掷3->L1根据投掷结果,或继续期待L1,或已经达到目标

掷3->L12掷1->L2根据投掷结果,或继续期待L2,或已经达到目标


掷2->L1根据投掷结果,或继续期待L1,或已经达到目标


掷3->L12同状态

接下来,就是要排出方程,因为一共7个未知数,如果排出7个线性方程就能解决问题。

这方程组里的未知数对应上述的状态,而其数值则是一个对长度(投掷次数)的数学期望。

根据这个树状结构和其中的递归关系,这个方程组就是:

L123 = p1 (L23+ 1) + p2 (L13+1) + p3 (L12 + 1) = p1 L23 +p2 L13p3 L12 + 1

(以这个L123为例,解释,投掷1的概率是p1而由此得到的结果是需要期待后续2和3各至少出现一次,于是长度期望是L23+ 1,加1是因为投掷了一次,亦即即增进一级)

L23 = p1 L23 +p2 L3p3 L2 + 1

L13 = p1 L3 +p2 L13p3 L1 + 1

L12 = p1 L2 +p2 L1p3 L12 + 1

L1 =p2 L1p3 L1 + 1

(这里实际上是 L1 =p1 ·1 + p2 (L1+1) + p3 (L1 +1) =p2 L1p3 L1 + 1,因为对L1情形,如果投了1就目的达到终止了)

L2 =p1 L2 +  p3 L2 + 1

L3 =p1 L3 +p2 L3+ 1

(以上一开始没注意,多加了悬空的概率项,故计算有误)

其中 p1,p2 和 p3分别是掷出1,2和3的概率,即1/6,1/3,1/2。

于是求解这个方程,得到:

L1 = 6, L2 = 3, L3 = 2

L12 = 7, L13 = 13/2, L23 = 19/5

L123 = 219/30 = 7.3

故以上如果没有计算错误,该题结果是,平均掷7.3次可出现这些面值各至少一次。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值