БлогNot. Бросая монетку...

Бросая монетку...

Каково ожидаемое количество испытаний X с двумя исходами, например, с классическими "орлом" и "решкой" при бросании монетки, нужное, чтобы получить N "орлов" подряд?

Наверное, попытаемся не по Байесу, а "по-колхозному" :)

Пусть требуется X испытаний для получения N "орлов" подряд, предполагаем, что монета "идеализированная" и вероятности выпадения "орла" и "решки" равны 1/2.

Если в каком-то K-ом испытании выпадает "решка", значит, мы потратили впустую все предыдущие испытания и нужно сделать ещё X испытаний, чтобы получить нужную серию.

Вероятность этого события составляет 1 / 2K, а общее количество попыток, необходимых для получения серии, равно (X + количество предыдущих пробных попыток).

Cуммирование всех таких вероятностей даст нам искомое количество испытаний для N последовательных "орлов":

X = (1/2)*(X+1) + (1/4)*(X+2) + (1/8)*(X+3)+. . .+(1/2N)*(X+N) + (1/2N)*N

Решая это уравнение относительно X, например, символьной командой Mathcad, получим

решение уравнения в Mathcad
решение уравнения в Mathcad

или X = 2N+1 - 2.

Ну-ка, как часто будет N = 5 "орлов" при X = 62 испытаниях на миллионе проверок?

Вот что вышло при проверке в консоли Studio 2019.

#include <iostream>
#include <random>
#include <cmath>
using namespace std;

int main() {
 int n = 5, x = pow(2, n + 1) - 2;

 random_device rd; 
 default_random_engine generator(rd());
 uniform_int_distribution <int> distribution(0, 1);
 int p, 
     all = 1e6, //всего цепочек
     chains = 0, //найдено нужных цепочек из all
     what = 1, //какие значения считаем
     cnt; //сколько насчитали what подряд в цепочке
 for (int i = 0; i < all; i++) {
  cnt = 0;
  for (int k = 0; k < x; k++) {
   p = distribution(generator);
   if (p == what) {
    cnt++;
    if (cnt == n) chains++;
   }
   else cnt = 0;
  }
 }
 cout.precision(2);
 cout << endl << chains << " from " << all << " (" << ((double)chains/all)*100. << "%)" << endl;
 
 cin.get(); return 0;
}
923181 from 1000000 (92%)

25.06.2020, 21:47 [1305 просмотров]


теги: c++ random числа математика mathcad

К этой статье пока нет комментариев, Ваш будет первым