Условие
Владимир купил набор из 3 китайских фейерверков. Они выглядят одинаково и перепутаны, но имеют разную надёжность:
- «Элитный» — вероятность брака 10% (успех
0.9), - «Стандарт» — брак 20% (успех
0.8), - «Эконом» — брак 40% (успех
0.6).
Владимир наугад достаёт первый фейерверк, поджигает его, и тот успешно сработал. Он решает запустить два оставшихся один за другим.
Какова вероятность того, что и второй, и третий тоже сработают (без брака)? Ответ округлить до тысячных.
Решение
Подход
Сначала используем апостериорные вероятности типа первого фейерверка после наблюдения «успех». По Байесу:
P(тип = T | успех) = P(успех | T) · P(T) / P(успех)
P(успех) = (0.9 + 0.8 + 0.6) / 3 = 2.3 / 3
Тогда:
| Тип первого | P(тип | успех) |
|---|---|
| Элитный | 0.9 / 2.3 |
| Стандарт | 0.8 / 2.3 |
| Эконом | 0.6 / 2.3 |
Если первый — Элитный, то оставшиеся {Стандарт, Эконом}, и нужны оба успеха: 0.8 · 0.6 = 0.48.
Если первый — Стандарт, то {Элитный, Эконом}: 0.9 · 0.6 = 0.54.
Если первый — Эконом, то {Элитный, Стандарт}: 0.9 · 0.8 = 0.72.
Считаем итог
p_succ_first = (0.9 + 0.8 + 0.6) / 3 # = 2.3/3
post = {"Элит": 0.9 / 2.3, "Стд": 0.8 / 2.3, "Эко": 0.6 / 2.3}
remaining_success = {
"Элит": 0.8 * 0.6, # 0.48
"Стд": 0.9 * 0.6, # 0.54
"Эко": 0.9 * 0.8, # 0.72
}
ans = sum(post[t] * remaining_success[t] for t in post)
print(round(ans, 3)) # 0.574Численно:
(0.9·0.48 + 0.8·0.54 + 0.6·0.72) / 2.3 = (0.432 + 0.432 + 0.432) / 2.3 = 1.296 / 2.3 ≈ 0.5635.
Округление до тысячных: 0.563 (или 0.564 в зависимости от способа округления — посмотрим точнее).
1.296 / 2.3 = 0.56347826... → 0.563.
Реализация
from fractions import Fraction
probs = [Fraction(9, 10), Fraction(8, 10), Fraction(6, 10)]
# Перебираем, кто из трёх был первым
ans = Fraction(0)
total_first_success = sum(probs) / len(probs)
for i in range(3):
pi = probs[i] / 3 / total_first_success # P(тип i | успех)
rest = [probs[j] for j in range(3) if j != i]
ans += pi * rest[0] * rest[1]
print(float(ans)) # 0.5634782608695652Подводные камни
- Забыть про апостериор. Если просто умножать
0.8 · 0.6или среднее(0.9+0.8+0.6)/3 = 0.7666дважды — это неверно: нет учёта информации, что первый сработал. - Считать, что фейерверк возвращается в коробку. Нет, оставшихся — двое, разных типов.
- Округление. «До тысячных» = 3 знака после запятой.
0.563, не0.5635.
Альтернативы
Можно решать перечислением 3! = 6 порядков: для каждого порядка (t1, t2, t3) считаем P(t1 = успех)·P(t2 = успех)·P(t3 = успех) / P(t1 = успех). Получим то же значение.
Эталонный ответ
P ≈ 0.563 (точно 1.296 / 2.3 ≈ 0.5635).