• 抛硬币直到连续若干次正面


    1. 问题描述

    连续抛一枚硬币,连续出现若干次正面即停止,求所抛总次数的期望。

    2. 求解期望

    记硬币出现正面的概率为$p$,停止条件中连续出现正面的次数为$n$,所抛总次数的期望为$\mu_n$。考虑如下情形:首次出现连续$n-1$次正面,此时所抛总次数的期望为$\mu_{n-1}$。再抛一次,结果有且只有一下两种:

    • A. 出现正面,则满足停止条件,所抛总次数的期望为$\mu_{n-1}+1$
    • B. 出现反面,则立即回到初始状态,相当于从0开始再抛出$n$次连续正面,因此总次数的期望为$\mu_{n-1}+1+\mu_n$。A、B两种情况的概率分别为$p,1-p$。因此有

    $$\begin{equation} \label{munAB} \mu_n=p(\mu_{n-1}+1)+(1-p)(\mu_{n-1}+1+\mu_n) \end{equation}$$

    $$\begin{equation} \label{munDev} \mu_n=\frac{1}{p}(\mu_{n-1}+1) \end{equation}$$

    展开,得通项公式

    $$\begin{equation} \label{} \end{equation}$$

    $$\begin{equation} \label{munGen} \mu_n=\frac{s(1-s^n)}{1-s}, \quad s=\frac{1}{p} \end{equation}$$

    特别的,对于一枚均匀硬币,$p=1/2$,因此$\mu_n=2^{n+1}-2$。

    3. 概率计算

    进一步考虑该问题,尝试求解连续抛出$n$次正面时,所抛总次数为$m$的概率$P(n,m)$。显然,

    $$P(n,m)=0 \quad m<n \\ P(0,m)=\left\{ \begin{array}{P0m} 1 & m=0 \\ 0 & m \ge 1 \end{array} \right. $$

    依然考虑第2节中的两种情况。

    • 对于A,在首次连续出现$n-1$次正面的情况下,再抛一次出现正面,满足停止条件,因此需要前面总共抛了$m-1$次,这一概率为$P(n-1,m-1)$。
    • 对于B,设首次连续出现$n-1$次正面时,已经抛了$k$次,再抛一次出现反面,立即回到初始状态,因此,要满足总次数为$m$,需要在后续的步骤里,恰好用$m-k-1$次抛出$n$次连续正面。因此B情况下的条件概率为$\sum_{k}P(n-1,k)P(n,m-k-1)$。

    由全概率公式,得

    $$\begin{equation} \label{PnmDev} P(n,m)=pP(n-1,m-1)+(1-p)\sum_{k}P(n-1,k)P(n,m-k-1) \end{equation}$$

    实际上,可以由$P(n,m)$的递推式($\ref{PnmDev}$)得出$\mu_n$的递推式($\ref{munDev}$)。依据期望的定义

    $$\mu_n=\sum_{m}mP(n,m) \\ =p\sum_{m}mP(n-1,m-1)+(1-p)\sum_{m}\sum_{k}mP(n-1,k)P(n,m-k-1) $$

    第一项中的求和式可以写成

    $$\sum_{m-1}(m-1+1)P(n-1,m-1)=\sum_{m-1}(m-1)P(n-1,m-1)+\sum_{m-1}P(n-1,m-1) \\ =\mu_{n-1}+1$$

    第二项中的求和式可以写成

    $$\sum_{m}\sum_{k}(k+1+m-k-1)P(n-1,k)P(n,m-k-1) \\ =\sum_k kP(n-1,k)\sum_m P(n,m-k-1) + \sum_k P(n-1,k)\sum_m P(n,m-k-1) + \sum_k \sum_m (m-k-1)P(n-1,k)P(n,m-k-1) \\ = \mu_{n-1}+1+\mu_{n}$$

    可证。

    4. 数值结果

    根据$P(n,m)$的递推式($\ref{PnmDev}$),写出对应的Matlab程序如下。

    N = 6;    % numbers of continuous positive in stop conditions
    M = 3000; % total times when stop condition satisfied
    p = 1/2;  % probability of positive
    
    % Initial Conditions. P is a matrix in size of N+1,M+1 and the element 
    % with index n+1,m+1 stands for P(n,m) because there are no index 0.
    P = zeros(N+1,M+1);
    P(1,1) = 1;
    % Iteration
    for nn = 1:N
        for mm = 1:M
            tmp = 0;
            for kk = nn-1:mm-nn-1
                 tmp = tmp + P(nn-1+1,kk+1)*P(nn+1,mm-kk-1+1);
            end
            P(nn+1,mm+1) = P(nn-1+1,mm-1+1)*p + tmp*(1-p);
        end
    end
    P=P(2:end,2:end)';  % get rid of P(0,m) & P(n,0)
    semilogy(P); % no plot of P(0,m)
    disp(['Check the sum of probability:']);
    disp(sum(P));
    disp(['Compute the expectation of total times:']);
    disp((1:M)*P);

     为了产生直观的印象,对$p=1/2$的情况计算前面几项的结果。计算$N=3,M=16$,作出$P(n,m)$的半对数图如下。

     

    为了验证$\sum_{m}P(n,m)=1$,以及根据此概率求期望$\sum_{m}mP(n,m)$,将$N,M$增大至$6,5000$。程序输出为

    Check the sum of probability:
        1.0000    1.0000    1.0000    1.0000    1.0000    1.0000
    
    Compute the expectation of total times:
        2.0000    6.0000   14.0000   30.0000   62.0000  126.0000

    显然,验证了概率之和为1。另外,容易验证所求出的期望与$\mu_n$的通项公式($\ref{munGen}$)给出的结果是一致的。

    5. 模拟验证

    使用Mote Carlo模拟的方法对这一问题进行仿真,代码如下

    len = 2e8;   % length of random numbers
    N = (1:6)';  % numbers of continuous positive in stop conditions
    
    for pp = 1:length(N)
        res = rand(len,1)>0.5;    % uniform distribution, >0.5 stands for positive
        
        currTotalTime = 0; % total times when stop condition satisfied
        contPosCntr = 0;   % continuous positive appears
        numExper = 0;
        totalTimeRcd = nan(len,1);
        for ii = 1:len
            currTotalTime = currTotalTime+1;
            if (res(ii))
                contPosCntr = contPosCntr+1;
            else
                contPosCntr = 0;
            end
    
            if (contPosCntr>=N(pp))
                numExper = numExper+1;
                totalTimeRcd(numExper) = currTotalTime;
                contPosCntr = 0;
                currTotalTime = 0;
            end
        end
    
        meanT = mean(totalTimeRcd(1:numExper));
    end

    结果如下:

    N=1: 2.000015
    N=2: 6.000249
    N=3: 14.001627
    N=4: 29.985933
    N=5: 62.000438
    N=6: 126.052749

    与理论结果一致。

    6. 附注

    该问题还有其他表现形式,如:

    • 有一个通关游戏,设每关所需的时间固定为1,而通关概率为p。如果某关失败,则必须重新从第一关打起。问通关的平均时间。

    这类问题本质上是一致的,都可以归结为在一系列连续实验中,首次连续出现n次成功的平均时间。

  • 相关阅读:
    第一节 Spring的环境搭建
    002. 配置环境变量
    001. 巧妇难为无米之炊之安装环境
    第七节 认识SpringMVC中的表单标签
    [六字真言]6.吽.SpringMVC中上传大小异常填坑
    [六字真言]4.叭.SpringMVC异常痛苦
    [六字真言]5.咪.功力不足,学习前端JavaScript异常
    [六字真言]3.呢.异常的谎言,你要相信多少次?
    [六字真言]2.嘛.异常定制和通用.md
    vim基本技巧
  • 原文地址:https://www.cnblogs.com/aquastone/p/Prob_CoinContinuousNPositive.html
Copyright © 2020-2023  润新知