Michael Kham
июнь 2017.
1135

Игральную кость бросают 10 раз. Какова вероятность что выпавших сумма очков будет больше 50?

Ответить
Ответить
Комментировать
5
Подписаться
4
4 ответа
Поделиться

Задача нетрудно решается и чисто комбинаторно.

Во первых, немного поменяем формулировку задачи. На каждом кубике у нас будут цифры от 0 до 5 и нужно найти вероятность того, что сумма очков будет больше 40. Очевидно, веротяность от такой переформулировки не изменится.

Во вторых, разобьем задачу на подзадачи: найти вероятности того, что сумма очков будет равна 41, 42, ..., 50. Лучше даже, для удобства, сначала найдем количество комбинаций, которые дают каждое значение суммы. Всего комбинаций 6^10 = 60466176, следовательно, вероятность будет равна p = [g(41) + g(42) + ... + g(50)]/60466176.

Как теперь посчитать число комбинаций g(x)? Найдем количество разбиений числа x на 10 сумм. Представить это можно так: пусть у нас в ряд стоят x единичек и мы хотим поставить между ними 9 перегородок. Количество комбинаций будет равно (x + 9, 9), где за (m, n) обозначено количество сочетаний из m по n. Теперь из этих комбинаций нужно исключить те, которые содержат числа большие 5. Это можно сделать через формулу включений-исключений: g(x) = sum (-1)^k (10, k) (x+9 - 6k, 9) (сначала убираем комбинации, которые содержат хотя бы одну цифру большую 5, потом из них убираем комбинации, которые содержат две цифры и так далее).

Cчитаем число комбинаций для разных x:
g(41) = 46420
g(42) = 23760
g(43) = 11340
g(44) = 4995
g(45) = 2002
g(46) = 715
g(47) = 220
g(48) = 55
g(49) = 10
g(50) = 1
g(41) + g(42) + ... + g(50) = 89518.

И окончательный ответ p = 89518/60466176 = 0.148%.

4
Прокомментировать

Видимо задачу требуется решить машинным способом - провести 100 000 экспериментов с подсчетом случаев, когда сумма будет более 50. Поделить количество случаев на количество экспериментов и умножить на 100, чтобы получить в процентах.

Пример на C++:

int count = 0, n = 100000;

for( int i=0; i < n; i++ )
{
       int sum = 0;

       // 10 бросков кубика
       for( int j=0; j < 10; j++ )
             sum += rand() %6 +1;

       if ( sum > 50 )
             count++;
}

double rezult_in_percent = (double)count * 100 / n;


Тесты дают  - 0,151%.

Если же подсчитать количество всех подходящих вариантов (машинным или математическим способом) последовательностей выпадения кубика, то получается 89518 вариантов (общее число вариантов 60 466 176), в итоге имеем: 

89518 / 60 466 176 * 100% = 0,148 %  - немного более точная цифра.

В общем, можно сказать, один шанс из тысячи.


2

У меня на питоне практически такие же результаты import random n=0 v=10000 for x in range(v): a=0 for i in range(10): a+=random.randint(1,6) if a>50: n+=1 print(n/v*100,'%')

0
Ответить
Прокомментировать

Если не расписывать вероятность каждой из сумм от 51 до 60, то можно прикинуть через нормальное распределение.

Количество очков на каждом из  кубиков - случайная величина X_i с математическим ожиданием E(X_i) = 3.5 и дисперсией Var(X_i) = 35/12. Нас интересует сумма N таких случайных величин S_N = X_1 + X_2 + ... + X_N.

Согласно центральное предельной теореме, с ростом N случайная величина (S_N - 3.5*N) / (sqrt(35/12)*sqrt(N)) всё ближе сходится к стандартному нормальному распределению N(0, 1). Отсюда следует, что вероятность того, что S_N превысит заданное число Z равна вероятности того, что случайная величина с распределением N(0,1) превысит значение (Z - 3.5*N)/(sqrt(35/12)*sqrt(N)).

При N=10  и Z=50 получаем, что случайная величина N(0, 1) должна превысить значение (50 - 10*3.5) / (sqrt(35/12)*sqrt(10)) или примерно 2.78. Это может произойти с вероятностью 1 - Ф(2.78), где Ф - функция распределения N(0, 1).

Если воспользоваться функцией NORM.DIST в Экселе, то получится вероятность примерно 0.27%.

2

Прямое компьютерное моделирование даёт примерно 1/675, или 0.15%.

0
Ответить

Я думаю, разница связана с тем, что слишком грубо аппроксимировать значение броска d6 непрерывной случайной величиной. Даже при том, что их 10.

0
Ответить

Конечно, 10 бросков это слишком мало, чтобы точно сойтись к нормальному распределению.  Если в задаче нужен точный ответ - то только писать программу или воспользоваться какой-нибудь системой символьных вычислений. Если нужно просто прикинуть ответ на салфетке - то можно применить ЦПТ.

0
Ответить
Прокомментировать
Читать ещё 1 ответ
Ответить