Собесов

Кубик с 2N гранями: перебросить или взять — стратегия и матожидание

Статистика и теорверВероятности и стратегииСредняяMiddle

Условие

Вы подбрасываете кубик с 2N гранями (числа от 1 до 2N, равновероятно). После броска у вас две возможности:

  1. Взять себе сумму $, равную выпавшему числу k.
  2. Отклонить результат и подбросить кубик ещё раз — тогда вы обязаны взять то, что выпало во второй раз (отклонять второй бросок уже нельзя).

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

Решение

Шаг 1. Чему равна ожидаемая прибыль от переброса

Если перебросить, второй бросок — случайное равномерное число от 1 до 2N. Его математическое ожидание:

E[X_2] = (1 + 2 + ... + 2N) / 2N = (2N · (2N + 1) / 2) / 2N = (2N + 1) / 2 = N + 0.5

То есть ожидаемая выгода от переброса равна N + 0.5.

Шаг 2. Правило оптимальной остановки

Если на первом броске выпало k, оптимально:

  • Брать, если k > N + 0.5, то есть k ≥ N + 1 (поскольку k — целое).
  • Перебрасывать, если k ≤ N (тогда мы получаем в среднем N + 0.5 > k).

При k = N k < N + 0.5, значит лучше перебросить. При k = N + 1 k > N + 0.5, значит лучше взять.

Граница: перебрасываем при k ∈ {1, 2, ..., N} (нижняя половина граней).

Шаг 3. Матожидание оптимальной стратегии

Распишем по случаям первого броска k:

  • С вероятностью N / 2N = 1/2 выпало k ∈ {1, ..., N} → перебрасываем, ожидаемый выигрыш N + 0.5.
  • С вероятностью 1/2 выпало k ∈ {N + 1, ..., 2N} → берём k, средний выигрыш в этой половине:

E[k | k > N] = (N + 1 + N + 2 + ... + 2N) / N = (N · (3N + 1) / 2) / N = (3N + 1) / 2

Итого:

E = (1/2) · (N + 0.5) + (1/2) · (3N + 1)/2 = (1/2) · (2N + 1)/2 + (1/2) · (3N + 1)/2 = (2N + 1)/4 + (3N + 1)/4 = (5N + 2)/4

Шаг 4. Проверка для N = 3 (стандартный 6-гранный кубик)

E = (5·3 + 2)/4 = 17/4 = 4.25

Это соответствует «классическому» ответу для D6: перебрасываем 1, 2, 3; берём 4, 5, 6.

Проверка прямым счётом для D6: E = (1/6)·(3.5 + 3.5 + 3.5 + 4 + 5 + 6) = (1/6) · 25.5 = 4.25

Шаг 5. Код-проверка симуляцией

import random
 
def avg_profit(N, strategy_threshold, trials=10**6):
    faces = 2 * N
    s = 0
    for _ in range(trials):
        k1 = random.randint(1, faces)
        if k1 <= strategy_threshold:
            k2 = random.randint(1, faces)
            s += k2
        else:
            s += k1
    return s / trials
 
# Перебрасываем при k <= N
N = 5
print(avg_profit(N, N))                  # ≈ (5*5+2)/4 = 6.75
print((5*N + 2) / 4)                     # 6.75

Подводные камни

  1. Сравнение k > N + 0.5, а не k ≥ N + 0.5. Поскольку N + 0.5 нецелое, граничная точка не достигается — но если бы кубик был с нечётным числом граней, появилась бы «безразличная» точка ровно на математическом ожидании.
  2. Перепутать «выгодно перебросить» и «выгодно остановиться». Перебрасываем при низких k, оставляем при высоких. Интуитивный тест: k = 1 — конечно, перебрасываем; k = 2N — конечно, оставляем.
  3. Считать E[k | k > N] как (N + 1 + 2N) / 2 = (3N + 1)/2 — это правильно (среднее арифметическое крайних членов арифметической прогрессии).
  4. Забыть проверить ответ на D6. Удобный санити-чек: для N = 3 ответ — 4.25 (классическая задача).

Эталонный ответ

  • Стратегия: перебрасывать при k ∈ {1, ..., N} (нижняя половина граней).
  • Матожидание оптимальной стратегии: E = (5N + 2)/4.
  • Для шестигранного кубика (N = 3): E = 4.25 $.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти