Суть загадки в следующем:
Есть 3 двери. За одной из них - автомобиль, за другими - ничего (в оригинале там козел, но про козлов и так в последнее время слишком много пишут ;)). Ты выбираешь дверь. Затем ведущий открывает одну из оставщихся дверей, за которойВопрос
Стоит ли менять дверь и какая вероятность выиграша в каждом варианте?Здесь я предлагаю подумать и предложить свой вариант. Как обычно в конце - правильный ответ ;)
Решение
Решить эту задачку, написав программу предлагают на гарвардском курсе по Data Science. Также очень понятное логическое объяснение дано в википедии. Я же воспользуюсь тем, что гарвард не обязывает подписывать соглашение о неразглашении для своих архивных онлайн курсов и расскажу как я решал эту задачку.Внимание. Если ты решился пройти курс cs109, то лучше сделай это сам, без моих подсказок :).
Решать задачку предлагается на Python с расширениями для работы с массивами и прочими математическими штуками numpy. Numpy, а также масса других полезностей для дата анализа на питоне уже содержится в инсталлере Anaconda. Установка анаконды тривиальная, детали опустим.
Блокнот
Блокнот - обалденная штука в ipython. После установки anaconda просто запускаем команду:ipython notebook
И в окне браузера нажимаем New Notebook:
Notebook - это что-то вроде вики, в которую можно вставлять код на питоне. Причем результаты будут отображаться тут же на странице. Код вместе с разметкой автоматически записывается в файл (в данном случае Untitled0.ipynb)
Импортирую модуль Numpy и вывожу его версию:
Определяю функцию simulate_prizedoor, которая будет генерировать массив интов. Каждый элемент массива - номер двери, за которой находится авто.
Очень похожая функция simulate_guess, которая создает массив интов, где каждый элемент - случайный выбор из 3х дверей. Код абсолютно такой же как и в simulate_prizedoor
Дальше определяю функцию goat_door, которая выбирает невыбранную пустую дверь. На входе массив с номером двери, за которой авто и массив с номером выбранной двери.
Функция switch_guesses позволяет менять выбор двери
Дальше функция win_percentage - подсчет процента угадываний
И, наконец, запускаю эксперимент 10тыс раз и выводим результат:
Вывод
Полностью совпадает с теорией. Если менять решение, то вероятность выиграша 66.6%. Подробнее о теории можно почитать в википедииРесурсы
1. Гарвардский курс Data Science2. Парадокс Монти Холла в википедии
3. Анаконда
4. Код здесь: https://github.com/szelenin/cs109