Парадокс Монти Холла (еще раз)
Этот известный парадокс обсуждался, наверное, на каждом более-менее популярном форуме. Вкратце напомню суть:
Вы участвуете в игре. Имеется три закрытых двери, при этом известно, что за одной из этих дверей – приз (например, машина). Имеется ведущий, который знает, за какой именно дверью находится приз. Вам дается право выбрать дверь. После этого, ведущий, которому Вы сообщили о своем выборе, и который знает, где на самом деле находится приз, открывает дверь без приза, и не ту, на которую Вы указали. Осталось две закрытых двери, за одной из которых – приз, и Вам дано право сменить свой первоначальный выбор.
Вопрос: нужно ли менять выбор для того, что бы возросла вероятность выигрыша или же вероятность будет одинакова 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.
Запустить скрипт можно кликнув тут.
Также Вас может заинтересовать:








Извините, но у Вас ошибка:
“При этом вероятность того, что приз у ведущего будет равна 1/n+(n-2)” – непонятна во первых запись. Неужели, n-2 просто прибавляется? Но ведь тогда вероятность может получиться больше 1, или под символом (n-2) имелось ввиду не число ящиков минус 2, а что то другое?
Вероятность того, что приз у ведущего: (n-1)/n, то есть только в одном случае из n, если игрок с самого начала угадал (а это вероятность 1/n) ведущий оставит закрытым пустой ящик, во всех остальных случаях (n-1 из n) ведущему не остается другого выбора по условию игры, как оставить закрытым приз.
[Ответить]
Здравствуйте! Простите, не силён в PHP, но математическое решение есть.
Вопрос стоит в том, есть ли необходимость сменить выбор после предложения ведущего. Очевидно, речь идёт о разнице коэффициента вероятности нахождения приза за дверью ведущего и за Вашей. Если она положительна – ответ ДА, если отрицательна – НЕТ, если =0 – безразлично.
Рассмотрим вероятность первоначального выбора.
Пусть n – количество элементов в массиве. Тогда вероятность при первичном предположении выбора Вами «правильного» элемента равна 1/n. По условию задачи ведущий ОБЯЗАН открыть ПУСТЫЕ элементы в количестве n-2 (константой является сумма Вашего и оставшегося у ведущего ящика). При этом вероятность того, что приз у ведущего будет равна 1/n+(n-2). Учитывая, что по условию n-2 ОБЯЗАТЕЛЬНО ПУСТЫЕ элементы, то вероятность нахождения в них приза равна 0. Из этого следует, что вероятность того, что приз у ведущего – 1/n+(n-2)=1/n+0=1/n.
Результат: вероятность нахождения приза как за Вашей, так и за дверью ведущего равны.
Вывод – от обмена с ведущим вероятность не вырастет – что и требовалось доказать!
P.S. Суть заблуждений кроется в предположении возможности выбора из более, чем двух элементов. Условие задачи (об открытии ведущим обязательно пустых дверей в количестве n-2) отрицает такую возможность. То есть какую бы дверь ни выбрали Вы, какую бы дверь ни открывал ведущий (при соблюдении вышеописанного условия) вероятность окончательного выбора всегда будет сведена к одному из двух элементов и будет равна 0.5.
[Ответить]
Имеется в виду (1/n)+(1/(n-2)), насколько понял я
[Ответить]