Парадокс Монти Холла

Как-то гуляя по статьям на википедии я наткнулся на одну интересную статью — Парадокс Монти Холла. Это задача теории вероятностей, решение которой, на первый взгляд, противоречит здравому смыслу.

Парадокс Монти Холла на php
Хотя я отлично понял доказательство этой теории, но было интересно проверить распределение результатов на практике. Простенький скрипт на PHP, который показывает результаты под катом.

< ?
function get_krol($mod)
   {
       // Три пустые двери
       $arr=array(0,0,0,);

       // Кладем кролика за одну из них.
       $i=rand(0,2);
       $arr&#91;$i&#93;=1;

       // Делаем первый выбор
       $i=rand(0,2);

       // Убираем 1 дверь без кролика
       $y=0;
       while($y&lt;3)
           {
               if($i!=$y)
                   {
                       $arr_tmp&#91;&#93;=$arr&#91;$y&#93;;
                   }
               $y++;
           }

       // Смотрим какую именно дверь убрать
       if($arr_tmp&#91;0&#93;==0 and $arr_tmp&#91;1&#93;==0)
           {
           $arr_final&#91;1&#93;=0;
           }
       if($arr_tmp&#91;0&#93;==1 OR $arr_tmp&#91;1&#93;==1)
           {
           $arr_final&#91;1&#93;=1;
           }

       // Первоначальное решение
       $arr_final&#91;0&#93;=$arr&#91;$i&#93;;

       // Не меняет решение
       if($mod==0)
           {
           if($arr_final&#91;0&#93;==1){return 1;}
           if($arr_final&#91;0&#93;==0){return 0;}
           }
       //Меняет  решение
       if($mod==1)
           {
           if($arr_final&#91;1&#93;==1){return 1;}
           if($arr_final&#91;1&#93;==0){return 0;}
           }
   }

// Не меняем решение
$u=0;
while($u&lt;100000)
   {
   $total=$total+get_krol(0);
   $u++;
   }
$total = ($total / 100000) *100;
echo "Не меняя $total% <br>";

// Меняем решение
$u=0;
$total=0;
while($u&lt;100000)
   {
   $total=$total+get_krol(1);
   $u++;
   }
$total = ($total / 100000) *100;
echo "Меняя: $total%";
?>

Leave a Reply