Как найти вероятность при бросании игрального кубика

Решение задач о бросании игральных костей

найти вероятность, что при бросании игральных костей

Еще одна популярная задача теории вероятностей (наравне с задачей о подбрасывании монет) – задача о подбрасывании игральных костей.

Обычно задача звучит так: бросается одна или несколько игральных костей (обычно 2, реже 3). Необходимо найти вероятность того, что число очков равно 4, или сумма очков равна 10, или произведение числа очков делится на 2, или числа очков отличаются на 3 и так далее.

Основной метод решения подобных задач – использование формулы классической вероятности, который мы и разберем на примерах ниже.

Ознакомившись с методами решения, вы сможете скачать супер-полезный Excel-файл для расчета вероятности при бросании 2 игральных костей (с таблицами и примерами).

Нужна помощь? Решаем теорию вероятностей на отлично

Спасибо за ваши закладки и рекомендации

Одна игральная кость

С одной игральной костью дело обстоит до неприличия просто. Напомню, что вероятность находится по формуле $P=m/n$, где $n$ – число всех равновозможных элементарных исходов эксперимента с подбрасыванием кубика или кости, а $m$ – число тех исходов, которые благоприятствуют событию.

Пример 1. Игральная кость брошена один раз. Какова вероятность, что выпало четное число очков?

Так как игральная кость представляет собой кубик (еще говорят, правильная игральная кость, то есть кубик сбалансированный, так что выпадает на все грани с одинаковой вероятностью), граней у кубика 6 (с числом очков от 1 до 6, обычно обозначаемых точкам), то и общее число исходов в задаче $n=6$. Благоприятствуют событию только такие исходы, когда выпадет грань с 2, 4 или 6 очками (только четные), таких граней $m=3$. Тогда искомая вероятность равна $P=3/6=1/2=0.5$.

Пример 2. Брошен игральный кубик. Найти вероятность выпадения не менее 5 очков.

Рассуждаем также, как и в предыдущем примере. Общее число равновозможных исходов при бросании игрального кубика $n=6$, а условию “выпало не менее 5 очков”, то есть “выпало или 5, или 6 очков” удовлетворяют 2 исхода, $m=2$. Нужная вероятность равна $P=2/6=1/3=0.333$.

Даже не вижу смысла приводить еще примеры, переходим к двум игральным костям, где все интереснее и сложнее.

Две игральные кости

Когда речь идет о задачах с бросанием 2 костей, очень удобно использовать таблицу выпадения очков. По горизонтали отложим число очков, которое выпало на первой кости, по вертикали – число очков, выпавшее на второй кости. Получим такую заготовку (обычно я делаю ее в Excel, файл вы сможете скачать ниже):

таблица очков при бросании 2 игральных костей

А что же в ячейках таблицы, спросите вы? А это зависит от того, какую задачу мы будем решать. Будет задача про сумму очков – запишем туда сумму, про разность – запишем разность и так далее. Приступаем?

Пример 3. Одновременно бросают 2 игральные кости. Найти вероятность того, что в сумме выпадет менее 5 очков.

Сначала разберемся с общим числом исходов эксперимента. когда мы бросали одну кость, все было очевидно, 6 граней – 6 исходов. Здесь костей уже две, поэтому исходы можно представлять как упорядоченные пары чисел вида $(x,y)$, где $x$ – сколько очков выпало на первой кости (от 1 до 6), $y$ – сколько очков выпало на второй кости (от 1 до 6). Очевидно, что всего таких пар чисел будет $n=6cdot 6=36$ (и им соответствуют как раз 36 ячеек в таблице исходов).

Вот и пришло время заполнять таблицу. В каждую ячейку занесем сумму числа очков выпавших на первой и второй кости и получим уже вот такую картину:

таблица суммы очков при бросании 2 игральных костей

Теперь эта таблица поможем нам найти число благоприятствующих событию “в сумме выпадет менее 5 очков” исходов. Для этого подсчитаем число ячеек, в которых значение суммы будет меньше 5 (то есть 2, 3 или 4). Для наглядности закрасим эти ячейки, их будет $m=6$:

таблица суммы очков менее 5 при бросании 2 игральных костей

Тогда вероятность равна: $P=6/36=1/6$.

Пример 4. Брошены две игральные кости. Найти вероятность того, что произведение числа очков делится на 3.

Составляем таблицу произведений очков, выпавших на первой и второй кости. Сразу выделяем в ней те числа, которые кратны 3:

таблица произведения очков при бросании 2 игральных костей

Остается только записать, что общее число исходов $n=36$ (см. предыдущий пример, рассуждения такие же), а число благоприятствующих исходов (число закрашенных ячеек в таблице выше) $m=20$. Тогда вероятность события будет равной $P=20/36=5/9$.

Как видно, и этот тип задач при должной подготовке (разобрать еще пару тройку задач) решается быстро и просто. Сделаем для разнообразия еще одну задачу с другой таблицей (все таблицы можно будет скачать внизу страницы).

Пример 5. Игральную кость бросают дважды. Найти вероятность того, что разность числа очков на первой и второй кости будет от 2 до 5.

Запишем таблицу разностей очков, выделим в ней ячейки, в которых значение разности будет между 2 и 5:

таблица разности очков при бросании 2 игральных костей

Итак, что общее число равновозможных элементарных исходов $n=36$, а число благоприятствующих исходов (число закрашенных ячеек в таблице выше) $m=10$. Тогда вероятность события будет равной $P=10/36=5/18$.

Итак, в случае, когда речь идет о бросании 2 костей и простом событии, нужно построить таблицу, выделить в ней нужные ячейки и поделить их число на 36, это и будет вероятностью. Помимо задач на сумму, произведение и разность числа очков, также встречаются задачи на модуль разности, наименьшее и наибольшее выпавшее число очков (подходящие таблицы вы найдете в файле Excel).

Другие задачи про кости и кубики

Конечно, разобранными выше двумя классами задач про бросание костей дело не ограничивается (просто это наиболее часто встречаемые в задачниках и методичках), существуют и другие. Для разнообразия и понимания примерного способа решения разберем еще три типовых примера: на бросание 3 игральных костей, на условную вероятность и на формулу Бернулли.

Пример 6. Бросают 3 игральные кости. Найдите вероятность того, что в сумме выпало 15 очков.

В случае с 3 игральными костями таблицы составляют уже реже, так как их нужно будет аж 6 штук (а не одна, как выше), обходятся простым перебором нужных комбинаций.

Найдем общее число исходов эксперимента. Исходы можно представлять как упорядоченные тройки чисел вида $(x,y,z)$, где $x$ – сколько очков выпало на первой кости (от 1 до 6), $y$ – сколько очков выпало на второй кости (от 1 до 6), $z$ – сколько очков выпало на третьей кости (от 1 до 6). Очевидно, что всего таких троек чисел будет $n=6cdot 6cdot 6=216$ .

Теперь подберем такие исходы, которые дают в сумме 15 очков.

$$
(3,6,6), (6,3,6), (6,6,3),\
(4,5,6), (4,6,5), (5,4,6), (6,5,4), (5,6,4), (6,4,5),\
(5,5,5).
$$

Получили $m=3+6+1=10$ исходов. Искомая вероятность $P=10/216=0.046$.

Пример 7. Бросают 2 игральные кости. Найти вероятность того, что на первой кости выпало не более 4 очков, при условии, что сумма очков четная.

Наиболее простой способ решения этой задачи – снова воспользоваться таблицей (все будет наглядно), как и ранее. Выписываем таблицу сумм очков и выделяем только ячейки с четными значениями:

таблица сумм очков (четные) при бросании 2 игральных костей

Получаем, что согласно условию эксперимента, всего есть не 36, а $n=18$ исходов (когда сумма очков четная).

Теперь из этих ячееек выберем только те, которые соответствуют событию “на первой кости выпало не более 4 очков” – то есть фактически ячейки в первых 4 строках таблицы (выделены оранжевым), их будет $m=12$.

таблица сумм очков (четные, х до 4) при бросании 2 игральных костей

Искомая вероятность $P=12/18=2/3.$

Эту же задачу можно решить по-другому, используя формулу условной вероятности. Введем события:
А = Сумма числа очков четная
В = На первой кости выпало не более 4 очков
АВ = Сумма числа очков четная и на первой кости выпало не более 4 очков
Тогда формула для искомой вероятности имеет вид:
$$
P(B|A)=frac{P(AB)}{P(A)}.
$$
Находим вероятности. Общее число исходов $n=36$, для события А число благоприятствующих исходов (см. таблицы выше) $m(A)=18$, а для события АВ – $m(AB)=12$. Получаем:
$$
P(A)=frac{m(A)}{n}=frac{18}{36}=frac{1}{2}; quad P(AB)=frac{m(AB)}{n}=frac{12}{36}=frac{1}{3};\
P(B|A)=frac{P(AB)}{P(A)}=frac{1/3}{1/2}=frac{2}{3}.
$$
Ответы совпали.

Пример 8. Игральный кубик брошен 4 раза. Найти вероятность того, что четное число очков выпадет ровно 3 раза.

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

Итак, имеем $n=4$ независимых испытания (броски кубика), вероятность выпадения четного числа очков в одном испытании (при одном броске кубика) равна $p=3/6=1/2=0.5$ (см. выше задачи для одной игральной кости).

Тогда по формуле Бернулли $P=P_n(k)=C_n^k cdot p^k cdot (1-p)^{n-k}$, подставляя $k=3$, найдем вероятность того, что четное число очков появится 3 раза:
$$
P_4(3)=C_4^3 cdot left(1/2right)^3 cdot left(1-1/2right)^1=4 cdot left(1/2right)^4=1/4=0,25.
$$

Приведем еще пример, решаемый аналогичным образом.

Пример 9. Игральную кость бросают 8 раз. Найти вероятность того, что шестёрка появится хотя бы один раз.

Подставляем в формулу Бернулли следующие значения: $n=8$ (число бросков), $p=1/6$ (вероятность появления 6 при одном броске), $kge 1$ (хотя бы один раз появится шестерка). Прежде чем вычислять эту вероятность, напомню, что практически все задачи с формулировкой “хотя бы один…” удобно решать, переходя к противоположному событию “ни одного…”. В нашем примере сначала стоит найти вероятность события “Шестёрка не появится ни разу”, то есть $k=0$:
$$
P_8(0)=C_8^0 cdot left(1/6right)^0 cdot left(1-1/6right)^8=left(5/6right)^8.
$$
Тогда искомая вероятность будет равна
$$
P_8(kge 1)=1-P_8(0)=1-left(5/6right)^8=0.767.
$$

А еще у нас есть онлайн калькулятор для формулы Бернулли

Полезные ссылки

таблица очков при бросании игральных костей

Для наглядного и удобного расчета вероятностей в случае бросания двух игральных костей я сделала
Файл с таблицами для расчета вероятности.

В нем приведены таблицы суммы, произведения, разности, минимума, максимума, модуля разности числа очков.

Вводя число благоприятствующих исходов в специальную ячейку вы получите рассчитанную вероятность (в обычных и десятичных дробях). Файл открывается программой Excel.

Еще по теории вероятностей:

  • Онлайн калькуляторы
  • Онлайн учебник
  • Более 200 примеров
  • Решенные контрольные
  • Формулы и таблицы
  • Сдача тестов
  • Решение на заказ
  • Онлайн помощь

Полезная страница? Сохрани или расскажи друзьям

В решебнике вы найдете более 400 задач о бросании игральных костей и кубиков с полными решениями (вводите часть текста для поиска своей задачи):

Я уже разбирала один из типов специфичных заданий по теории вероятностей (ссылки в конце статьи). Сейчас же я предлагаю вам ознакомиться с самым простым и удобным способом вычисления задач с игральными кубиками. Условие задачи следующее.

Найдите вероятность того что при одновременном бросании двух игральных костей сумма выпавших очков окажется равной 8 или 9.

Первым делом смотрим на то, что в задаче бросают 2 кубика. Далее нас просят вычислить вероятность выпадения определенной суммы. Для подобных используется следующая таблица.

Самый простой способ решения задач на вероятность с игральными кубиками (ОГЭ и ЕГЭ)

В фиолетовых областях таблицы мы пишем возможные исходы каждого отдельного броска (от 1 до 6). А на угловой ячейке указываем действие, которое необходимо выполнить.

Идём по ячейкам по порядку. 1+1=2, 1+2=3, 1+3=4 и так далее заполняем всю таблицу.

Самый простой способ решения задач на вероятность с игральными кубиками (ОГЭ и ЕГЭ)

Так как просят найти вероятность выпадения суммы в 8 или 9 очков, то именно эти ячейки мы отмечаем в таблице.

Самый простой способ решения задач на вероятность с игральными кубиками (ОГЭ и ЕГЭ)

Считаем количество закрашенных ячеек. Их получилось 9. А теперь по правилу вычисления вероятности количество наших закрашенных ячеек делим на общее количество всех ячеек:

9/36=1/4=0,25

Вот и получили ответ равный 0,25.

А как вы обычно решаете подобные задачи? Другие статьи по теории вероятностей, которые вам полезно будет прочитать:

Задача на вероятность (ОГЭ и ЕГЭ), которое кажется сложным, но решается с помощью простой схемы.

Понимание вероятности в математике – это то, что может изменить вашу жизнь.

Время на прочтение
10 мин

Количество просмотров 14K

Введение

На одном из собеседований по приёму на работу попросили за 30 минут написать программу, которая бы решал следующую задачу:

Есть n стандартных игральных костей (6-ти гранных кубиков) со стандартным обозначением всех граней от 1 до 6. Бросаем все n кубики разом. Нужно найти вероятность выпадения числа k, а именно суммы всех значений, выпавших на этих кубиках.

Решение

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

Python

# -*- coding: utf-8 -*-
# import numpy  # <можно_использовать_numpy>

def main():
    c_int_side_dice: int = 6  # сколько граней у кубика
    c_int_dice_number: int = 6  # кол-во кубиков
    c_int_number_to_find: int = 18  # число, вероятность выпадения которого хотим найти
    probability = dice_probability(c_int_dice_number, c_int_number_to_find, c_int_side_dice)
    print(probability)


# собственно поиск вероятности определённого значения
def dice_probability(int_dice_number: int, int_number_to_find: int, c_int_side_dice: int) -> float:
    list_values, list_interm_probability = list_values_and_interm_probabilities(int_dice_number, c_int_side_dice)
    if int_number_to_find < list_values[0] or int_number_to_find > list_values[-1]:
        # задаваемое число выходит за рамки реально возможного диапазона значений
        result_out: float = 0.0
    else:
        for i in range(len(list_values)):
            if list_values[i] == int_number_to_find:
                result_out: float = list_interm_probability[i] / (c_int_side_dice ** int_dice_number)
                break
    return result_out


# возвращает списки/массивы: значения (сумма выпавших всех значений кубиков), сколько раз встречается значение
def list_values_and_interm_probabilities(int_dice_number: int, c_int_side_dice: int) -> tuple[list[int], list[int]]:  # [кол-во кубиков], [сколько граней у кубика]
    list_values = [i for i in range(int_dice_number, c_int_side_dice * int_dice_number + 1)]  # <длина_списков_совпадает!>
    list_interm_probability = [1] * c_int_side_dice  # [1, 1, 1, 1, 1, 1]
    for i in range(int_dice_number - 1):
        list_interm_probability = multiply_by_ones(list_interm_probability, c_int_side_dice) # <длина_списков_совпадает!>
        # list_interm_probability = numpy.convolve(list_interm_probability, [1] * c_int_side_dice)  # <можно_использовать_numpy> и не использовать multiply_by_ones()

    return list_values, list_interm_probability


# "умножение" на единицы
def multiply_by_ones(list_in: list[int], c_int_side_dice: int) -> list[int]:  # [1, 1, 1, 1, 1, 1], 6
    list_dummy: list[list[int]] = []
    for i in range(c_int_side_dice):
        list_dummy.append([0] * i)  # [], [0], [0, 0], [0, 0, 0] ...

    list_for_sum: list[list[int]] = []
    for i in range(c_int_side_dice):
        list_for_sum.append(list_dummy[i] + list_in + list_dummy[c_int_side_dice - i - 1])

    """
    [list_in, 0, 0, 0, 0, 0]
    [0, list_in, 0, 0, 0, 0]
    [0, 0, list_in, 0, 0, 0]
    [0, 0, 0, list_in, 0, 0]
    [0, 0, 0, 0, list_in, 0]
    [0, 0, 0, 0, 0, list_in]
    """

    list_out: list[int] = []
    for i in range(len(list_for_sum[0])):
        sum_out: int = 0
        for j in range(c_int_side_dice):
            sum_out += list_for_sum[j][i]
        list_out.append(sum_out)

    """
    [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
    """
    return list_out

if __name__ == "__main__":
    main()

JavaScript

function main(){
    const c_int_side_dice = 6;  // сколько граней у кубика
    const c_int_dice_number = 6; // кол-во кубиков
    const c_int_number_to_find = 18; // число, вероятность выпадения которого хотим найти
    let probability = dice_probability(c_int_dice_number, c_int_number_to_find, c_int_side_dice);
    console.log(probability);
}

// собственно поиск вероятности определённого значения
function dice_probability(int_dice_number, int_number_to_find, c_int_side_dice){
    let lists_val_and_prob = list_values_and_interm_probabilities(int_dice_number, c_int_side_dice);
    let result_out;
    if (int_number_to_find < lists_val_and_prob[0][0] || int_number_to_find > lists_val_and_prob[0][lists_val_and_prob[0].length - 1]){
        // задаваемое число выходит за рамки реально возможного диапазона значений
        result_out = 0.0;
    } else {
        for (let i = 0; i < lists_val_and_prob[0].length; i++){
            if (lists_val_and_prob[0][i] == int_number_to_find){
                result_out = lists_val_and_prob[1][i] / Math.pow(c_int_side_dice, int_dice_number);
                break;
            }
        }
    }
    return result_out;
}

// возвращает списки/массивы: значения (сумма выпавших всех значений кубиков), сколько раз встречается значение
function list_values_and_interm_probabilities(int_dice_number, c_int_side_dice){  // [кол-во кубиков], [сколько граней у кубика]
    let list_values = new Array();
    let i = 0;
    for (let j = int_dice_number; j <= c_int_side_dice * int_dice_number; j++){
        list_values[i] = j;
        i++;
    }
    console.log(list_values);
    let list_interm_probability = Array(c_int_side_dice).fill(1);  // [1, 1, 1, 1, 1, 1]
    for (let i = 0; i < int_dice_number - 1; i++){
        list_interm_probability = multiply_by_ones(list_interm_probability, c_int_side_dice);
    }
    console.log(list_interm_probability);
    return [list_values, list_interm_probability];
}

// "умножение" на единицы
function multiply_by_ones(list_in, c_int_side_dice){
    let list_dummy = new Array(c_int_side_dice);
    for (let j = 0; j < c_int_side_dice; j++){
        list_dummy[j] = Array(j).fill(0);
    }
    let list_for_sum = new Array(c_int_side_dice);
    for (let j = 0; j < c_int_side_dice; j++){
        list_for_sum[j] = list_dummy[j].concat(list_in, list_dummy[c_int_side_dice - j - 1]);
    }
    // [list_in, 0, 0, 0, 0, 0]
    // [0, list_in, 0, 0, 0, 0]
    // [0, 0, list_in, 0, 0, 0]
    // [0, 0, 0, list_in, 0, 0]
    // [0, 0, 0, 0, list_in, 0]
    // [0, 0, 0, 0, 0, list_in]
    
    let list_out = new Array();
    for (let i = 0; i < list_for_sum[0].length; i++){
        let sum_out = 0;
        for (let j = 0; j < c_int_side_dice; j++){
            sum_out += list_for_sum[j][i];
        }
        list_out[i] = sum_out;
    }
    // [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
    return list_out;
}

main();

VBScript

Option Explicit

Sub main()
    Const c_int_side_dice = 6  'сколько граней у кубика
    Const c_int_dice_number = 3  'кол-во кубиков
    Const c_int_number_to_find = 10  'число, вероятность выпадения которого хотим найти
    Dim probability
    probability = dice_probability(c_int_dice_number, c_int_number_to_find, c_int_side_dice)
    MsgBox probability
End Sub


'собственно поиск вероятности определённого значения
Function dice_probability(int_dice_number, int_number_to_find, c_int_side_dice)
    Dim list_values()
    Dim list_interm_probability()
    list_values_and_interm_probabilities int_dice_number, c_int_side_dice, list_values, list_interm_probability
    Dim result_out
    Dim i
    If int_number_to_find < list_values(0) Or int_number_to_find > list_values(UBound(list_values)) Then
        'задаваемое число выходит за рамки реально возможного диапазона значений
        result_out = 0.0
    Else
        For i = 0 To UBound(list_values)
            If list_values(i) = int_number_to_find Then
                result_out = list_interm_probability(i) / (c_int_side_dice ^ int_dice_number)
            End If
        Next
    End If
    dice_probability = result_out
End Function

'возвращает списки/массивы: значения (сумма выпавших всех значений кубиков), сколько раз встречается значение
Sub list_values_and_interm_probabilities(int_dice_number, c_int_side_dice, list_values, list_interm_probability)  '[кол-во кубиков], [сколько граней у кубика]
    ReDim list_values(int_dice_number * (c_int_side_dice - 1))
    Dim i, j
    i = 0
    For j = int_dice_number To c_int_side_dice * int_dice_number
        list_values(i) = j
        i = i + 1
    Next
    ReDim list_interm_probability(c_int_side_dice - 1)
    For j = 0 To c_int_side_dice - 1
        list_interm_probability(j) = 1
    Next
    For j = 0 To int_dice_number - 2
        multiply_by_ones list_interm_probability, c_int_side_dice
    Next
End Sub

'"умножение" на единицы
Sub multiply_by_ones(list_in, c_int_side_dice)
    Dim list_in_length
    list_in_length = UBound(list_in)
    Dim list_for_sum()
    ReDim list_for_sum(c_int_side_dice - 1, list_in_length + c_int_side_dice - 1)
    Dim i, j, k, n
    For i = 0 To c_int_side_dice - 1
        j = 0
        For n = 0 To c_int_side_dice - 1
            If i = n Then
                For k = 0 To list_in_length
                    list_for_sum(i, j) = list_in(k)
                    j = j + 1
                Next
            Else
                list_for_sum(i, j) = 0
                j = j + 1
            End If
        Next
    Next
    ' [list_in, 0, 0, 0, 0, 0]
    ' [0, list_in, 0, 0, 0, 0]
    ' [0, 0, list_in, 0, 0, 0]
    ' [0, 0, 0, list_in, 0, 0]
    ' [0, 0, 0, 0, list_in, 0]
    ' [0, 0, 0, 0, 0, list_in]
    ' ArrOut_2 list_for_sum
    Erase list_in
    ReDim list_in(list_in_length + c_int_side_dice - 1)
    Dim sum_out
    For j = 0 To list_in_length + c_int_side_dice - 1
        sum_out = 0
        For i = 0 To c_int_side_dice - 1
            sum_out = sum_out + list_for_sum(i, j)
        Next
        list_in(j) = sum_out
    Next
    ' [1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1]
    ' ArrOut_1 list_in
End Sub

'==================================================
'<Additional_MsgBox_For_Arrays>
Sub ArrOut_1(arr_in)
    Dim str_out
    Dim i
    For i = 0 To UBound(arr_in)
        If i = 0 Then
            str_out = arr_in(i)
        Else
            str_out = str_out & " " & arr_in(i)
        End If
    Next
    MsgBox str_out
End Sub

Sub ArrOut_2(arr_in)
    Dim str_out
    Dim i, j
    For i = 0 To UBound(arr_in, 1)
        For j = 0 To UBound(arr_in, 2)
            If i = 0 And j = 0 Then
                str_out = arr_in(i, j)
            ElseIf j = 0 Then
                str_out = str_out & vbNewLine & arr_in(i, j)
            Else
                str_out = str_out & " " & arr_in(i, j)
            End If
        Next
    Next
    MsgBox str_out
End Sub
'</Additional_MsgBox_For_Arrays>
'==================================================

main

Пояснение

Понятно, что копание в чужом коде — дело не благодарное, опишу работу алгоритма для одного конкретного примера.

Картинку можно описать словами как: нахождение делимого вероятности выпадения при помощи многократной свёртки последовательности [1 1 1 1 1 1] на саму себя. Количество операций свёртки совпадает с количеством кубиков минус 1.

Смею предположить, что дочитав до этого момента у многих читателей уже зародятся скептические настроения, однако в свою очередь предложу поверить самостоятельно и в помощь приложу SQL запрос, который считает «в лоб», т.е. генерирует все возможные комбинации выпадения для 3-х кубиков, а потом пересчитывает все выпавшие суммы. В результате отработки скрипта мы получим 2 столбца из самого конца пункта “Этап I. Генерация 2-х списков/массивов: Значения (сумма выпавших костей) И Сколько раз встречается значение”.

SQL запрос – генератор решения “в лоб”

-- заводим значения сторон кубика
WITH step_01_insert (dice) AS (
    SELECT 1 AS dice UNION ALL
    SELECT 2 AS dice UNION ALL
    SELECT 3 AS dice UNION ALL
    SELECT 4 AS dice UNION ALL
    SELECT 5 AS dice UNION ALL
    SELECT 6 AS dice
)
-- генерируем все возможные ситуации для 3-х кубиков
, step_02_spawn (dice_1, dice_2, dice_3, dice_sum) AS (
    SELECT T1.dice AS dice_1
    , T2.dice AS dice_2
    , T3.dice AS dice_3
	, T1.dice + T2.dice + T3.dice AS dice_sum -- Значения (сумма выпавших костей)
    FROM step_01_insert AS T1
    , step_01_insert AS T2
    , step_01_insert AS T3
)
-- считаем в лоб, сколько раз встречается значение
SELECT dice_sum  -- Значения (сумма выпавших костей)
, COUNT(1) AS num  -- Сколько раз встречается значение
FROM step_02_spawn
GROUP BY dice_sum
ORDER BY dice_sum;

dice_sum

num

3

1

4

3

5

6

6

10

7

15

8

21

9

25

10

27

11

27

12

25

13

21

14

15

15

10

16

6

17

3

18

1

Конечно это не достаточно для полноценного доказательства, о котором я расскажу чуть позже, но хоть накал скепсиса, надеюсь, мне удалось сбавить.

Отмечу, что я не претендую на какую-то оригинальность, т.к. подобный алгоритм упоминается в данных статьях: “How to Calculate Multiple Dice Probabilities” Method 2 Recursion, “Как посчитать вероятность определенной комбинации при игре в кости” Метод 2 Рекурсия (перевод).

Пусть вас не смущает хитрое смещение суммирования в формуле Excel – суть от этого никак не меняется. Явно именно раздел «Метод 2» затачивался под Excel реализацию, но запрограммировать данный алгоритм в лоб без изменений именно на каком-либо языке программирования — задача не тривиальная.

Но всё-таки, почему этот алгоритм работает?

Для начала вспомним треугольник Паскаля:

Из всего множества его замечательных свойств я бы хотел заострить внимание на следующем: до строки:

цифры в треугольнике Паскаля повторяют степени числа 11 в степени 1<=k<=4 (натуральное). Но это утверждение верно для десятичной системы счисления, однако, если считать степень числа 11 в шестнадцатеричной системе счисления, то можно продлить совпадения до 1<=k<=5.

Можно задаться вопросом: а на каком калькуляторе можно 11 возводить в степень 5 в шестнадцатеричной системе счисления? Ответ: воспользуемся свойством

Иначе говоря идём итерационно:
121=11 * 11
1331=121 * 11
14641=1331 * 11
15AA51=14641 * 11

Давайте чуть здесь остановимся и вспомним школьную программу, а именно умножение в столбик, с одной лишь оговоркой, что перенос числа из одного разряда в другой (при переполнении разряда) буду делать отдельной операцией, а так же визуально для каждого разряда выделю отдельный столбец.
Пример 1.
14641 * 11 в десятеричной системе счисления.

  1. Заполняем условия.

  2. Записываем результаты умножения каждой единицы разряда.

  3. Суммируем.

  4. Переводим из переполнившихся разрядов в разряды выше.

Проделаем ту же операцию в шестнадцатеричной системе счисления (Шестнадцатеричная система счисления)
Пример 2.

  1. Заполняем условия.

  2. Записываем результаты умножения каждой единицы разряда.

  3. Суммируем.

  4. Записываем полученные числа правильно в шестнадцатеричной системе счисления.

И для закрепления ещё один.
Пример 3.
15AA51 * 11 в шестнадцатеричной системе счисления.

  1. Заполняем условия в шестнадцатеричной системе счисления.

  2. Переводим запись из шестнадцатеричной в десятичную систему счисления для улучшения восприятия (благо мы можем себе это позволить, т.к. визуально отделяем каждый разряд друг от друга).

  3. Записываем результаты умножения каждой единицы разряда.

  4. Суммируем.

  5. Переводим поэтапно из переполнившихся разрядов в разряды выше.

  6. Записываем полученные числа правильно в шестнадцатеричной системе счисления.

Во всех приведённых примерах я бы акцентировал внимание на пунктах «Суммируем» (Пример 1 – п3., Пример 2 – п3., Пример 3 – п4.), которые «цитируют» одну из строк треугольника Паскаля. Если продолжить мысль, то манипуляции с разрядами мешают нормальному воспроизведению всего треугольника. А давайте от них избавимся? Т.е. условно говоря будем считать (да простят меня математики) в «условно бесконечной системе счисления» (вероятно есть и более адекватный термин, но увы, беглый запрос по интернету ничего не дал, что больше доказывает мою лень, а не на отсутствие информации как таковой), т.е. когда перехода из одного разряда в другой при операции сложения не происходит. И это работает:

Тут я не претендую опять же на оригинальность, данный метод есть и им пользуются: как вывести треугольник Паскаля на Python? (см. «Простейшая реализация»)

Аналогия с умножением в столбик двух чисел в очень большой системой счисления, в принципе, имеет право на существование и даёт представление об операции, однако стоит грамотнее назвать её свёрткой последовательности. В данном посте приводится как раз выведение “строк” треугольника Паскаля сверткой: дискретная свёртка или полиномиальное умножение

Вернёмся к кубикам.

Посчитаем в лоб сколько раз встречается сумма костей для всех возможных случаев.

1 кубик (тут всё просто).

2 кубика (идём по классике жанра).

Тут конечно можно посчитать вручную, т.е. просуммировать все единицы в правой таблице, соответствующие полученным значениям в левой таблице (лучше визуализировать):

Однако, заметим смещение “Полученных значений” в левой таблице и преобразуем обе таблицы следующим образом:

После этого в правой таблице нам останется лишь просуммировать строки. Опять же тут немного остановимся на правой табличке, и заметим, что она напоминает уже упомянутое выше умножение столбик в десятичной системе счисления (или свёртку последовательностей).

В итоге получим:

Проделаем аналогичные шаги для 3-х кубиков:

Смещаем:

Акцентируем внимание, что опять же правая таблица напоминает умножение в столбик в «условно бесконечной системе счисления» (или свёртку последовательностей):

Выводим результат:

Описанные операции итерационно можно продолжать сколь угодно долго.

Данный алгоритм походит для любого числа одинаковых игровых кубиков с любым количеством граней, у которых числа на гранях входят в арифметическую последовательность. И его при некотором желании можно даже модифицировать и для решения задач, когда речь идёт не об однотипных кубиках а с разным количеством граней (правда я ума не приложу кому это может понадобиться).

Итого, выводы

  1. Задачи на поиск вероятности выпадения числа k у n игральных кубиков попадаются на собеседованиях.

  2. В данной статье рассмотрен довольно элегантный алгоритм по решению подобных задач, указанных выше. В принципе можно решать подобные задачи просто на листе бумаге.

О чём стоит упомянуть
Представленный алгоритм не является самым оптимальным. Например для 1000 кубиков (не знаю кому это будет нужно, но вдруг) придётся просчитать для всех элементов последовательности 1000 раз. Но можно ещё поиграться с умножением в столбик в «условно …» и снизить вычислительную сложность алгоритма с O(n^2) (“Оценка сложности алгоритмов, или Что такое О(log n)”).

Updated: 23.08.2022

Один из популярных способов изучения вероятности – бросать кости. На стандартном кубике шесть сторон напечатаны с маленькими точками с номерами 1, 2, 3, 4, 5 и 6. Если кубик правильный (и мы предполагаем, что все они), то каждый из этих исходов одинаково вероятен. Поскольку существует шесть возможных исходов, вероятность получить любую сторону кубика составляет 1/6. Вероятность выпадения 1 равна 1/6, вероятность выпадения 2 равна 1/6 и так далее. Но что будет, если мы добавим еще один кубик? Каковы вероятности броска двух кубиков?

Содержание

  1. Вероятность броска кубика
  2. Таблица вероятностей бросания двух кубиков
  3. Три или более кубика
  4. Примеры задач

Вероятность броска кубика

Чтобы правильно определить вероятность броска кубика, мы необходимо знать две вещи:

  • Размер пространства выборки или набор общих возможных результатов
  • Как часто происходит событие.

Вероятно, событие представляет собой определенное подмножество выборочного пространства. Например, когда брошен только один кубик, как в приведенном выше примере, пробел равен всем значениям на кубике или набору (1, 2, 3, 4, 5, 6). Поскольку кубик правильный, каждое число в наборе встречается только один раз. Другими словами, частота каждого числа равна 1. Чтобы определить вероятность выпадения любого из чисел на кубике, мы делим частоту события (1) на размер области выборки (6), что дает вероятность 1/6.

Бросок двух справедливых игральных костей более чем вдвое увеличивает сложность вычисления вероятностей. Это связано с тем, что прокатка одной матрицы не зависит от прокатки второй. Один бросок не влияет на другой. Имея дело с независимыми событиями, мы используем правило умножения. Использование древовидной диаграммы показывает, что есть 6 x 6 = 36 возможных исходов от броска двух кубиков.

Предположим, что первый бросок кубика выпадает как a 1. Другой бросок кубика может быть 1, 2, 3, 4, 5 или 6. Теперь предположим, что первый кубик – 2. Другой бросок кубика снова может быть 1, 2, 3, 4, 5. , или 6. Мы уже нашли 12 возможных результатов и еще не исчерпали все возможности первого кубика.

Таблица вероятностей бросания двух кубиков

Возможные результаты броска двух кубиков представлены в таблице ниже. Обратите внимание, что общее количество возможных результатов равно пространству выборки первого кубика (6), умноженному на пространство выборки второго кубика (6), которое равно 36..

1 2 3 4 5
(1, 1) (1, 2) (1, 3) (1, 4) (1, 5) (1, 6)
2 (2, 1) (2, 2) (2, 3) (2, 4) (2, 5) (2, 6)
3 (3, 1) (3, 2) (3, 3) (3, 4) (3, 5) (3, 6 )
4 (4, 1) (4, 2) (4, 3) (4, 4) (4, 5) (4, 6)
5 (5, 1) (5, 2) (5, 3 ) (5, 4) (5, 5) (5, 6)
6 (6, 1) (6, 2) (6, 3) (6, 4) (6, 5) (6, 6)

Три или более кубика

То же Принцип применим, если мы работаем над задачами с тремя игральными костями. Мы умножаем и видим, что есть 6 x 6 x 6 = 216 возможных результатов. Поскольку писать повторное умножение становится громоздко, мы можем использовать экспоненты, чтобы упростить работу. Для двух кубиков существует 6 2 возможных исходов. Для трех кубиков существует 6 3 возможных исходов. В общем, если мы бросаем n кубиков, то есть всего 6 n возможных результатов.

Примеры задач

Обладая этими знаниями, мы можем решать все виды вероятностных задач:

1. Бросаются две шестигранные кости. Какова вероятность того, что сумма двух кубиков равна семи?

Самый простой способ решить эту проблему – обратиться к таблице выше. Вы заметите, что в каждом ряду есть один бросок кубиков, где сумма двух кубиков равна семи. Поскольку рядов шесть, есть шесть возможных исходов, в которых сумма двух кубиков равна семи. Общее количество возможных исходов остается 36. Мы снова находим вероятность, разделив частоту событий (6) на размер пространства выборки (36), что дает вероятность 1/6.

2. Бросаются две шестигранные кости. Какова вероятность того, что сумма двух кубиков равна трем?

В предыдущей задаче вы могли заметить, что ячейки, в которых сумма двух кости равны семи образуют диагональ. То же самое и здесь, за исключением того, что в этом случае есть только две ячейки, в которых сумма кубиков равна трем. Это потому, что есть только два способа добиться такого результата.. Вы должны выбросить 1 и 2 или вы должны выбросить 2 и 1. Комбинации для выпадения суммы семи намного больше (1 и 6, 2 и 5, 3 и 4 и так далее). Чтобы найти вероятность того, что сумма двух кубиков равна трем, мы можем разделить частоту события (2) на размер пространства выборки (36), что даст вероятность 1/18.

3. Бросаются две шестигранные кости. Какова вероятность того, что числа на кубиках разные?

Опять же, мы можем легко решить эту проблему, посмотрев на таблицу выше. Вы заметите, что клетки, в которых числа на кубиках совпадают, образуют диагональ. Их всего шесть, и как только мы вычеркнем их, у нас будут оставшиеся ячейки, в которых числа на кубиках разные. Мы можем взять количество комбинаций (30) и разделить его на размер пространства выборки (36), что даст вероятность 5/6.

  • Вероятности броска трех кубиков

  • Определение и примеры примерного пространства в статистике

  • Вероятность получения большого стрита в ятце в одиночном броске

  • Вероятности и кости лжеца

  • Вероятность фулл-хауса в Яцзи за один рулон

  • Вероятность Сесть в тюрьму в монополии

  • Что такое условная вероятность?

  • Вероятности в игровой монополии

  • Значение взаимоисключающего в статистике

  • Вероятность объединения 3 или более наборов

  • Равномерно по вероятности

  • Правило умножения для независимых событий

  • Распределение вероятностей в статистике

  • Как рассчитать вероятность игры в нарды

  • Что такое равномерное распределение?

символ>

До сегодняшнего дня почти всё, о чем мы говорили, было детерминированным, и на прошлой неделе мы внимательно изучили транзитивную механику, разобрав её настолько подробно, насколько детально я могу объяснить. Но до сих пор мы не обращали внимание на другие аспекты многих игр, а именно на недетерминированные моменты — другими словами, случайность.

Понимание природы случайности очень важно для геймдизайнеров. Мы создаем системы, которые влияют на опыт пользователя в той или иной игре, поэтому нам нужно знать, как эти системы работают. Если в системе есть случайность, нужно понимать природу этой случайности и знать, как её изменить, чтобы получить нужные нам результаты.

Игральные кости

Давайте начнем с чего-то простого — с бросания игральных костей. Когда большинство людей думает об игральных костях, они представляют себе шестигранный кубик, известный как d6. Но большинство геймеров видели множество других игральных костей: четырёхгранные (d4), восьмигранные (d8), двенадцатигранные (d12), двадцатигранные (d20). Если вы настоящий гик, у вас, может быть, где-то найдутся 30-гранные или 100-гранные кости.

Если вы не знакомы с данной терминологией, d означает игральную кость, а число, стоящее после него, — количество её граней. Если число стоит перед d, то оно обозначает количество игральных костей при бросании. Например, в игре «Монополия» вы бросаете 2d6.

Итак, в данном случае словосочетание «игральная кость» — условное обозначение. Существует огромное количество других генераторов случайных чисел, которые не выглядят как фигуры из пластика, но выполняют ту же функцию — генерируют случайное число от 1 до n. Обычную монету можно также представить в виде двугранной игральной кости d2.

Я видел два дизайна семигранной кости: одна из них выглядела как игральный кубик, а вторая была больше похожа на семигранный деревянный карандаш. Четырехгранный дрейдл, также известный как титотум, — аналог четырехгранной кости. Игровое поле с крутящейся стрелкой в игре Chutes & Ladders, где результат может быть от 1 до 6, соответствует шестигранной кости.

Генератор случайных чисел в компьютере может создать любое число от 1 до 19, если дизайнер задаст такую команду, хотя в компьютере нет 19-гранной игральной кости (вообще, о вероятности выпадения чисел на компьютере я буду говорить подробнее на следующей неделе). Все эти предметы выглядят по-разному, но на самом деле они равнозначны: у вас есть равные шансы на каждый из нескольких возможных исходов.

У игральных костей есть некоторые интересные свойства, о которых нам нужно знать. Во-первых, вероятность выпадения любой из граней одинакова (я предполагаю, что вы бросаете игральную кость правильной геометрической формы). Если вы хотите узнать среднее значение броска (тем, кто увлекается теорией вероятностей, оно известно как математическое ожидание), суммируйте значения на всех гранях и разделите это число на количество граней.

Сумма значений всех граней для стандартного шестигранного кубика равна 1 + 2 + 3 + 4 + 5 + 6 = 21. Делим 21 на количество граней и получаем среднее значение броска: 21 / 6 = 3,5. Это особый случай, потому что мы предполагаем, что все исходы равновероятны.

Что если у вас особенные игральные кости? Например, я видел игру с шестигранной игральной костью со специальными наклейками на гранях: 1, 1, 1, 2, 2, 3, поэтому она ведет себя как странная трехгранная игральная кость, с которой больше шансов, что выпадет число 1, чем 2, и скорее выпадет 2, чем 3. Какое среднее значение броска для этой кости? Итак, 1 + 1 + 1 + 2 + 2 + 3 = 10, делим на 6 — получается 5 / 3, или примерно 1,66. Таким образом, если у вас особенная игральная кость и игроки будут бросать три кости, а затем суммировать результаты — вы знаете, что сумма их броска будет равна примерно 5, и можете балансировать игру, основываясь на этом предположении.

Игральные кости и независимость

Как я уже говорил, мы исходим из предположения, что выпадение каждой грани равновероятно. Здесь неважно, сколько игральных костей вы бросаете. Каждый бросок кости независим — это означает, что предыдущие броски не влияют на результаты последующих. При достаточном количестве испытаний вы обязательно заметите серию чисел — например, выпадение в основном более крупных или меньших значений — или другие особенности, но это не значит, что игральные кости «горячие» или «холодные». Позже мы об этом поговорим.

Если вы бросаете стандартный шестигранный кубик, и два раза подряд выпадает число 6 — вероятность того, что результатом следующего броска будет 6, точно так же равна 1 / 6. Вероятность не повышается от того, что кубик «нагрелся». В то же время вероятность не понижается: неверно рассуждать, что уже два раза подряд выпадало число 6, а значит, теперь должна выпасть другая грань.

Конечно, если вы бросаете кубик двадцать раз и каждый раз выпадает число 6 — шанс того, что в двадцать первый раз выпадет 6, довольно высок: возможно, у вас просто неправильный кубик. Но если кубик правильный, вероятность выпадения каждой из граней одинакова, независимо от результатов других бросков. Вы можете также представить себе, что мы каждый раз заменяем игральную кость: если два раза подряд выпало число 6, уберите «горячий» кубик из игры и замените его на новый. Прошу прощения, если кто-то из вас уже знал об этом, но мне необходимо было это прояснить, прежде чем двигаться дальше.

Как сделать выпадение игральных костей более или менее случайным

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

Например, в случае 1d6 + 4 (то есть если вы один раз бросаете стандартную шестигранную игральную кость и прибавляете к результату 4), средним значением будет число от 5 до 10. Если вы бросаете 5d2, средним значением также будет число от 5 до 10. Результатом бросания 5d2 будут в основном числа 7 и 8, реже другие значения. Та же серия, даже то же среднее значение (в обоих случаях 7,5), но природа случайности разная.

Подождите минутку. Разве я только что не говорил, что игральные кости не «нагреваются» и не «охлаждаются»? А теперь я говорю: если бросать много игральных костей, результаты бросков приближаются к среднему значению. Почему?

Позвольте мне объяснить. Если вы бросаете одну игральную кость, вероятность выпадения каждой из граней одинакова. Это значит, что, если вы бросаете много игральных костей на протяжении некоторого времени, каждая грань будет выпадать примерно одинаковое количество раз. Чем больше костей вы бросаете, тем больше в совокупности результат будет приближаться к среднему значению.

Это не потому, что выпавшее число «заставляет» выпасть другое число, которое ещё не выпадало. А потому, что небольшая серия выпадения числа 6 (или 20, или другого числа) в итоге не так уж повлияет на результат, если вы бросите игральные кости ещё десять тысяч раз и в основном будет выпадать среднее значение. Сейчас у вас выпадет несколько больших чисел, а позже несколько маленьких — и со временем они приблизятся к среднему значению.

Это происходит не потому, что предыдущие броски влияют на игральные кости (серьёзно, игральная кость сделана из пластика, у неё нет мозгов, чтобы подумать: «Ой, давно не выпадало 2»), а потому, что так обычно происходит при большом количестве бросков игральных костей.

Таким образом, произвести расчеты для одного случайного броска игральной кости довольно несложно — по крайней мере, вычислить среднее значение броска. Есть также способы вычислить, «насколько случайно» что-либо происходит, и сказать, что результаты бросания 1d6 + 4 будут «более случайными», чем 5d2. Для 5d2 выпавшие результаты будут распределяться более равномерно. Для этого нужно вычислить среднеквадратическое отклонение: чем больше будет значение, тем более случайными окажутся результаты. Мне бы не хотелось сегодня приводить столько расчётов, эту тему я объясню позже.

Единственное, что я попрошу вас запомнить: как правило, чем меньше игральных костей вы бросаете, тем больше случайность. И ещё чем больше граней у игральной кости, тем больше случайность, так как больше возможных вариантов значения.

Как вычислить вероятность при помощи подсчёта

Возможно, у вас возник вопрос: как мы можем вычислить точную вероятность выпадения определённого результата? На самом деле, это довольно важно для многих игр: если вы изначально бросаете игральную кость — скорее всего, есть какой-то оптимальный результат. Отвечаю: нам нужно посчитать два значения. Во-первых, общее число исходов при бросании игральной кости, а во вторых, число благоприятных исходов. Разделив второе значение на первое, вы получите нужную вероятность. Чтобы получить процентное соотношение, умножьте полученный результат на 100.

Примеры

Вот очень простой пример. Вы хотите, чтобы выпало число 4 или выше, и один раз бросаете шестигранную игральную кость. Максимальное число исходов составляет 6 (1, 2, 3, 4, 5, 6). Из них 3 исхода (4, 5, 6) являются благоприятными. Значит, чтобы посчитать вероятность, делим 3 на 6 и получаем 0,5 или 50%.

Вот пример немного сложнее. Вы хотите, чтобы при бросании 2d6 выпало чётное число. Максимальное число исходов — 36 (по 6 вариантов для каждой игральной кости, одна кость не влияет на другую, поэтому умножаем 6 на 6 и получаем 36). Сложность вопроса данного типа заключается в том, что легко посчитать дважды. Например, при бросании 2к6 есть два варианта результата 3: 1+2 и 2+1. Они выглядят одинаково, но разница в том, какое число отображено на первой игральной кости и какое — на второй.

Вы также можете представить себе, что игральные кости разных цветов: так, например, в данном случае одна игральная кость красного цвета, другая синего. Затем посчитайте количество вариантов выпадения чётного числа:

  • 2 (1+1);
  • 4 (1+3);
  • 4 (2+2);
  • 4 (3+1);
  • 6 (1+5);
  • 6 (2+4);
  • 6 (3+3);
  • 6 (4+2);
  • 6 (5+1);
  • 8 (2+6);
  • 8 (3+5);
  • 8 (4+4);
  • 8 (5+3);
  • 8 (6+2);
  • 10 (4+6);
  • 10 (5+5);
  • 10 (6+4);
  • 12 (6+6).

Оказывается, что есть 18 вариантов для благоприятного исхода из 36 — как и в предыдущем случае, вероятность равна 0,5 или 50%. Возможно, неожиданно, но довольно точно.

Моделирование методом Монте-Карло

Что если для такого подсчёта у вас слишком много игральных костей? Например, вы хотите знать, какова вероятность того, что выпадет сумма, равная 15 или больше, при броске 8d6. Для восьми игральных костей существует огромное множество разных результатов, и их подсчёт вручную займёт очень много времени — даже если мы найдем какое-нибудь хорошее решение, чтобы сгруппировать разные серии бросков игральных костей.

В данном случае проще всего не считать вручную, а воспользоваться компьютером. Есть два способа подсчёта вероятности на компьютере. С помощью первого способа можно получить точный ответ, но он включает в себя немного программирования или скриптинга. Компьютер будет просматривать каждую возможность, оценивать и подсчитывать общее количество итераций и количество итераций, которые соответствуют нужному результату, и затем предоставит ответы. Ваш код может выглядеть примерно следующим образом:

Если вы не разбираетесь в программировании и вам нужен не точный, а примерный ответ, вы можете смоделировать данную ситуацию в Excel, где вы подбросите 8d6 несколько тысяч раз и получите ответ. Чтобы бросить 1d6 в Excel, используйте формулу
=FLOOR(RAND()*6)+1.

Существует название для ситуации, когда вы не знаете ответа и просто много раз пробуете — моделирование методом Монте-Карло. Это отличное решение, к которому можно прибегнуть, когда посчитать вероятность слишком сложно. Самое замечательное, что в данном случае нам не нужно понимать, как происходит математический расчёт, и мы знаем, что ответ будет «довольно хорошим», потому что, как мы уже знаем, чем больше бросков, тем больше результат приближается к среднему значению.

Как объединить независимые испытания

Если вы спросите о нескольких повторяющихся, но независимых испытаниях, то исход одного броска не влияет на исходы других бросков. Есть ещё одно более простое объяснение данной ситуации.

Как различить что-либо зависимое и независимое? В принципе, если вы можете выделить каждый бросок (или серию бросков) игральной кости как отдельное событие, то он независим. Например, мы бросаем 8к6 и хотим, чтобы выпала сумма, равная 15. Данное событие нельзя разделить на несколько независимых бросков игральных костей. Чтобы получить результат, вы вычисляете сумму всех значений, поэтому результат, выпавший на одной игральной кости, влияет на результаты, которые должны выпасть на других.

Вот пример независимых бросков: перед вами игра с игральными костями, и вы несколько раз бросаете шестигранные кубики. Чтобы вы остались в игре, при первом броске должно выпасть значение 2 или выше. Для второго броска — 3 или выше. Для третьего требуется 4 или выше, для четвертого — 5 или выше, для пятого — 6. Если все пять бросков успешные, вы выиграли. В данном случае все броски независимы. Да, если один бросок будет неудачным, он повлияет на результат всей игры, но один бросок не влияет на другой. Например, если ваш второй бросок игральных костей очень удачный, это никак не означает, что следующие броски будут так же хороши. Поэтому мы можем рассматривать вероятность каждого броска игральных костей отдельно.

Если у вас независимые вероятности и вы хотите знать, какова вероятность того, что все события наступят, вы определяете каждую индивидуальную вероятность и перемножаете их. Другой способ: если вы, чтобы описать несколько условий, используете союз «и» (например, какова вероятность наступления какого-то случайного события и какого-то другого независимого случайного события?) — посчитайте отдельные вероятности и перемножьте их.

Неважно, что вы считаете, — никогда не суммируйте независимые вероятности. Это распространённая ошибка. Чтобы понять, почему это неправильно, представьте себе ситуацию, когда вы подбрасываете монету и хотите знать, какова вероятность того, что два раза подряд выпадет «орёл». Вероятность выпадения каждой из сторон — 50%. Если вы суммируете эти две вероятности, вы получите 100% шанс того, что выпадет «орёл», но мы знаем, что это неправда, ведь два раза подряд могла бы выпасть «решка». Если вместо этого вы перемножите две вероятности, у вас получится 50% * 50% = 25% — это правильный ответ для расчёта вероятности выпадения «орла» два раза подряд.

Пример

Давайте вернёмся к игре с шестигранной игральной костью, где нужно, чтобы сначала выпало число больше чем 2, затем больше чем 3 — и так далее до 6. Каковы шансы того, что в данной серии из пяти бросков все исходы будут благоприятными?

Как говорилось выше, это независимые испытания, поэтому мы подсчитываем вероятность для каждого отдельного броска, а затем перемножаем их. Вероятность того, что исход первого броска будет благоприятным, равна 5/6. Второго — 4/6. Третьего — 3/6. Четвертого — 2/6, пятого — 1/6. Умножаем все результаты друг на друга и получаем примерно 1,5%. Победы в данной игре случаются довольно редко, поэтому, если вы добавите этот элемент в вашу игру, вам нужен будет довольно большой джекпот.

Отрицание

Вот ещё одна полезная подсказка: иногда сложно посчитать вероятность того, что событие наступит, зато легче определить шансы, что событие не наступит.
Например, предположим, у нас есть ещё одна игра: вы бросаете 6d6 и выигрываете, если хотя бы один раз выпадет 6. Какова вероятность выигрыша?

В данном случае нужно учесть много вариантов. Возможно, выпадет одно число 6, то есть на одной из игральных костей выпадет число 6, а на других — числа от 1 до 5, тогда есть 6 вариантов того, на какой из игральных костей будет 6. Вам может выпасть число 6 на двух игральных костях, или на трёх, или на ещё большем количестве, и каждый раз нужно будет делать отдельный подсчёт, поэтому здесь легко запутаться.

Но давайте посмотрим на задачу с другой стороны. Вы проиграете, если ни на одной из игральных костей не выпадет число 6. В данном случае у нас есть 6 независимых испытаний. Вероятность того, что на каждой из игральных костей выпадет число, не равное 6, составляет 5/6. Перемножьте их — и получите примерно 33%. Таким образом, вероятность проигрыша составляет один к трём. Следовательно, вероятность выигрыша — 67% (или два к трём).

Из этого примера очевидно: если вы считаете вероятность того, что событие не наступит, нужно вычесть результат из 100%. Если вероятность выиграть равна 67%, то вероятность проиграть — 100% минус 67%, или 33%, и наоборот. Если сложно посчитать одну вероятность, но легко посчитать противоположную, посчитайте противоположную, а затем вычтите это число из 100%.

Соединяем условия для одного независимого испытания

Чуть выше я говорил, что вы никогда не должны суммировать вероятности при независимых испытаниях. Есть ли какие-либо случаи, когда суммировать вероятности можно? Да, в одной особенной ситуации.

Если вы хотите вычислить вероятность для нескольких не связанных между собой благоприятных исходов одного испытания, суммируйте вероятности каждого благоприятного исхода. Например, вероятность выпадения чисел 4, 5 или 6 на 1d6 равна сумме вероятности выпадения числа 4, вероятности выпадения числа 5 и вероятности выпадения числа 6. Данную ситуацию можно представить так: если вы в вопросе о вероятности используете союз «или» (например, какова вероятность того или иного исхода одного случайного события?) — подсчитайте отдельные вероятности и просуммируйте их.

Обратите внимание: когда вы вычислите все возможные исходы игры, сумма вероятностей их наступления должна быть равна 100%, иначе ваш расчёт был сделан неверно. Это хороший способ перепроверить свои вычисления. Например, вы проанализировали вероятность выпадения всех комбинаций в покере. Если вы просуммируете все полученные результаты, у вас должно получиться ровно 100% (или, по крайней мере, значение довольно близкое к 100%: если вы пользуетесь калькулятором, может возникнуть маленькая ошибка при округлении, но если суммируете точные числа вручную, всё должно сойтись). Если сумма не сходится, значит, вы, скорее всего, не учли какие-то комбинации или посчитали вероятности некоторых комбинаций неверно, и вычисления нужно перепроверить.

Неравные вероятности

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

Например, в одном из дополнений карточной игры Nuclear War есть игровое поле со стрелкой, от которого зависит результат запуска ракеты. Чаще всего она наносит обычный урон, более сильный или более слабый, но иногда урон усиливается в два или три раза, или ракета взрывается на стартовой площадке и причиняет вам вред, или происходит какое-то другое событие. В отличие от игрового поля со стрелкой в Chutes & Ladders или A Game of Life результаты игрового поля в Nuclear War неравновероятны. Некоторые секции игрового поля больше по размеру и стрелка останавливается на них гораздо чаще, в то время как другие секции очень маленькие и стрелка останавливается на них редко.

Итак, на первый взгляд, кость выглядит примерно следующим образом: 1, 1, 1, 2, 2, 3 — мы о ней уже говорили, она представляет из себя что-то вроде утяжелённой 1d3. Следовательно, нам нужно разделить все эти секции на равные части, найти самую маленькую единицу измерения, делитель, которому всё кратно, и затем представить ситуацию в виде d522 (или какой-то другой), где множество граней игральной кости будет отображать ту же ситуацию, но с большим количеством исходов. Это один из способов решения задачи, и он технически выполним, но есть более простой вариант.

Давайте вернёмся к нашей стандартной шестигранной игральной кости. Мы говорили, что для вычисления среднего значения броска для нормальной игральной кости нужно суммировать значения на всех гранях и разделить их на количество граней, но как именно происходит расчёт? Можно выразить это иначе. Для шестигранной игральной кости вероятность выпадения каждой грани равна точно 1/6. Теперь мы умножаем исход каждой грани на вероятность этого исхода (в данном случае 1/6 для каждой грани), а затем суммируем полученные значения. Таким образом, суммируя (1 * 1/6) + (2 * 1/6) + (3 * 1/6) + (4 * 1/6) + (5 * 1/6) + (6 * 1/6), получаем тот же результат (3,5), как и при расчёте выше. На самом деле мы считаем так каждый раз: умножаем каждый исход на вероятность этого исхода.

Можем ли мы произвести такой же расчёт для стрелки на игровом поле в игре Nuclear War? Конечно, можем. И если мы суммируем все найденные результаты, то получим среднее значение. Всё, что нам нужно сделать, — вычислить вероятность каждого исхода для стрелки на игровом поле и умножить на значение исхода.

Другой пример

Упомянутый метод расчёта среднего значения также подходит, если результаты равновероятны, но имеют разные преимущества — например, если вы бросаете игральную кость и выигрываете больше при выпадении одних граней, чем других. Например, возьмём игру, которая бывает в казино: вы делаете ставку и бросаете 2d6. Если выпадут три числа с наименьшим значением (2, 3, 4) или четыре числа с высоким значением (9, 10, 11, 12) — вы выиграете сумму, равную вашей ставке. Особенными являются числа с самым низким и самым высоким значением: если выпадет 2 или 12, вы выиграете в два раза больше, чем ваша ставка. Если выпадет любое другое число (5, 6, 7, 8), вы проиграете вашу ставку. Это довольно простая игра. Но какова вероятность выигрыша?

Начнем с того, что посчитаем, сколько раз вы можете выиграть. Максимальное число исходов при бросании 2d6 составляет 36. Каково количество благоприятных исходов?

  • Есть 1 вариант, что выпадет 2, и 1 вариант, что выпадет 12.
  • Есть 2 варианта, что выпадет 3 и 2 варианта, что выпадет 11.
  • Есть 3 варианта, что выпадет 4, и 3 варианта, что выпадет 10.
  • Есть 4 варианта, что выпадет 9.

Просуммировав все варианты, получаем 16 благоприятных исходов из 36.
Таким образом, при нормальных условиях вы выиграете 16 раз из 36 возможных — вероятность выигрыша немного меньше, чем 50%.

Но в двух случаях из этих шестнадцати вы выиграете в два раза больше — это как выиграть дважды. Если вы будете играть в эту игру 36 раз, каждый раз делая ставку в $1, и каждый из всех возможных исходов выпадет один раз, вы выиграете в сумме $18 (на самом деле вы выиграете 16 раз, но два из них будут считаться как два выигрыша). Если вы играете 36 раз и выигрываете $18, не значит ли это, что вероятности равные?

Не торопитесь. Если вы посчитаете количество раз, когда можете проиграть, то у вас получится 20, а не 18. Если вы будете играть 36 раз, каждый раз делая ставку в $1, вы выиграете общую сумму в $18 при выпадении всех благоприятных исходов. Но вы проиграете общую сумму в $20 при выпадении всех 20 неблагоприятных исходов. В результате вы будете немного отставать: вы теряете в среднем $2 нетто за каждые 36 игр (вы также можете сказать, что теряете в среднем 1/18 доллара в день). Теперь вы видите, как легко в данном случае допустить ошибку и посчитать вероятность неправильно.

Перестановка

До сих пор мы предполагали, что порядок расположения чисел при бросании игральных костей не имеет значения. Выпадение 2 + 4 — это то же самое, что и выпадение 4 + 2. В большинстве случаев мы вручную подсчитываем число благоприятных исходов, но иногда данный способ непрактичен и лучше использовать математическую формулу.

Пример данной ситуации из игры с игральными костями Farkle. Для каждого нового раунда вы бросаете 6d6. Если вам повезет и выпадут все возможные результаты 1-2-3-4-5-6 (стрейт), вы получите большой бонус. Какова вероятность того, что это произойдет? В данном случае есть множество вариантов выпадения данной комбинации.

Решение выглядит следующим образом: на одной из игральных костей (и только на одной) должно выпасть число 1. Сколько вариантов выпадения числа 1 на одной игральной кости? Вариантов 6, так как есть 6 игральных костей, и на любой из них может выпасть число 1. Соответственно, возьмите одну игральную кость и отложите её в сторону. Теперь на одной из оставшихся игральных костей должно выпасть число 2. Для этого есть 5 вариантов. Возьмите ещё одну игральную кость и отложите её в сторону. Затем на 4 из оставшихся игральных костей может выпасть число 3, на 3 из оставшихся игральных костей может выпасть число 4, на 2 костях — число 5. В итоге у вас остаётся одна игральная кость, на которой должно выпасть число 6 (в последнем случае игральная кость одна, и выбора нет).

Чтобы посчитать количество благоприятных исходов для выпадения комбинации «стрейт», мы умножаем все разные независимые варианты: 6 x 5 x 4 x 3 x 2 x 1=720 — похоже, есть довольно большое количество вариантов того, что выпадет эта комбинация.

Чтобы посчитать вероятность выпадения комбинации «стрейт», нам нужно разделить 720 на количество всех возможных исходов для бросания 6d6. Каково число всех возможных исходов? На каждой игральной кости может выпасть 6 граней, поэтому мы умножаем 6 x 6 x 6 x 6 x 6 x 6 = 46656 (число намного больше, чем предыдущее). Делим 720 на 46656 и получаем вероятность, равную примерно 1,5%. Если бы вы занимались дизайном этой игры, вам было бы полезно это знать, чтобы вы могли создать соответствующую систему подсчёта очков. Теперь мы понимаем, почему в игре Farkle вы получите такой большой бонус, если вам выпадет комбинация «стрейт»: это ситуация довольно редкая.

Результат также интересен и по другой причине. На примере видно, насколько редко за короткий период выпадает результат, соответствующий вероятности. Конечно, если бы мы бросали несколько тысяч игральных костей, разные грани игральных костей выпадали бы довольно часто. Но когда мы бросаем только шесть игральных костей, почти никогда не случается так, чтобы выпала каждая из граней. Становится понятно, что глупо ожидать, что сейчас выпадет грань, которой ещё не было, потому что «нам давно не выпадало число 6». Слушай, твой генератор случайных чисел сломался.

Это приводит нас к распространённому заблуждению, что все исходы выпадают с одинаковой периодичностью на протяжении небольшого периода времени. Если мы бросаем игральные кости несколько раз, периодичность выпадения каждой из граней не будет одинаковой.

Если вы когда-либо раньше работали над онлайн-игрой с каким-нибудь генератором случайных чисел, то, скорее всего, сталкивались с ситуацией, когда игрок пишет в службу технической поддержки с жалобой, что генератор случайных чисел не показывает случайные числа. Он пришёл к такому выводу, потому что убил 4 монстров подряд и получил 4 совершенно одинаковые награды, а эти награды должны выпадать только в 10% случаев, поэтому такое, очевидно, почти никогда не должно происходить.

Вы делаете математический расчёт. Вероятность равна 1/10 * 1/10 * 1/10 * 1/10, то есть 1 исход из 10 тысяч — довольно редкий случай. Именно это пытается вам сказать игрок. Есть ли в данном случае проблема?

Всё зависит от обстоятельств. Сколько игроков сейчас на вашем сервере? Предположим, у вас достаточно популярная игра, и каждый день в неё играет 100 тысяч человек. Сколько игроков убьют четырёх монстров подряд? Возможно, все, несколько раз за день, но давайте предположим, что половина из них просто обменивается разными предметами на аукционах, переписывается на RP-серверах, или выполняет другие игровые действия — таким образом, на монстров охотится только половина из них. Какова вероятность, что кому-то выпадет одна и та же награда? В данной ситуации можно ожидать, что это произойдет как минимум несколько раз за день.

Кстати, поэтому кажется, что каждые несколько недель кто-нибудь выигрывает в лотерею, даже если этим кем-то никогда не были вы или ваши знакомые. Если достаточное количество людей регулярно играет — есть вероятность, что где-то найдется хотя бы один счастливчик. Но если в лотерею играете вы сами, то вы вряд ли выиграете, уж скорее вас пригласят на работу в Infinity Ward.

Карты и зависимость

Мы обсудили независимые события, например бросание игральной кости, и теперь знаем много мощных инструментов анализа случайности во многих играх. Расчёт вероятности немного сложнее, когда речь идёт о вынимании карт из колоды, потому что каждая карта, которую мы вынимаем, влияет на те, что остаются в колоде.

Если у вас стандартная колода в 52 карты, вы вынимаете из нее 10 червей и хотите знать вероятность того, что следующая карта будет той же масти, — вероятность изменилась по сравнению с первоначальной, потому что вы уже убрали одну карту масти черви из колоды. Каждая карта, которую вы убираете, изменяет вероятность появления следующей карты в колоде. В данном случае предыдущее событие влияет на следующее, поэтому мы называем такую вероятность зависимой.

Обратите внимание: когда я говорю «карты», я имею в виду любую игровую механику, в которой есть набор объектов и вы убираете один из объектов, не заменяя его. «Колода карт» в данном случае — аналог мешочка с фишками, из которого вы вынимаете одну фишку, или урны, из которой вынимают цветные шарики (я никогда не видел игр с урной, из которой бы вынимали цветные шарики, но преподаватели теории вероятностей по какой-то причине предпочитают данный пример).

Свойства зависимости

Хотелось бы уточнить, что, когда речь идет о картах, я предполагаю, что вы вынимаете карты, смотрите на них и убираете из колоды. Каждое из этих действий — важное свойство.
Если бы у меня была колода, скажем, из шести карт с числами от 1 до 6, я бы перетасовал их и вынул одну карту, затем перетасовал все шесть карт снова — это было бы аналогично бросанию шестигранной игральной кости, ведь один результат здесь не влияет на последующие. А если я вынимаю карты и не заменяю их, то, вынув карту 1, повышаю вероятность того, что в следующий раз выну карту с числом 6. Вероятность будет повышаться, пока я в итоге не выну эту карту или не перетасую колоду.

Факт того, что мы смотрим на карты, также важен. Если я выну карту из колоды и не посмотрю на неё — у меня не будет дополнительной информации и на самом деле вероятность не изменится. Это может прозвучать нелогично. Как простое переворачивание карты может волшебным образом изменить вероятность? Но это возможно, потому что вы можете посчитать вероятность для неизвестных предметов только исходя из того, что вы знаете.

Например, если вы перетасуете стандартную колоду карт, откроете 51 карту и ни одна из них не будет трефовой дамой, то вы можете быть на 100% уверены, что оставшаяся карта — это трефовая дама. Если же вы перетасуете стандартную колоду карт и вынете 51 карту, не глядя на них, то вероятность того, что оставшаяся карта — трефовая дама, всё равно останется 1/52. Открывая каждую карту, вы получаете больше информации.

Подсчёт вероятности для зависимых событий выполняется по тем же принципам, как и для независимых, за исключением того, что это немного сложнее, так как вероятности меняются, когда вы открываете карты. Таким образом, вам нужно перемножить много разных значений, вместо умножения одного и того же значения. На самом деле это значит, что нам нужно соединить все расчёты, которые мы делали, в одну комбинацию.

Пример

Вы тасуете стандартную колоду в 52 карты и вынимаете две карты. Какова вероятность того, что вы вынете пару? Есть несколько способов вычислить эту вероятность, но, пожалуй, самый простой выглядит следующим образом: какова вероятность того, что, вынув одну карту, вы не сможете вынуть пару? Эта вероятность равна нулю, поэтому не так важно, какую первую карту вы вынули, при условии, что она совпадает со второй. Неважно, какую именно карту мы вынем первой, у нас всё равно есть шанс вынуть пару. Поэтому вероятность вынуть пару после того, как вынули первую карту, равна 100%.

Какова вероятность того, что вторая карта совпадет с первой? В колоде остается 51 карта, и 3 из них совпадают с первой картой (вообще-то их было бы 4 из 52, но вы уже убрали одну из совпадающих карт, когда вынули первую карту), так что вероятность равна 1/17. Поэтому в следующий раз, когда за игрой в техасский холдем парень напротив вас за столом скажет: «Круто, ещё одна пара? Мне сегодня везет», вы будете знать, что с высокой долей вероятности он блефует.

Что если мы добавим два джокера, так что у нас в колоде будет 54 карты, и захотим узнать, какова вероятность вынуть пару? Первой картой может оказаться джокер, и тогда в колоде будет только одна карта, которая совпадёт, а не три. Как найти вероятность в данном случае? Мы разделим вероятности и перемножим каждую возможность.

Нашей первой картой может быть джокер или какая-нибудь другая карта. Вероятность вынуть джокер равна 2/54, вероятность вынуть какую-то другую карту — 52/54. Если первая карта — джокер (2/54), то вероятность того, что вторая карта совпадет с первой, равна 1/53. Перемножаем значения (мы можем перемножить их, потому что это отдельные события, и мы хотим, чтобы оба события произошли) и получаем 1/1431 — меньше чем одну десятую процента.

Если первой вы вынимаете какую-то другую карту (52/54), вероятность совпадения со второй картой равна 3/53. Перемножаем значения и получаем 78/1431 (немного больше, чем 5,5%). Что мы делаем с этими двумя результатами? Они не пересекаются, и мы хотим знать вероятность каждого из них, поэтому суммируем значения. Получаем окончательный результат 79/1431 (всё равно примерно 5,5%).

Если бы мы хотели быть уверенными в точности ответа, мы могли бы посчитать вероятность всех остальных возможных результатов: вынимание джокера и несовпадение со второй картой или вынимание какой-то другой карты и несовпадение со второй картой. Просуммировав эти вероятности и вероятность выигрыша, мы бы получили ровно 100%. Я не буду приводить здесь математический расчёт, но вы можете попробовать посчитать, чтобы перепроверить.

Парадокс Монти Холла

Это приводит нас к довольно известному парадоксу, который часто приводит многих в замешательство, — парадокс Монти Холла. Парадокс назван в честь ведущего телешоу Let’s Make a Deal. Для тех, кто никогда не видел это телешоу, скажу, что оно было противоположностью The Price Is Right.

В The Price Is Right ведущий (раньше ведущим был Боб Баркер, кто сейчас, Дрю Кэри? Неважно) — ваш друг. Он хочет, чтобы вы выиграли деньги или классные призы. Он пытается предоставить вам все возможности для выигрыша, при условии, что вы сможете угадать, сколько на самом деле стоят предметы, приобретенные спонсорами.

Монти Холл вел себя иначе. Он был как злой близнец Боба Баркера. Его целью было сделать так, чтобы вы в эфире национального телевидения выглядели как идиот. Если вы участвовали в шоу, он был вашим противником, вы играли против него, и шансы на выигрыш были в его пользу. Возможно, я слишком резко высказываюсь, но, глядя на шоу, в которое больше шансов попасть, если носить нелепый костюм, я прихожу именно к таким выводам.

Один из самых известных мемов шоу был такой: перед вами три двери, дверь номер 1, дверь номер 2 и дверь номер 3. Вы можете бесплатно выбрать какую-то одну дверь. За одной из них находится великолепный приз — например, новый легковой автомобиль. За двумя другими дверьми нет никаких призов, обе они не представляют из себя никакой ценности. Они должны вас унизить, поэтому за ними не просто ничего, а что-то глупое, например, козёл или огромный тюбик зубной пасты — что угодно, только не новый легковой автомобиль.

Вы выбираете одну из дверей, Монти уже собирается открыть её, чтобы вы узнали, выиграли или нет… но подождите. Прежде чем узнать, давайте посмотрим на одну из тех дверей, которые вы не выбрали. Монти знает, за какой дверью находится приз, и он всегда может открыть дверь, за которой нет приза. «Вы выбираете дверь номер 3? Тогда давайте откроем дверь номер 1, чтобы показать, что за ней не было приза». А теперь он из щедрости предлагает вам возможность обменять выбранную дверь номер 3 на то, что находится за дверью номер 2.

В этот момент и возникает вопрос о вероятности: повышает ли эта возможность вашу вероятность выиграть, или понижает, или она остаётся неизменной? Как вы думаете?

Верный ответ: возможность выбрать другую дверь увеличивает вероятность выигрыша с 1/3 до 2/3. Это нелогично. Если раньше вы не сталкивались с данным парадоксом, то, скорее всего, вы думаете: подождите, как это: открыв одну дверь, мы волшебным образом изменили вероятность? Как мы уже видели на примере с картами, именно это и происходит, когда мы получаем больше информации. Очевидно, что, когда вы выбираете в первый раз, вероятность выигрыша равна 1/3. Когда открывается одна дверь, это совершенно не меняет вероятность выигрыша для первого выбора: всё равно вероятность равна 1/3. Но вероятность того, что другая дверь правильная, теперь равна 2/3.

Давайте посмотрим на этот пример с другой стороны. Вы выбираете дверь. Вероятность выигрыша равна 1/3. Я предлагаю вам поменять две другие двери, что и делает Монти Холл. Конечно, он открывает одну из дверей, чтобы показать, что за ней нет приза, но он всегда может так поступить, поэтому на самом деле это ничего не меняет. Конечно, вам захочется выбрать другую дверь.

Если вы не совсем разобрались с вопросом и нужно более убедительное объяснение, нажмите на эту
ссылку, чтобы перейти к замечательному маленькому Flash-приложению, которое позволит вам изучить этот парадокс более подробно. Вы можете играть, начиная с примерно 10 дверей, и затем постепенно перейти к игре с тремя дверьми. Есть также симулятор, где вы можете играть с любым количеством дверей от 3 до 50 или запустить несколько тысяч симуляций и посмотреть, сколько раз вы бы выиграли, если бы играли.

Выбираете одну из трех дверей — вероятность выиграть равна 1/3. Теперь у вас есть две стратегии: поменять выбор после открытия неверной двери или нет. Если вы не меняете свой выбор, то вероятность так и останется 1/3, так как выбор идет только на первом этапе, и надо сразу угадать. Если же меняете, то выиграть вы можете, если выберете сперва неверную дверь (потом откроют другую неверную, останется верная — меняя решение, вы как раз её и берете). Вероятность выбрать в начале неверную дверь составляет 2/3 — вот и получается, что, поменяв свое решение, вы в два раза увеличиваете вероятность выигрыша.

Ремарка от преподавателя высшей математики и специалиста по игровому балансу Максима Солдатова — её, разумеется, не было у Шрайбера, но без неё понять это волшебное превращение достаточно трудно

И снова о парадоксе Монти Холла

Что касается самого шоу: даже если соперники Монти Холла не были сильны в математике, то он разбирался в ней хорошо. Вот что он делал, чтобы немного изменить игру. Если вы выбирали дверь, за которой находился приз, вероятность чего равна 1/3, он всегда предлагал вам возможность выбрать другую дверь. Вы выбрали легковой автомобиль, а затем поменяете его на козла и будете выглядеть довольно глупо — а это именно то, что нужно, ведь Холл своего рода злой парень.

Но если вы выберете дверь, за которой не будет приза, то он предложит вам выбрать другую только в половине случаев, либо же просто покажет вам вашего нового козла, и вы уйдете со сцены. Давайте проанализируем эту новую игру, в которой Монти Холл может решать, предлагать вам шанс выбрать другую дверь или нет.

Предположим, он следует данному алгоритму: если вы выбираете дверь с призом, он всегда предлагает вам возможность выбрать другую дверь, в ином случае он с равной вероятностью предложит вам выбрать другую дверь или подарит козла. Какова вероятность вашего выигрыша?

В одном из трёх вариантов вы сразу выбираете дверь, за которой находится приз, и ведущий предлагает вам выбрать другую.

Из оставшихся двух вариантов из трёх (вы изначально выбираете дверь без приза) в половине случаев ведущий предложит вам поменять решение, а в другой половине случаев — нет.

Половина от 2/3 — это 1/3, то есть в одном случае из трёх вы получите козла, в одном случае из трёх выберете неправильную дверь и ведущий предложит вам выбрать другую, и в одном случае из трёх вы выберете правильную дверь, но он опять же предложит другую.

Если ведущий предлагает выбрать другую дверь, мы уже знаем, что тот один случай из трёх, когда он дарит нам козла и мы уходим, не произошёл. Это полезная информация: она означает, что наши шансы на выигрыш изменились. Два случая из трёх, когда у нас есть возможность выбрать: в одном случае это значит, что мы угадали правильно, а в другом, что мы угадали неправильно, поэтому, если нам вообще предложили возможность выбрать, значит, вероятность нашего выигрыша равна 1/2, и c точки зрения математики неважно, оставаться при своём выборе или выбирать другую дверь.

Как и покер, это игра психологическая, а не математическая. Почему Монти предложил вам выбор? Он думает, что вы простофиля, который не знает, что выбрать другую дверь — «правильное» решение и будет упорно держаться за свой выбор (ведь психологически сложнее ситуация, когда вы выбрали автомобиль, а затем его потеряли)?

Или он, решив, что вы умный и выберете другую дверь, предлагает вам этот шанс, потому что знает, что вы изначально угадали правильно и попадётесь на крючок? Или, может быть, он нетипично для себя добр и подталкивает вас сделать что-то, выгодное для вас, потому что он уже давно не дарил автомобилей и продюсеры говорят, что зрителям становится скучно, и лучше бы в скором времени подарить большой приз, чтобы рейтинги не падали?

Таким образом, Монти удается иногда предлагать выбор, и при этом общая вероятность выигрыша остается равной 1/3. Помните, что вероятность того, что вы проиграете сразу, равна 1/3. Вероятность того, что вы сразу угадаете правильно, равна 1/3, и в 50% этих случаев вы выиграете (1/3 x 1/2 = 1/6).

Вероятность того, что вы сначала угадаете неправильно, но потом у вас будет шанс выбрать другую дверь, равна 1/3, и в половине этих случаев вы выиграете (также 1/6). Суммируйте две не зависящие друг от друга возможности выигрыша — и вы получите вероятность, равную 1/3, поэтому неважно, останетесь вы при своём выборе или выберете другую дверь — общая вероятность вашего выигрыша на протяжении всей игры равна 1/3.

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

Кстати, это одна из причин, почему покер может быть таким интересным: в большинстве форматов между раундами, когда делаются ставки (например, флоп, терн и ривер в техасском холдеме), постепенно открываются карты, и если в начале игры у вас одна вероятность выиграть, то после каждого раунда ставок, когда открыто больше карт, эта вероятность меняется.

Парадокс мальчика и девочки

Это приводит нас к другому известному парадоксу, который, как правило, всех озадачивает, — парадоксу мальчика и девочки. Единственное из того, о чём я сегодня пишу, что не связано непосредственно с играми (хотя предполагаю, что я просто должен подтолкнуть вас на создание соответствующей игровой механики). Это скорее головоломка, но интересная, и, чтобы её решить, нужно понимать условную вероятность, про которую мы говорили выше.

Задача: у меня есть друг с двумя детьми, хотя бы один ребёнок из них — девочка. Какова вероятность того, что второй ребёнок тоже девочка? Давайте предположим, что в любой семье шансы рождения девочки и мальчика составляют 50/50, и это справедливо для каждого ребёнка.

На самом деле, в сперме некоторых мужчин больше сперматозоидов с X-хромосомой или Y-хромосомой, поэтому вероятность немного меняется. Если вы знаете, что один ребёнок — девочка, вероятность появления второй девочки немного выше, кроме того, есть и другие условия, например, гермафродитизм. Но для решения этой задачи мы не будем принимать это во внимание и предположим, что рождение ребёнка — это независимое событие и рождение мальчика и девочки равновероятны.

Так как речь идёт о шансе 1/2, интуитивно мы ожидаем, что ответ будет, скорее всего, 1/2 или 1/4, или в знаменателе будет какое-то другое число, кратное двум. Но ответ — 1/3. Почему?

Сложность в данном случае в том, что информация, которая у нас есть, сокращает количество возможностей. Предположим, родители — фанаты «Улицы Сезам» и независимо от пола детей назвали их A и B. При нормальных условиях есть четыре равновероятные возможности: A и B — два мальчика, A и B — две девочки, A — мальчик и B — девочка, A — девочка и B — мальчик. Так как мы знаем, что хотя бы один ребёнок — девочка, мы можем исключить возможность, что A и B — два мальчика. Таким образом, у нас остается три возможности — всё ещё равновероятных. Если все возможности равновероятны и их три, то вероятность каждой из них равна 1/3. Только в одном из этих трёх вариантов оба ребёнка девочки, поэтому ответ — 1/3.

И снова о парадоксе мальчика и девочки

Решение задачи становится ещё более нелогичным. Представьте, что у моего друга двое детей и один из них — девочка, которая родилась во вторник. Предположим, что при нормальных условиях ребёнок с равной вероятностью может родиться в каждый из семи дней недели. Какова вероятность того, что второй ребёнок тоже девочка?

Вы можете подумать, что ответ всё равно будет 1/3: какое значение имеет вторник? Но и в этом случае интуиция нас подводит. Ответ — 13/27, что не просто не интуитивно, а очень странно. В чём дело в данном случае?

На самом деле, вторник изменяет вероятность, потому что мы не знаем, какой ребёнок родился во вторник, или, возможно, во вторник родились оба. В данном случае мы используем ту же логику: считаем все возможные комбинации, когда хотя бы один ребёнок — девочка, которая родилась во вторник. Как и в предыдущем примере, предположим, что детей зовут A и B. Комбинации выглядят следующим образом:

  • A — девочка, которая родилась во вторник, B — мальчик (в данной ситуации есть 7 возможностей, по одной для каждого дня недели, когда мог родиться мальчик).
  • В — девочка, которая родилась во вторник, А — мальчик (также 7 возможностей).
  • A — девочка, которая родилась во вторник, В — девочка, которая родилась в другой день недели (6 возможностей).
  • В — девочка, которая родилась во вторник, А — девочка, которая родилась не во вторник (также 6 вероятностей).
  • А и В — две девочки, которые родились во вторник (1 возможность, нужно обратить на это внимание, чтобы не посчитать дважды).

Суммируем и получаем 27 разных равновозможных комбинаций рождения детей и дней с хотя бы одной возможностью рождения девочки во вторник. Из них 13 возможностей, когда рождаются две девочки. Это также выглядит совершенно нелогично — похоже, данная задача была придумана только для того, чтобы вызвать головную боль. Если вы до сих пор озадачены, на сайте игрового теоретика Йеспера Юла есть хорошее
объяснение этого вопроса.

Если сейчас вы работаете над игрой

Если в игре, дизайном которой вы занимаетесь, есть случайность, это отличный повод её проанализировать. Выберите какой-нибудь элемент, который вы хотите проанализировать. Сначала спросите себя, какова, по вашим ожиданиям, вероятность для данного элемента, какой она должна быть в контексте игры.

Например, если вы создаёте RPG и думаете, какой должна быть вероятность, что игрок победит монстра в битве, спросите себя, какое процентное отношение побед кажется вам правильным. Обычно в случае с консольными RPG игроки очень расстраиваются при поражении, поэтому лучше, чтобы они проигрывали нечасто — в 10% случаев или меньше. Если вы дизайнер RPG, вы, наверно, знаете лучше, чем я, но нужно, чтобы у вас была базовая идея, какой должна быть вероятность.

Затем спросите себя, зависимые ли у вас вероятности (как с картами) или независимые (как с игральными костями). Разберите все возможные результаты и их вероятности. Убедитесь, что сумма всех вероятностей равна 100%. И, конечно, сравните полученные результаты со своими ожиданиями. Получается ли бросать игральные кости или вынимать карты так, как вы задумали, или видно, что значения нужно корректировать. И, конечно, если вы найдете недостатки, можете использовать те же расчёты, чтобы определить, насколько нужно поменять значения.

Задание на дом

Ваше «домашнее задание» на этой неделе поможет вам отточить навыки работы с вероятностью. Вот две игры в кости и карточная игра, которые вам предстоит анализировать, используя вероятность, а также странная механика игры, которую я когда-то разрабатывал, — на её примере вы проверите метод Монте-Карло.

Игра №1 — Драконьи кости

Это игра в кости, которую мы как-то раз придумали с коллегами (спасибо Джебу Хевенсу и Джесси Кингу), — она специально выносит мозг людям своими вероятностями. Это простая игра казино, которая называется «Драконьи кости», и это азартное соревнование в кости между игроком и заведением.

Вам дается обычный кубик 1d6. Цель игры — выбросить число больше, чем у заведения. Тому дается нестандартный 1d6 — такой же, как и у вас, но на одной из его граней вместо единицы — изображение дракона (таким образом, у казино кубик дракон-2-3-4-5-6). Если заведению выпадает дракон, оно автоматически выигрывает, а вы проигрываете. Если обоим выпадает одинаковое число — это ничья, и вы кидаете кости снова. Победит тот, кто выбросит большее число.

Разумеется, все складывается не совсем в пользу игрока, ведь у казино есть преимущество в виде грани дракона. Но действительно ли это так? Это вам и предстоит вычислить. Но сначала проверьте свою интуицию.

Предположим, что выигрыш составляет 2 к 1. Таким образом, если вы побеждаете, вы сохраняете свою ставку и получаете её удвоенную сумму. К примеру, если вы ставите 1 доллар и выигрываете — вы сохраняете этот доллар и получаете еще 2 сверху, итого 3 доллара. Если проигрываете — теряете только свою ставку. Сыграли бы вы? Чувствуете ли вы интуитивно, что вероятность больше, чем к 2 к 1, или все же считаете, что меньше? Другими словами, в среднем за 3 игры вы рассчитываете выиграть больше одного раза, или меньше, или один раз?

Как только разобрались с интуицией, применяйте математику. Для обеих игральных костей существует лишь 36 возможных положений, так что вы без проблем можете просчитать их все. Если вы не уверены в этом предложении «2 к 1», подумайте вот о чем: предположим, вы сыграли в игру 36 раз (каждый раз ставя по 1 доллару). Из-за каждой победы вы получаете 2 доллара, из-за проигрыша теряете 1, а ничья ничего не меняет. Посчитайте все свои вероятные выигрыши и проигрыши и решите, потеряете ли вы некоторую сумму долларов или же приобретете. Затем спросите себя, насколько права оказалась ваша интуиция. А затем осознайте, какой же я злодей.

И, да, если вы уже задумались над этим вопросом — я намеренно сбиваю вас с толку, искажая настоящую механику игр в кости, но, уверен, вы сможете преодолеть это препятствие, всего лишь хорошенько подумав. Попробуйте решить эту задачу самостоятельно.

Игра №2 — Бросок на удачу

Это азартная игра в кости, которая называется «Бросок на удачу» (также «Птичья клетка», потому что иногда кости не бросают, а помещают в большую проволочную клетку, напоминающую клетку из «Бинго»). Игра простая, суть сводится примерно вот к чему: поставьте, скажем, 1 доллар на число от 1 до 6. Затем вы бросаете 3d6. За каждую кость, на которой выпадает ваше число, вы получаете 1 доллар (и сохраняете свою изначальную ставку). Если ни на одной кости ваше число не выпадает, казино получает ваш доллар, а вы — ничего. Таким образом, если вы ставите на 1 и вам трижды выпадает единица на гранях, вы получаете 3 доллара.

Интуитивно кажется, что в этой игре равные шансы. Каждая кость — это индивидуальный шанс выиграть в 1 случае из 6, так что в сумме трех бросков ваш шанс выиграть равен 3 к 6. Однако, разумеется, помните, что вы слагаете три отдельные кости, и вам разрешено складывать только при условии, что мы говорим об отдельных выигрышных комбинациях одной и той же кости. Что-то вам нужно будет умножить.

Как только вы вычислите все возможные результаты (вероятно, это будет легче сделать в Excel, чем от руки, ведь их 216), игра на первый взгляд всё ещё выглядит четно-нечетной. На самом деле, у казино всё же больше шансов выиграть — насколько больше? В частности, сколько в среднем вы рассчитываете проиграть денег за каждый раунд игры?

Всё, что вам нужно сделать, — суммировать выигрыши и проигрыши всех 216 результатов, а затем разделить на 216, что должно быть довольно просто. Но, как видите, тут можно попасть в несколько ловушек, именно поэтому я и говорю: если вам кажется, что в этой игре равные шансы на выигрыш, вы всё неправильно поняли.

Игра №3 — 5-карточный стад покер

Если вы уже размялись на предыдущих играх, давайте проверим, что мы знаем об условной вероятности, на примере данной карточной игры. Давайте представим себе покер с колодой на 52 карты. Давайте также представим 5-карточный стад, где каждый игрок получает только по 5 карт. Нельзя сбросить карту, нельзя вытянуть новую, никакой общей колоды — вы получаете всего лишь 5 карт.

Роял-флеш — это 10-J-Q-K-A в одной комбинации, всего их четыре, таким образом, существует четыре возможных способа получить роял-флеш. Рассчитайте вероятность того, что вам выпадет одна такая комбинация.

Я должен предупредить вас об одном: помните, что вы можете вытянуть эти пять карт в любом порядке. То есть сначала вы можете вытянуть туза, или десятку, неважно. Так что, проводя расчеты, имейте в виду, что на самом деле существует более четырех способов получить роял-флэш, если предположить, что карты выдавались по порядку.

Игра №4 — Лотерея IMF

Четвертую задачу не получится так просто решить методами, о которых мы сегодня говорили, но вы легко сможете смоделировать ситуацию при помощи программирования или Excel. Именно на примере этой задачи вы сможете отработать метод Монте-Карло.

Я уже упоминал ранее игру Chron X, над которой когда-то работал, и там была одна очень интересная карта — лотерея IMF. Вот как она работала: вы использовали её в игре. После того как раунд завершался, карты перераспределялись, и была возможность в 10%, что карта выйдет из игры и что случайный игрок получит 5 единиц каждого типа ресурса, фишка которого присутствовала на этой карте. Карта вводилась в игру без единой фишки, но каждый раз, оставаясь в игре в начале следующего раунда, она получала одну фишку.

Таким образом, существовал 10% шанс того, что вы введете её в игру, раунд закончится, карта покинет игру, и никто ничего не получит. Если этого не произойдет (с вероятностью 90%), появляется 10% шанс (вообще-то 9%, поскольку это 10% из 90%), что в следующем раунде она покинет игру, и кто-то получит 5 единиц ресурсов. Если карта покинет игру через один раунд (10% от имеющихся 81%, так что вероятность — 8,1%), кто-то получит 10 единиц, ещё через раунд — 15, ещё — 20, и так далее. Вопрос: каково вообще ожидаемое значение числа ресурсов, которые вы получите от этой карты, когда она наконец покинет игру?

Обычно мы бы пытались решить эту задачу, вычислив возможность каждого исхода и умножив на количество всех исходов. Есть вероятность в 10%, что вы получите 0 (0,1 * 0 = 0). 9%, что вы получите 5 единиц ресурсов (9% * 5 = 0,45 ресурсов). 8,1% того, что вы получите 10 (8,1%*10=0,81 ресурсов — в целом, ожидаемое значение). И так далее. А потом мы бы всё это суммировали.

А теперь вам очевидна проблема: всегда есть шанс, что карта не покинет игру, она может остаться в игре навсегда, на бесконечное число раундов, так что возможности просчитать всякую вероятность не существует. Методы, изученные нами сегодня, не дают нам возможности просчитать бесконечную рекурсию, так что нам придется создать её искусственным путем.

Если вы достаточно хорошо разбираетесь в программировании, напишите программу, которая будет симулировать эту карту. У вас должна быть временная петля, которая приводит переменную в исходное положение нуля, показывает случайное число и с вероятностью 10% переменная выходит из петли. В противоположном случае она добавляет к переменной 5, и цикл повторяется. Когда она наконец выйдет из петли, увеличьте общее число пробных пусков на 1 и общее число ресурсов (насколько — зависит от того, на каком значении остановилась переменная). Затем сбросьте переменную и начните заново.

Запустите программу несколько тысяч раз. В конце концов разделите общее количество ресурсов на общее количество пробегов — это и будет ваше ожидаемое значение метода Монте-Карло. Запустите программу несколько раз, чтобы удостовериться, что числа, которые вы получили, примерно одинаковы. Если разброс все еще велик, увеличьте число повторов во внешней петле, пока не начнете получать соответствия. Можете быть уверены: какие бы числа вы в итоге ни получили, они будут приблизительно верны.

Если же вы незнакомы с программированием (хотя даже если и знакомы), вот вам небольшое упражнение на проверку навыков работы с Excel. Если вы геймдизайнер, эти навыки никогда не будут лишними.

Сейчас вам очень пригодятся функции if и rand. Rand не требует значений, она всего лишь выдает случайное десятичное число от 0 до 1. Обычно мы совмещаем его с floor и плюсами и минусами, чтобы симулировать бросок кости, о чем я уже упоминал ранее. Впрочем, в этом случае мы всего лишь оставляем вероятность в 10%, что карта покинет игру, так что мы можем просто проверить, не составляет ли значение rand меньше 0,1, и больше не забивать себе этим голову.

If имеет три значения. По порядку: условие, которое либо верно, либо нет, затем значение, которое возвращается, если условие верно, и значение, которое возвращается, если условие неверно. Так что следующая функция будет возвращаться 5% времени, и 0 остальных 90% времени:
=IF(RAND()<0.1,5,0).

Существует много способов установить эту команду, но я бы использовал такую формулу для ячейки, которая представляет первый раунд, скажем, это ячейка A1:
=IF(RAND()<0.1,0,-1).

Здесь я использую негативную переменную в значении «эта карта не покинула игру и пока не отдала никаких ресурсов». Так что, если первый раунд завершился и карта покинула игру, A1 — это 0; в противоположном случае это –1.

Для следующей ячейки, представляющей второй раунд:
=IF(A1>-1, A1, IF(RAND()<0.1,5,-1)). Так что, если первый раунд завершился, и карта сразу покинула игру, A1 — это 0 (число ресурсов), и эта ячейка просто скопирует это значение. В противоположном случае A1 — это –1 (карта еще не покинула игру), и эта ячейка продолжает случайное движение: 10% времени она будет возвращать 5 единиц ресурсов, в остальное время ее значение будет по-прежнему равняться –1. Если применять эту формулу к добавочным ячейкам, мы получим добавочные раунды, и, какая бы ячейка ни выпала вам в конце, вы получите конечный результат (или –1, если карта так и не покинула игру после всех разыгранных вами раундов).

Возьмите этот ряд ячеек, который представляет собой единственный раунд с этой картой, и копируйте и вставьте несколько сотен (или тысяч) рядов. Возможно, у нас и не получится сделать бесконечный тест для Excel (существует ограниченное количество ячеек в таблице), но, по крайней мере, мы можем рассмотреть большинство случаев. Затем выделите одну ячейку, в которой вы поместите среднее значение результатов всех раундов — Excel любезно предоставляет для этого функцию average().

В Windows вы хотя бы можете нажать F9 для пересчета всех случайных чисел. Как и раньше, сделайте это несколько раз и посмотрите, одинаковые ли величины вы получаете. Если разброс слишком велик, удвойте число пробегов и попробуйте снова.

Нерешенные задачи

Если вы совершенно случайно имеете научную степень в области теории вероятностей и вышеприведенные задачи кажутся вам слишком лёгкими — вот две задачи, над которыми я ломаю голову годами, но, увы, я не так хорош в математике, чтобы их решить.

Нерешенная задача №1: Лотерея IMF

Первая нерешенная задача — предыдущее задание на дом. Я легко могу применить метод Монте-Карло (с помощью С++ или же Excel) и буду уверен в ответе на вопрос «сколько ресурсов получит игрок», но я не знаю точно, как предоставить точный доказуемый ответ математически (это же бесконечная серия).

Нерешенная задача №2: Последовательности фигур

Эту задачу (она тоже выходит далеко за пределы задач, которые решаются в этом блоге) мне подкинул один знакомый геймер более десяти лет тому назад. Во время игры в блэкджек в Вегасе он заметил одну интересную особенность: вынимая карты из башмака на 8 колод, он видел десять фигур подряд (фигура или фигурная карта — 10, Джокер, Король или Королева, так что всего их 16 в стандартной колоде на 52 карты или 128 в башмаке на 416 карт).

Какова вероятность того, что в этом башмаке по меньшей мере одна последовательность десяти или более фигур? Предположим, что их тасовали честно, в случайном порядке. Или же, если вам больше нравится, какова вероятность того, что нигде не встречается последовательность из десяти или более фигур?

Можем упростить задачу. Вот последовательность из 416 частей. Каждая часть — 0 или 1. Есть 128 единиц и 288 нулей, случайно разбросанных по всей последовательности. Сколько существует способов в случайном порядке перемежить 128 единиц 288 нулями и сколько раз в этих способах встретится как минимум одна группа десяти или более единиц?

Всякий раз, как только я принимался за решение этой задачи, она казалась мне лёгкой и очевидной, но стоило углубиться в детали, как она внезапно разваливалась на части и представлялась просто-таки невозможной.

Так что не торопитесь выпаливать ответ: сядьте, хорошенько подумайте, изучите условия, попробуйте подставить реальные числа, потому что все люди, с которыми я говорил об этой задаче (в том числе и несколько аспирантов, работающих в этой сфере), реагировали примерно одинаково: «Это же совершенно очевидно… ой, нет, погоди, совсем не очевидно». Это тот случай, когда у меня нет метода для просчитывания всех вариантов. Я, безусловно, мог бы прогнать задачу методом брутфорса через компьютерный алгоритм, но гораздо интереснее было бы узнать математический способ решения.

Добавить комментарий