zoukankan      html  css  js  c++  java
  • 一道有趣的条件概率题

    题目:

    现在你不断扔一个等概率的六面骰子,直到扔出 (6) 停止。求在骰子只出现过偶数的条件下扔骰子次数的期望。

    题解:

    既然每一次都只能是偶数,也就是只能出现 ({2,4,6}),且出现 (6) 就停,那么答案就是 (3) ?但是答案不是 (3)。答案是 (frac{3}{2})

    问题的关键在于要意识到,扔出奇数后相当于实验马上失败了,而不是这次扔出的奇数无效,重新扔。

    这个问题等价于:假设你不断扔一个等概率的六面骰子,直到扔出(1, 3, 5, 6)停止。求最后一次扔出 (6) 的条件下扔骰子次数的期望。

    考虑最原始的做法,即直接按照定义算。令概率空间 (U)([6]^*) 所有无限长的字母表为 ([6]^*) 的字符串。令 (mathcal{E}) 表示第一个 (6) 出现之前都是偶数这个事件,有:

    $$Pr[mathcal{E}] = frac{1}{6} imes left (1 + frac{1}{3} + left( frac{1}{3} ight)^2 + cdots ight) = frac{1}{4}.$$

    (f(x)) 为字符串 (x) 中第一个 (6) 出现的位置,直接代入定义有:

    $$mathbb{E}X[f(X) | mathcal{E}] = frac{1}{Pr[mathcal{E}]} int{x in mathcal{E}} Pr[X = x] f(x) mathrm{d} x = 4 imes frac{1}{6} imes sum_{i=1} left( frac{1}{3} ight)^{i-1} i = frac{3}{2}.$$

    代码验证:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    int random_roll() {
      int n = rand() % 6 + 1;
      // std::cout << n << '
    ';
      return n;
    }
    double game(int cnt = 0) {
    
      if(cnt == 0) cnt = 1;
      int t = random_roll();
      if(t % 2 == 1) { // 奇
        return 0;
      }
      else if(t == 6) {
        return cnt;
      }
      else {
        return game(++cnt);
      }
    }
    double expect(int n) {
      double fenzi = 0.0, fenmu = 0.0;
      for(int i = 1; i <= n; i++) {
        double t = game(); // 扔出奇数时为 0
        // std::cout << "t = " << t << '
    ';
        if(t == 0) {
          continue;
        }
        else {
          fenzi += t;
          fenmu += 1.0;  // 扔出偶数时加一
        }
      }
     // 假设你不断扔一个等概率的六面骰子,直到扔出6停止。求在骰子只出现过偶数的概率? 1/4 = 0.25
      printf("%.8f
    ", fenmu / n);
      return fenzi / fenmu;
    }
    int main(int argc, char const *argv[]) {
      srand((unsigned int)time(0));
      printf("%.8f
    ", expect(10000)); // 3 / 2 = 1.5
      return 0;
    }
    
    
  • 相关阅读:
    设计模式学习总结状态模式(State Method)
    设计模式学习总结命令模式(Cmmand Pattern)
    Linux常用命令
    设计模式学习总结代理模式(Proxy Method)
    设计模式学习总结模板方法模式(Template Method)
    设计模式学习总结桥接模式(Bridge Pattern)
    设计模式学习总结适配器模式(Adapter Pattern)
    设计模式学习总结迭代器模式(Iterator Pattern)
    设计模式学习总结责任链模式(Chain of Responsibility Method)
    spingboot @Transactional 不回滚
  • 原文地址:https://www.cnblogs.com/LzyRapx/p/9783356.html
Copyright © 2011-2022 走看看