Форум русскоязычного сообщества Ubuntu


Автор Тема: Программа по теории вероятности  (Прочитано 1585 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн artifactor

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1769
    • Просмотр профиля
    • Leaf Watoru's notes
Программа по теории вероятности
« : 05 Декабрь 2013, 15:40:59 »
Однажды я сидел на работе и читал про парадоксы и наткнулся на один такой парадокс, который я захотел проверить.
Представим себе шоу, в котором есть три двери. Одна из них выйгрышная.
Мы выбираем одну из дверей, после чего нам показывают одну неправильную дверь и дают шанс поменять свой выбор. Мы решаем стоит это делать или нет.
Парадокс состоит в том, что если мы поменяем свой выбор, то шансы на правильный выбор заметно увеличиваются. Я решил проверить это статистически. И статистика это подтвердила.

Эта тема наверняка избита и уже не раз проверена. А я решил поделиться исходниками своей программы.
Управление простое: нужно всего лишь писать номер выбранной нами двери. Потом графически показывается, какая дверь точно неправильная. После чего мы опять вводим выбор двери. Если угадать 80% ответов и более, то получим символический приз. Если вместо цифры 1,2 или 3 написать другую цифру, то по некому алгоритму программа поставит цифру за нас. Если ввести букву - программа прекращает свою работу.

Программа пока написана только на си++, но я уже работаю над графической вариацией программы.

Исходники прилагаются. Чуть позже выложу бинарник.

UPDATE:
добавил бинарник.
« Последнее редактирование: 05 Декабрь 2013, 21:36:27 от xf∞ »
Xubuntu 16.04 x64
Обои для рабочего стола и Space Ambient

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7188
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #1 : 05 Декабрь 2013, 17:47:19 »
Подпишусь.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #2 : 05 Декабрь 2013, 20:47:24 »
Что-то не удалось мне выиграть машину :(
Зато проиграл (40%) аж 2 раза :'(

...
Парадокс состоит в том, что если мы поменяем свой выбор, то шансы на правильный выбор заметно увеличиваются. ...

Не «заметно», а вероятность выигрыша при этом получается равной 2/3. При условии,
что номер выигрышной двери — случайная величина, принимающая значения 1, 2 и 3
с одинаковой вероятностью.

Кто-нибудь может это доказать? Доказательство очень простое  ;)

Да, и интересно то, что шансы даже не 1:1, а 2:1!
Делюсь знаниями, но их у меня мало!

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7188
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #3 : 05 Декабрь 2013, 20:57:28 »
inkblack, могу, конечно, ничего сложного.
(Нажмите, чтобы показать/скрыть)

Lifewalker

  • Гость
Re: Программа по теории вероятности
« Ответ #4 : 05 Декабрь 2013, 21:34:00 »
Не компилиццо :( Ошибки выдаёт. Пошёл читать справочник по Си++

Оффлайн artifactor

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1769
    • Просмотр профиля
    • Leaf Watoru's notes
Re: Программа по теории вероятности
« Ответ #5 : 05 Декабрь 2013, 21:41:00 »
Добавил бинарник.
Я прогу делал в code::blocks. Давненько на неё внимание обратил. Как IDE - самое то для меня.

Lifewalker, чем компилили? я ведь не только стандартные библиотеки включил. может, из-за этого ошибки? В любом случае, бинарник есть, я в терминале его запускал.

inkblack, если без доказательства и коротко, то когда мы выбираем в первый раз то шанс 1:3, когда выбираем во-второй раз 1:2.
и именно второй выбор вместе с интуицией и надо использовать, а не всегда оставлять выбор прежним. мне удавалось угадать десять раз подряд. правда, приз я тогда ещё не сделал. :)
Xubuntu 16.04 x64
Обои для рабочего стола и Space Ambient

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7188
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #6 : 05 Декабрь 2013, 22:51:18 »
xf∞, так какой по Вашему мнению шанс угадать, если вы всё время меняете выбор?

Lifewalker

  • Гость
Re: Программа по теории вероятности
« Ответ #7 : 05 Декабрь 2013, 23:19:51 »
xf∞, компилил микростовтовским cl из VS2010.
c:\_Work>cl main.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
Copyright (C) Microsoft Corporation.  All rights reserved.

main.cpp
c:\Programs\Microsoft Visual Studio\VC\INCLUDE\xlocale(323) : warning C4530: C++
 exception handler used, but unwind semantics are not enabled. Specify /EHsc
main.cpp(32) : error C2146: syntax error : missing ')' before identifier 'or'
main.cpp(32) : error C2059: syntax error : ')'
main.cpp(33) : error C2143: syntax error : missing ';' before '{'
main.cpp(32) : error C3861: 'or': identifier not found
Ошибка в 32 строке, там использован оператор or вместо || в качестве «или». Исправил, работает. Не понимаю, это gcc такой всеядный, что пропускает это вероломство? :)
« Последнее редактирование: 05 Декабрь 2013, 23:23:10 от Lifewalker »

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7188
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #8 : 05 Декабрь 2013, 23:52:53 »
Lifewalker, это VS2010 не поддерживает стандарт. Процитирую Википедию:
Цитировать
Синонимы операторов в C++

В C++ определены ключевые слова, являющиеся синонимами к некоторым операторам: and (&&), bitand (&), and_eq (&=), or (||), bitor (|), or_eq (|=), xor (^), xor_eq (^=), not (!), not_eq (!=), compl (~). Они могут использоваться точно так же как и оператор. Фактически они являются другим вариантом символьной записи тех же операторов. Например, bitand может использоваться не только для замены побитового оператора И, но и как оператор взятия адреса, или даже при задании ссылочных типов (допустима запись int bitand ref = n; что эквивалентно int & ref = n;).

В стандарте ANSI C (ISO C) эти ключевые слова определены как макросы препроцессора в заголовочном файле <iso646.h>. Для совместимости, в C++ существует фиктивный заголовочный файл <ciso646>.

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #9 : 06 Декабрь 2013, 01:04:28 »
Я выиграл! Я выиграл! Я выиграл автомобиль!  :D :D :D



Кстати, эта задача была в книжке Лукьяненко. И какое-то невнятное объяснение.
Вот peregrine абсолютно точно и понятно всё изложил.

Да, а в программе в строке 72 надо не
cin >> num;
а
cin.get(); cin.ignore();
— так говорят...
Делюсь знаниями, но их у меня мало!

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1687
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Программа по теории вероятности
« Ответ #10 : 06 Декабрь 2013, 01:28:22 »
Эм, вроде бы с парадоксом Монти Холла все давно известно... Увеличим количество дверей до N и количество итераций до K = N-1, где N > 3 и все становится понятно. Представим, что  N = 1000, на 999 раз предлагают выбрать дверь из оставшихся.
Два варианта:
1. Выбрали дверь - вероятность 1/1000, дверь не меняем, вероятность остается.
2. Меняем дверь каждый раз, вероятность все время увеличивается от 1/1000 до 1/2.
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

 

Страница сгенерирована за 0.093 секунд. Запросов: 24.