Этот известный парадокс обсуждался, наверное, на каждом более-менее популярном форуме. Вкратце напомню суть:
Вы участвуете в игре. Имеется три закрытых двери, при этом известно, что за одной из этих дверей – приз (например, машина). Имеется ведущий, который знает, за какой именно дверью находится приз. Вам дается право выбрать дверь. После этого, ведущий, которому Вы сообщили о своем выборе, и который знает, где на самом деле находится приз, открывает дверь без приза, и не ту, на которую Вы указали. Осталось две закрытых двери, за одной из которых – приз, и Вам дано право сменить свой первоначальный выбор.
Вопрос: нужно ли менять выбор для того, что бы возросла вероятность выигрыша или же вероятность будет одинакова 50/50 – хоть меняй, хоть нет?
Многие люди ошибочно полагают, что вероятность выигрыша будет одинаковой как в случае смены выбора, так и в случае неизменного решения. Две двери, одна машина – вероятность 50/50.
Конечно, таким товарищам хочется сказать: а что, если игрок выберет дверь и зажмурится, не видя, какую дверь открывает ведущий, или вообще уйдет с игры (ведь он не собирается менять решение!). Неужели вероятность его выигрыша в этом случае будет больше 1/3?
Или если дверей не три, а тысяча, и ведущий после Вашего выбора открывает 998 дверей, неужели не поменяете решение?
Но если Вы знакомы с программированием, то, возможно, разъяснить ситуацию поможет алгоритм моделирования данной игры. Я написал его на PHP, но думаю, идея будет понятна практически всем.
<?
$n = 100; // число опытов
$win_select = 0; // число выигрышей если менять выбор
$win_nonselect = 0; // число выигрышей если НЕ менять выбор
mt_srand(time()+(double)microtime()*1000000); // инициализируем датчик случайных чисел
for ($i=1; $i<=$n; $i++) // Повторяем в цикле опыт n раз
{
$prize = mt_rand(1,3); // Номер двери за которой машина - случайное число от 1 до 3
$first_select = mt_rand(1,3); // Выбираем дверь. Тоже случайно
// *** место для строчки
if ($prize == $first_select) // если мы угадали с первого раза
{
$open_door = mt_rand(1,2); // случайно выбираем одну из двух не выбранных дверей
// т.к. оставшихся дверей две, а номера дверей могут быть от 1 до 3, то случайное число сгенерируем
// 1 или 2, а если оно совпадет с дверью, за которой приз - то тогда выберем дверь номер 3
if (($open_door == 1) and ($open_door==$prize)) {$open_door=3;}
if (($open_door == 2) and ($open_door==$prize)) {$open_door=3;}
}
if ($prize != $first_select) // если мы НЕ угадали с первого раза
{
for ($j=1; $j<=3; $j++) // ведущий выбирает для открытия дверь
{
$open_door = $j;
if ( ($open_door != $prize) and ($open_door != $first_select) ) {break;} // которая одновременно и не с призом, и не первая выбранная
}
}
for ($j=1; $j<=3; $j++) // Если мы меняем выбор
{
$second_select = $j; // То мы выбираем дверь с условием
if ( ($second_select != $first_select) and ($second_select != $open_door) ) {break;} // что она одновременно и не открытая ведущим и не первая нами выбранная
}
if ($second_select==$prize) {$win_select++;} // Если мы угадали сменив выбор
if ($first_select==$prize) {$win_nonselect++;} // Если мы угадали не меняя выбор
// но посмотрите! ведь эту строку, мы можем поместить на место *** с неизменным результатом!
// возня с открыванием двери ничего не решает для случая, если мы не меняем решение!
}
echo "Total wins select: $win_select
Total wins NONselect: $win_nonselect"; // выводим результаты
?>
В этой программе честно моделируется вся ситуация:
- 1. За выбранную случайным образом дверь прячем машину (дверь номер prize)
- 2. Случайно выбираем дверь в роли игрока (дверь номер first_select)
- 3. Ведущий, зная эти два номера, открывает дверь, номер которой не совпадает ни с номером prize ни с номером first_select. Номер этой открытой двери open_door.
- 4. Если игрок меняет дверь, то номер новой выбранной двери должен быть не равен ни first_select – первому выбору, ни номеру открытой двери open_door. Номер двери, которую выбрал игрок – second_select
- 5. Если second_select = prize – значит игрок правильно поменял дверь
- 6. Если first_seslect = prize – значит игрок бы выиграл, если бы дверь не менял
И вот сейчас главная фишка для понимания парадокса:
Условие проверки в пункте 6 мы можем осуществить сразу после пункта 2!!! Ведь в пунктах 3,4,5 с переменными first_select и prize ничего не происходит! То есть действительно получается, что если мы не меняем выбор, то факты открывания двери – совершенно никак не влияют на вероятность. А она, очевидно, при данном подходе будет равна 1/3.
Запустить скрипт можно кликнув тут.
Поделиться: twitter facebook