const Big_Award=1;
var Player_Box, Remaining_Box, Chosen_Box:byte;
keep, change:longint;
i:longint;
begin
randomize;
keep:=0;
change:=0;
for i:=1 to 100000 do
begin
Player_Box:=random(3)+1;
repeat
Chosen_Box:=random(3)+1;
until (Chosen_Box<>Player_Box) and (Chosen_Box<>Big_Award);
if (Player_Box=1) and (Chosen_Box=2) then Remaining_Box:=3;
if (Player_Box=1) and (Chosen_Box=3) then Remaining_Box:=2;
if (Player_Box=2) and (Chosen_Box=1) then Remaining_Box:=3; {never happens}
if (Player_Box=2) and (Chosen_Box=3) then Remaining_Box:=1;
if (Player_Box=3) and (Chosen_Box=1) then Remaining_Box:=2; {never happens}
if (Player_Box=3) and (Chosen_Box=2) then Remaining_Box:=1;
if Player_Box=Big_Award then inc(keep);
if Remaining_Box=Big_Award then inc(change);
end;
writeln('Keep:',keep,' Change:',change);
readln;
end.
И тъй, при стартиране на програмата, при мен се изведе следното:
Keep: 33357 Change: 66643
Абсолютно ясно е, че е по-добре да подменим кутиите… Но 66-ците да не бързат да се радват 🙂 Премахнах условието (and Chosen_Box<>Big_Award) и стартирах отново. Това означава, че сега не правя проверка дали след като играчът отвори кутията в нея не е голямата награда от 10000….000 лв. Резултатът беше:
Keep: 33636 Change: 33234
А, ами къде отидоха останалите 33130 случая? Ами при тях просто играчът отваря голямата награда! Т.е. сумарно шансът е 50 на 50… Ето, че и 50-ците имат повод за радост. И какво се получава в крайна сметка?
Имаме два момента: преди и след отварянето на кутията. Преди отварянето (момент 1) на кутията шансът да сме избрали голямата награда е 1/3. След отварянето на кутията (момент 2) с 0,20 ст. остават две кутии и шансът е 1/2, т. е. 50 на 50. Заблудата идва от това, че ако вече сме в момент 2, шансът за печалба при размяна на кутиите, отнесен към първоначалният момент 1 е 2/3, а към настоящият момент 2 е 1/2.
Тоест, правилният отговор е ИМАМЕ СДЕЛКА! Но шансът е 50 на 50 🙂
Шансът би бил 66.67%, ако узнаем без риск за някоя непечеливша кутия. Това става в случай с други игри и други правила, при които водещият или друг играч разкриват непечеливш жребий/кутия/карта/врата/топче/…, както е при Monty Hall-проблемът…
Благодаря на всички, които писаха коментари… И се надявам, че пак ще пишат в следващите задачки. Много сте умни, гордея се с вас! 🙂
И така – краен отговор: 50 на 50!
Просто и логично. В заключение ще кажа само, че на мен задачката много ми хареса и ме накара няколко пъти да се усъмня във всичко.
„Доколко човек е цивилизован зависи не от силната му вяра,
а от готовността му да се съмнява…“
– Henry Louis Mencken
Така става когато хората си нямат работа 😛
Mnogo interesno po kakuv slojen nachin si stignal do izvoda che ako ima 2 kutii shansa da otvorish taia s parite e 50% kakto i da go vurtim
mislia che 10 godishnia mi bratovched shte se spravi dosta po-burzo, a toi dori ne moje da pishe na Pascal
Задачата е ясно поставена и е същата като за колата и козата. Просто заменяме колата с голямата награда и стотинките с кози. Това че играча нацелва в случая да елиминира непечеливша кутия си е същото като водещия да му я c елиминира. В условието на задачата си е казано ясно че играча няма шанс да елиминира печелившата кутия т.е. „Chosen_Box<>Big_Award“. От там нататък статистически погледнато имаш по-голям шанс ако смениш, както е описано в уикипедия. Доста неинтуитивно, но така е с по-сериозната статистика. Ето пример с birthday paradox, който твърди, че от 23ма човека вероятността двама да са родени на един и същи ден, е повече от 50%, а за е 57 – повече от 99%. Това на теория, а на практика няма значение какво решаваш, освен ако не играеш 100000 пъти сделка или не.
Ето и ВИЦ по въпроса:“Командващ парашутен полк обяснява на парашутистите преди първия им скок: -Длъжен съм да ви предупредя, че 1 на 100 парашута не се отваря… Ама вие няма какво да се притеснявате, защото вие сте има-няма 30 човека.“
eto oshte edin nerazbral
tozi pone e anonimen
Подобен случай имаше в сериалчето „Криминални уравнения“
Там големият мозък твърдеше, че ако размениш кутиите, шансът е по-голям. Явно тази тема е доста оспорвана.
Задачата е ясно поставена, и няма нищо общо с козата и колата. В случая с козата водещият отваря една от двете останали врати и отваря коза – една от двете кози. В тоя случай имаме 10 стотинки, и 20 стотинки.. и сме 100% сигурни, че от останалите 2 кутии ще отвориш 20ст. Което пък означава, че в никъкъв случай не може първоначално в кутията ти да е имало 20ст.
Т.Е. В задачата с козите ти отварят една от двете… но не се казва точно коя от двете кози, което пък не изключва възможността всяка от тях да е първоначално избраната от теб.
Ако кръстим козите 10 и 20 стотинки и кажем, че задачите са еднакви, изпускаме даденото ни по условие, че 20 в никъкъв случай не може да е първоначалният ти избор. И тук гърмиш:
В алгоритъма си имаш константа Big_award = 1… Къде е константата TwentyCents = 2? Някъде имаш ли проверка, за това, дали Player_Box е различно от TwentyCents??? Все пак условието на задачата го изключва.
Проверката е тук:
until (Chosen_Box<>Player_Box) and (Chosen_Box<>Big_Award);
Анализирай това (JavaScript):
// options:
var boxes = Array(0.1, 0.2, 1000000);
var change = 0;
var keep = 0;
for (var i = 0; i < 100000; i++) { // izbirame sluchaino kutiq koqto ne e 20st. – 10st ili 10000000lv:
if (Math.random() < 0.5) {
// 50% 10st
var FirstChoosen = 0;
} else {
// 50% 1000000
var FirstChoosen = 2;
}
// otwarqme kutiqta sys 20 stotinki – kutiq 1
if (FirstChoosen == 0) {
// ako sme izbrali kutiq 0 – 10st. ostawashtata e 2 – 10000000
var LastBox = 2;
} else if (FirstChoosen == 1) {
// towa e newuzmojno
} else if (FirstChoosen == 2) {
// ako sme izbrali 1000000 ostawashtata e 0 – 10st
var LastBox = 0;
}
if (FirstChoosen == 2) {
// nashata kutiq pecheli… suotwetno q pazim:
keep++;
}
if (LastBox == 2) {
// nagradata e w poslednata ostanala kutiq… suotwetno trqbwa da smenim:
change++;
}
}
alert(„keep: “ + keep + “ / change: “ + change);
Ами… първо много лош код! Цикъл до 100000, за да се избере една от две възможни кутии?! И какво ще стане, ако 100000 пъти се пада все една и съща – програмата ти гърми.
Иначе прави същото като моята без условието Chosen_Box<>Big_Award, кое трябва да анализирам не разбрах?!
Не мога да форматирам кода в коментар…
Освен това коментарът ти за рандома ми е подобен на:
Ами ако:
repeat
Chosen_Box:=random(3)+1;
until (Chosen_Box<>Player_Box) and (Chosen_Box<>Big_Award);
Зацикли, защото random(3)+1 винаги генерира стойността на Player_Box или Big_Award?
В поста си беше написал с големи букви „ИМАМЕ СДЕЛКА“ което ме обърка, че си приел 33% / 66% за верен, а всъщност отговорът е, че няма значение. 50% / 50% Така както си го дообяснил надолу, и както съм съгласен с теб, и както не бях допрочел. (за което се извинявам)
Цялата работа започна от там, че програмата ти връща резултат 33% / 66% в първоначалният си вид, но в първоначаалният си вид решава задачата с козите, а тя пък от своя страна е различна от поставената задача с .10, .20 и 1000…000лв. Аз спорих с Ива, че двете задачи са различни, тя ми каза да ти видя алгоритъма, аз го видях и се оказа, че му трябва промяна. Такава каквато си направил после. И която, както ти каза, го прави еквивалентен с моя. Ива ми каза да ти оставя коментар и аз го направих… Предполагам ако си беше написал програмата, така че при 100000 теста да връща 50000 / 50000 а не 33333 / 33333 щеше да изглежда по-нормално.
Няма смисъл да говорим едно и също, но да не се разбираме и да се караме. Някой от читателите на блога ти все още не са осъзнали, защо задачата ти не е като тази с козите, и защо ако отговорът на задачат с козите е 66% в полза на смяна, то в твоята е 50%.
Ами всъщност, няма нужда да му мислим толкова… И в двата случая, ако сменим кутиите, шансът ни не е по-малък, така че защо да не кажем ИМАМЕ СДЕЛКА?
Божо каза:
Подобен случай имаше в сериалчето „Криминални уравнения“
Там големият мозък твърдеше, че ако размениш кутиите, шансът е по-голям. Явно тази тема е доста оспорвана.
Край на цитата.
„Големият мозък“ е прав. Да, случаят е подобен, но и същевременно е съвсем различен.
Задачата в „Криминални Уравнения“ беше точно The Monty Hall Problem. Шансът наистина се удвоява, ако смениш вратите – прочетете статията в уикипедия, за да се убедите сами. За „Сделка или Не“ нищо не мога да твърдя :]