一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
来源:互联网 发布:excel数据如何恢复 编辑:程序博客网 时间:2024/05/01 04:45
题目:一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
解法一:(没学过《组合数学》的请略过)
设P(N=n)表示第n次(n>2)抛出后1,2,3都出现的概率,问题要求n的期望E(N=n).掷1的概率p=1/6,掷2的概率q=1/3,掷3的概率r=1/2.
//程序实例
#include <iostream>using namespace std;float f(float x){ return (1/(1-x)/(1-x)-1-2*x);}int main(){ float p=1.0/6,q=1.0/3,r=1.0/2,e; e=r*(f(p+q)-f(p)-f(q))+p*(f(q+r)-f(q)-f(r))+q*(f(p+r)-f(p)-f(r)); cout<<e<<endl; return 0;}
解法二、 面对面试概率题几乎屡试不爽的分叉树递归列方程法。
这是一个求数学期望的问题,最终是求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 L13+ p3 L12 + 1
(以这个L123为例,解释,投掷1的概率是p1而由此得到的结果是需要期待后续2和3各至少出现一次,于是长度期望是L23+ 1,加1是因为投掷了一次,亦即即增进一级)
L23 = p1 L23 +p2 L3+ p3 L2 + 1
L13 = p1 L3 +p2 L13+ p3 L1 + 1
L12 = p1 L2 +p2 L1+ p3 L12 + 1
L1 =p2 L1+ p3 L1 + 1
(这里实际上是 L1 =p1 ·1 + p2 (L1+1) + p3 (L1 +1) =p2 L1+ p3 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次可出现这些面值各至少一次。
解法三、
首先介绍一下指示器随机变量。
指示器随机变量为概率与期望之间的转换提供了一个便利的方法。给定一个样本空间S和事件A,那么事件A对应的指示器随机变量I{A}定义为
I(A)=1 如果A发生的话;0 如果A不发生的话。
首先证明以下结论:
抛N次,123没有全部出现的概率,记为p(n),很容易通过容斥原则求出p(n)。
对p(n)从n=0到无穷求和。即为题目所求的期望。
定义随机变量X_n=1表示事件“前n次投掷骰子,123没能全部出现”发生,X_n=0表示这个事件没发生,即X_n是该事件的指示变量。
令p(n)为“投n次骰子,123没能全部出现”的概率,即X_n的数学期望为:
E[X_n] = 1*Pr[X_n=1]+0*Pr[X_n=0]=p(n)
令随机变量X表示投掷到多少次时,123刚好全部出现过。
最关键的一步是发现一下的恒等关系:
X=X_0+X_1+X_2+X_3+......
即X为所有X_n的和,n=0到无穷。
例如:假设投掷到第7次时123刚好全部出现,即X=7,即X_0到X_6都为1,从X_7开始至n无穷,X_n都为0.
我们的目标是求E[X],根据期望的线性,有:
E[X] = E[X_0] + E[X_1] + E[X_2] + E[X_3]+...
注意尽管各个X_n之间并不独立,但线性期望对于任何随机变量都是无条件成立的,所以我们总可以轻松吧问题化整为零。
前面已经能够知道E[X_n]=p(n),而且p(n)可以用容斥原理则轻松算出。因此所求期望就是所有p(n)的和,n=0到无穷,这是一个简单的几何级数。
p(n)=(1/2+1/3)^n + (1/2+1/6)^n+(1/3+1/6)^n - (1/2)^n-(1/3)^n-(1/6)^n
=(5/6)^n+(2/3)^n-(1/3)^n-(1/6)^n -----n>0的时候
而p(0) 根据定义应该是1
那么这个答案应该是
而几何级数1+q+q^2+q^3+....=1/(1-q)
因此E[x] = 1 + 6 + 3 - 3/2 - 6/5 = 7.3
转自:
http://blog.csdn.net/quanben/article/details/6918209
http://blog.csdn.net/wongson/article/details/7974587
- 题目: 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3, 问平均掷多少次能使1、2、3都至少出现一次。
- 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
- 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次
- 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
- 简单详解:x^6+4x^4+2x^3+x+1 至少要需要多少次乘法? (某公司实习生招聘笔试试题)
- 一群人想打斗地主和升级。已知他们已经1个、2个、3个或者4个人成为一桌了,现在要把他们全部变成3人一桌或者4人一桌,问至少移动几个人?(要保证所有人都能进行游戏)
- 面试题:有1、2、3、4四个数字,能组成多少个互不相同且一个数字中无重复数字的三位数,并把它们都输出。
- 一个java数学题,给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 一个java数学题,给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 【算法】给定一个数组,除了一个数出现1次之外,其余数都出现3次,输出出现一次的那个数。
- 6-2编写1-100所有整数出现多少次数字9
- 输出一个整数的每一位,计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,编写程序数一下 1到 100 的所有整数中出现多少次数字 9
- 数组中,一个数出现一次,其余的数都出现2次,找出那个出现一次的数
- 面试题:从1, 2, 3, 4, 5五个数字中能找出多少个每位数字都不同的三位数?
- 现有一个n个整数的序列,你要做的就是交换两个数的位置直到整个序列按照升序排列,那么将这个整数序列排好序,需要交换多少次?例如,1,2,3,5,4,我们只需要交换一次,即将5和4交换即可。
- 25匹马,5条赛道,一匹马一个赛道,求决胜1,2,3名至少多少场。
- 25匹马,5条赛道,一匹马一个赛道,求决胜1,2,3名至少多少场
- 笔试题:骰子是一个正方体,每个面有一个数字,初始为左1,右2,前3,后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次);可以向翻转(用R表示向左翻转
- 一步步学算法(算法题解)---5
- 页面置换算法
- ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
- MFC相关函数介绍
- 链表现的栈
- 一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。
- Extjs treeGrid分页实例
- 找出数组中出现奇数次的元素
- jQuery验证控件jquery.validate.js使用说明+中文API
- 新的起点,新的开始
- 宏定义
- 链表的操作
- 黑马程序员------集合框架(No.2)(ArrayList、LinkedList、vector)
- ESAPI之会话安全