Продолжаю знакомить вас с похождениями гениального квартирмейстера. Одно время Сильвер предлагал пленникам играть с ним в рулетку, но по особым правилам. Игрок выбирал четное число игр, в каждой ставил на дублон на красное или черное. Если удавалось выиграть больше половины партий --- остаться в плюсе --- его не грабили, а отпускали с выигрышем. Если нет --- грабили до нитки.
Конечно, шансы сильно в пользу Сильвера! Но сколько партий надо выбирать? Вообще, логика подсказывает, что если шансы против тебя --- лучше играть поменьше. Поставить сто дублонов за раз лучше, чем играть сто партий по одному. В первом случае шанс уйти в плюсе много больше, чем во втором. Но это другая задача...
Играть "минимум" --- две игры --- это неправильное решение. Правильное, как ни странно, другое.
Как играют в рулетку? Шарик катится по специальному колесу, разделенному на 37 равных секторов. Сектора имеют номера от 0 до 36 и покрашены попеременно в красный и черный цвета (кроме зеро). Можно ставить на сектор, на дюжину, на цвет... Ставка оплачивается пропорционально, но без учета зеро. Так, если выиграл сектор, платится 36 ставок, а если дюжина (их три), то две ставки. Цвет оплачивается один к одному.
Ясно, что как ни крути --- а зеро возьмет свое. 36 шансов за, 37 против. Игра --- против игрока и за Сильвера.
Обозначим вероятность выиграть через q < 0.5: в нашем случае q=18/37. Принцип минимального числа игр подсказывает, что лучше всего запросить две игры; в этом случае вероятность выиграть составляет q^2=0.237: ведь надо выиграть обе партии.
Сравним этот результат с серией из четырех игр; чтобы победить, надо выиграть 3 или 4 игры, вероятность этого события q^4+4pq^3 = 0.293, что уже больше, чем для двух игр --- принцип минимума нарушен!
Нарушен он потому, что четыре партии дает возможность проиграть одну партию --- первую, или вторую, или третью, или четвертую. Много вариантов!
Рассчитаем вероятность выигрыша серии из большего числа партий. Надо выиграть больше половины, применяем схему Бернулли. Вероятность выиграть n из m при вероятности одиночной победы q --- равна
C(n,m)q^n p^(m-n), где C --- число сочетаний, оно же биномиальный коэффициент.
В самом деле, в ряду из m партий надо выбрать, без повтора, позиции для побед, причем порядок роли не играет. Каждый расклад имеет одну и ту же вероятность. Число способов выбрать расклад --- это C.
Вообще же, число способов выбрать n предметов из N, если порядок роли не играет и повторяться нельзя, равен C(n,N) = N!/(n!(N-n)!), а факториал --- это произведение всех чисел от 1 до данного: 6! = 1*2*3*4*5*6 и это число перестановок данного количества предметов.
Вот однострочник, который считает вероятности:
perl -E 'sub C{my($N,$n)=@_;my$r=1;for(1..$n){$r*=($N-$_+1)/$_};return$r}$q=18/37;$p=1-$q; $M=shift; for$m(1..$M/2){$S=0;for(0..$m-1){$S+=C(2*$m,$_)*$q**(2*$m-$_)*$p**$_}say 2*$m."=>$S"}' 80
Он же, записанный как скрипт --- внизу заметки. А вот вероятности:
игр: 2 4 6 8 10 12 14 16 18 20 22
вер.: 0.237 0.293 0.319 0.334 0.344 0.351 0.356 0.36 0.363 0.365 0.367
Если поточнее, то почти одинаковые, близкие к максимальным вероятности, равные приблизительно 0.37085, соответствуют числам 36 и 38 игр. Далее вероятность медленно убывает: для 100 она 0.355, для 200 она 0.325, для 1000 --- уже 0.188.
Вот такие чудеса бывают! Спастись, играя две партии --- шансы ниже одного из четырех. А сыграть 36 партий --- уже больше, чем один из трех! Никогда не говори никогда. Иногда лучше и поиграть немного в невыгодную игру...
Вот скрипт, если интересно.
#!/usr/bin/perl
use warnings; # предупреждения
use strict; # самоограничения
use 5.10.0; # новые фишки (say)
my ($q,$p)=(18/37,19/37); # вероятности успеха и поражения
my $M = shift || 100; # число игр -- параметр командной строки
sub C{ # функция для числа сочетаний
my($N,$n) = @_; # параметры: сколько из скольки
my $r=1; # результат
for(1..$n) { # добавляем множители,
$r*=($N-$_+1)/$_ # сразу вверху и внизу.
};
return $r; # возврат значения
}
for my $m(0 .. $M/2) { # для каждого числа партий 2m;
my $S=0; # это будет вероятность победить;
for(0..$m-1) { # надо проиграть менее половины партий;
$S+= C(2*$m,$_)*$q**(2*$m-$_)*$p**$_ # схема Бернулли
}
say 2*$m."=>$S" # сложили все вероятности и доложили.
}
Запускаем так: ./script 80