zoukankan      html  css  js  c++  java
  • (转)一个骰子,6面,1个面是 1, 2个面是2, 3个面是3,问平均掷多少次能使1、2、3都至少出现一次。

    题目:一个骰子,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;
    }
    View Code

    解法二、 面对面试概率题几乎屡试不爽的分叉树递归列方程法。

    这是一个求数学期望的问题,最终是求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

  • 相关阅读:
    DEDECMS里面DEDE函数解析
    dede数据库类使用方法 $dsql
    DEDE数据库语句 DEDESQL命令批量替换 SQL执行语句
    织梦DedeCms网站更换域名后文章图片路径批量修改
    DSP using MATLAB 示例 Example3.12
    DSP using MATLAB 示例 Example3.11
    DSP using MATLAB 示例 Example3.10
    DSP using MATLAB 示例Example3.9
    DSP using MATLAB 示例Example3.8
    DSP using MATLAB 示例Example3.7
  • 原文地址:https://www.cnblogs.com/xianbin7/p/10715137.html
Copyright © 2011-2022 走看看