Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2009, 16:02   #1
Alex2008
 
Регистрация: 19.04.2008
Сообщений: 6
По умолчанию Парадокс Монти Холла

Представьте, что вы стали участником игры, в которой вы находитесь перед тремя дверями. Ведущий, о котором известно, что он честен, поместил за одной из дверей автомобиль, а за двумя другими дверями — по козе. У вас нет никакой информации о том, что за какой дверью находится. Ведущий говорит вам: «Сначала вы должны выбрать одну из дверей. После этого я открою одну из оставшихся дверей, за которой находится коза. Затем я предложу вам изменить свой первоначальный выбор и выбрать оставшуюся закрытую дверь вместо той, которую вы выбрали вначале. Вы можете последовать моему совету и выбрать другую дверь, либо подтвердить свой первоначальный выбор. После этого я открою дверь, которую вы выбрали, и вы выиграете то, что находится за этой дверью.»

Вы выбираете дверь номер 3. Ведущий открывает дверь номер 1 и показывает, что за ней находится коза. Затем ведущий предлагает вам выбрать дверь номер 2. Увеличатся ли ваши шансы выиграть автомобиль, если вы последуете его совету ?


Кто-что думает об этой задаче? Какой ответ?
Alex2008 вне форума Ответить с цитированием
Старый 28.02.2009, 16:16   #2
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,655
По умолчанию

Я знаком с этой задачей из фильма "21", что я думаю, ответ - вероятность 50% так как при любом выбое в первом испытании мы получим испытание с 1 козой и 1 автомобилем.

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


Вообще, этот парадокс хороший пример, как внедряются в массы ложные теории
Alar вне форума Ответить с цитированием
Старый 28.02.2009, 16:17   #3
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Помню интересовался этим вопросом.
Шансы (именно шансы) выиграть машину увеличатся в 2 раза, если поменять выбор.
Объяснение несложное:
Сначала есть 2 козы и машина. Вероятность выбрать козу - 66.6 %, машину - 33.3 %.
Ведущий всегда открывает дверь, за которой коза.
Если не менять выбор, то шансы тоже не изменятся. И будут равны 33.3 %.

Теперь, что будет если поменять выбор?
Вначале шанс выбрать козла равен 66.6%. То есть когда ведущий открыл дверь, шанс, что выбран козел - 66.6%. Поэтому, если поменять выбор, то шанс выбрать машину увеличится в 2 раза и будет равен 66.6%.

Это может показаться нелогичным. Кажется, что после открытия ведущим двери, шансы выбрать машину и козы одинаковы (=50%). Но это не так.

Только не стоит забывать, что это все только теория вероятности.

ps Сам я не являюсь ярым сторонником этой теории, хотя и не являюсь противником.
Во всяком случае до тех пор, пока мне не предложат три двери, за одной из которых будет машина
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 16:23   #4
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,655
По умолчанию

Sazary, вы не правы, потому я предлагаю вам сделать программу для проведение 10 000 испытаний. этим займусь и я.

Давайте на практике докажем, что первое и второе испытание можно рассматривать как независмые.
Alar вне форума Ответить с цитированием
Старый 28.02.2009, 16:29   #5
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Alar, ну, это не я придумал ) Я только изложил суть этого парадокса.

Но программу напишу.. Самому интересно )

ps Имхо для единичного случая вообще не важно какую дверь открывать - шансы будут определяться тем, насколько человеку везет по жизни )
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 16:47   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот, что получилось:
Тактика та, что я описал - игрок всегда меняет выбор.
Итог: при 10000 играх процент выигрыша - 66.6%

Исходник на C++:
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

int mas[3];
int N;
int pobed=0,proigr=0;
double proc;

int fun()
{
 int i,m,k,t;
 m = rand()%3; // - тут машина
 for(i=0;i<3;i++)
  {
   if(i==m) mas[i] = 1; // тут машина
   else mas[i] = 0; // тут коза

  }

 
 m = rand()%3; //выбор игрока

 do
 {
  k = rand()%3;
 } while(k==m||mas[k]==1);  //ведущий открывает дверь

 //меняем выбор
 do
 {
  t = rand()%3;
 } while (t==m || t==k);

 if(mas[t]==1) pobed++;
 else proigr++;
//-- 

}

int main(){

int i,k;
srand(time(NULL));
cout<<"N = ";
cin>>N; cout<<endl;
for(i=0;i<N;i++)
 fun();

cout<<"Mashina: "<<pobed<<endl;
cout<<"Koza: "<<proigr<<endl;
proc = (double)pobed*100/(double)N;
cout.precision(5);
cout<<"Procent pobed: "<<proc<<" %"<<endl;

getch();
return 0;
}
Также прикрепляю екзешник с исходником.

---------
Может, все-таки, эта теория действительно работает? )

ps Еще скрин добавил

pps
Если заменить
Код:
do
 {
  t = rand()%3;
 } while (t==m || t==k);
на
Код:
t = m;
то получится, что игрок не меняет выбор.
При этом вероятность выигрыша - 33.3%

А вот если вместо этого куска написать:
Код:
do
 {
  t = rand()%3;
 } while (t==k);
то после открытия двери ведущим игрок сделает рандомный выбор между двумя оставшимися дверями. Процент выигрыша - 50%
Изображения
Тип файла: jpg Monti.jpg (14.1 Кб, 194 просмотров)
Вложения
Тип файла: rar MontiHoll.rar (114.7 Кб, 28 просмотров)
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]

Последний раз редактировалось Sazary; 28.02.2009 в 16:53.
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 17:12   #7
Alex2008
 
Регистрация: 19.04.2008
Сообщений: 6
По умолчанию

http://www.decisionhelper.com/montyhall.htm
Alex2008 вне форума Ответить с цитированием
Старый 28.02.2009, 18:00   #8
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,655
По умолчанию

Всё. понял, что вас вводит в парадокс.

66 процентов - это вероятность того что вы смените дверь и 33 процента. что оставите ту же. вероятность выиграша же 50 процентов. программа на подходе.
Alar вне форума Ответить с цитированием
Старый 28.02.2009, 18:04   #9
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Alar
66 процентов - это вероятность того что вы смените дверь
Эм...А с чего вы сделали такой вывод?
Вот здесь:
Код:
//меняем выбор
 do
 {
  t = rand()%3;
 } while (t==m || t==k);
происходит выбор второй из оставшихся дверей (с вероятностью 100%).
Игрок меняет дверь всегда.

Собственно, подожду вашей программы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 28.02.2009, 18:20   #10
Alar
Александр
Администратор
 
Аватар для Alar
 
Регистрация: 28.10.2006
Сообщений: 17,655
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Собственно, подожду вашей программы.
Вот и программа, вероятность выигрыша 50%

Можете подогнать под любые условия

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
time:string;
var i: integer;
begin
//размещаем в каждую дверь по козе
memo1.clear;
memo2.clear;

CheckBox1.Checked:=true;
CheckBox2.Checked:=true;
CheckBox3.Checked:=true;

CheckBox1.visible:=true;
CheckBox2.visible:=true;
CheckBox3.visible:=true;

CheckBox1.enabled:=true;
CheckBox2.enabled:=true;
CheckBox3.enabled:=true;
time:=timetostr(now);
time:=time[length(time)];
//секунда в зависимости от которой будет выбран алгоритм размещения
label2.caption:=time;
 // добавление автомобиля
case strtoint(time) of
0: CheckBox1.Checked:=false;
1: CheckBox2.Checked:=false;
2: CheckBox3.Checked:=false;
3: CheckBox3.Checked:=false;
4: CheckBox2.Checked:=false;
5: CheckBox1.Checked:=false;
6: CheckBox2.Checked:=false;
7: CheckBox3.Checked:=false;
8: CheckBox1.Checked:=false;
9: begin
   randomize;
   i:=random(3);
   if i=0 then CheckBox1.Checked:=false;
   if i=1 then CheckBox2.Checked:=false;
   if i=2 then CheckBox3.Checked:=false;
   end;
end

end;

procedure TForm1.Button2Click(Sender: TObject);
var s1:integer;
begin
randomize;
s1:=random(3)+1;

if s1=1 then CheckBox1.enabled:=false;
if s1=2 then CheckBox2.enabled:=false;
if s1=3 then CheckBox3.enabled:=false;
end;

procedure TForm1.Button3Click(Sender: TObject);
var s2,s3:integer;
begin
//в каких дверях может быть козёл, дверь которую удалит ведущий.
if (CheckBox1.enabled=true)and(CheckBox1.Checked=true)then memo1.Lines.Add('1');
if (CheckBox2.enabled=true)and(CheckBox2.Checked=true)then memo1.Lines.Add('2');
if (CheckBox3.enabled=true)and(CheckBox3.Checked=true)then memo1.Lines.Add('3');

//удаление 1 козы
 randomize;

 s2:=memo1.Lines.count;
 label5.caption:='количество не выбранных и доступных к удалению коз ='+inttostr(s2);

  //удаление 1 козы случайно
 s2:=strtoint(memo1.Lines[random(s2)]);
 label3.Caption:='Была удалена коза под номером двери = '+inttostr(s2);

 if s2=1 then  CheckBox1.visible:=false;
 if s2=2 then  CheckBox2.visible:=false;
 if s2=3 then  CheckBox3.visible:=false;

 //повторный выбор, так как мы знали, что нам предоставится 2 шанс выбрать и одна из коз уйдёт
 // нам предоставляется второй выбор из козы и автомобиля
 // до этого мы выбрали с вероятностью 33% автомобиль, так что было логичнее сменить свой выбор,
 //где вероятность 66%  процентов от первого испытания

 // но второе испытание должно произойти с новым выбором из козы и авто
 
 // по сути эти 66 процентов вероятность того что вы смените дверь

 if CheckBox1.visible=true then memo2.Lines.Add('1');
  if CheckBox2.visible=true  then memo2.Lines.Add('2');
   if CheckBox3.visible=true   then memo2.Lines.Add('3');
  randomize;

  s3:=random(2);
 if (memo2.Lines[s3]='1')and(CheckBox1.Checked=false) then SpinEdit1.Value:=SpinEdit1.Value+1;
 if (memo2.Lines[s3]='2')and(CheckBox2.Checked=false) then SpinEdit1.Value:=SpinEdit1.Value+1;
 if (memo2.Lines[s3]='3')and(CheckBox3.Checked=false) then SpinEdit1.Value:=SpinEdit1.Value+1;


 end;


procedure TForm1.Button4Click(Sender: TObject);
var i:integer;
begin
for i:=1 to 10000 do
begin
button1.Click;
button2.Click;
button3.Click;
end;
end;
Вложения
Тип файла: zip montishow.zip (216.3 Кб, 34 просмотров)
Alar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как прописать алиас в коде проги(компонента TABLE, бд парадокс) sashaslam БД в Delphi 2 07.07.2008 13:42