โจทย์มีอยู่ว่า

 Monte Hall เป็นเกมทีวีชื่อดังเมื่อหลายสิบปีก่อน ซึ่งหลังจากผู้เข้าแข่งฝ่าด่านหฤโหดมาได้แล้ว ต่อไปก็จะเป็นรอบโบนัส
พิธีกร: "เอาละครับ ข้างหน้านี้มีประตูสามบาน หนึ่งในนั้นมีรถยนต์สุดหรูรอคุณอยู่ ส่วนอีกสองบานมีค่ารถกลับบ้าน 20 บาทรออยู่ข้างในครับ คุณจะเลือกบานไหนดีครับ"
ผู้เข้าแข่ง: "ขอบานแรกครับ"
พิธีกร: "คุณแน่ใจเหรอครับ เอาอย่างนี้ ผมจะเปิดให้คุณดูบานนึง"
พิธีกรเดินไปเปิดบานที่สอง มีตังค์ 20 บาทอยู่
พิธีกร: "คุณจะเปลี่ยนใจไหมครับ?"
 
คุณจะเปลี่ยนใจไหมครับ?

 

ข้างล่างนี่เป็นแนวคิดของผม อย่าเลื่อนลงไป จนกว่าจะลองคิดเองแล้วนะครับ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ลองคิดเองรึยัง

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

เอ้ะ! บอกให้คิดเองก่อน

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

เอาล่ะ ถึงแล้วครับ = =

แนวคิดของผม คือเราควรจะเปลี่ยนประตูครับ ทำไมน่ะเหรอ?

ลองคิดดูนะครับ มีประตูอยู่สามบาน สองบานเป็นประตูที่ผิด อีกบานนึงถูก หมายความว่าการเลือกครั้งแรกของเรามีโอกาสเลือกประตูที่ผิดถึง 66.666% ด้วยกัน พอเราเลือกแล้ว พิธีกระตัดบานที่ผิดออกไปแน่ๆ 1 บาน เพราะฉะนั้นบานที่เหลือจะมีโอกาสเป็นบานที่ถูก 66.6666% เช่นกัน เพราะงั้นเราควรจะเปลี่ยน

งงล่ะสิ เพื่อนผมเถียงว่า แล้วไม่ใช่ 50 50 เหรอ ในเมื่อเราต้องเลือกใหม่อยู่ดี ว่าจะเอาบานไหน

คืองี้ครับ ผมแยกคิดเป็นสองเคส คือ เราเปลี่ยนประตูแน่ๆ กับไม่เปลี่ยนแน่ๆ

กรณีเปลี่ยนแน่ๆ

สมมติประตูสามบานคือ A B C สมมติผมเลือก C แปลว่า C มีโอกาสเป็นบานถูก 33.3333% แปลว่าสองบานที่เหลือ มีโอกาสที่จะมีบานที่ถูกอยู่ในนั้น 66.6666%  อันนี้เข้าใจนะครับ

พิธีกรจะตัดบานที่ผิดออกแน่ๆ และต้องไม่ใช่บานที่เราเลือก แปลว่าตอนนี้ 1 ในสองบานนั้นถูกตัดออกไปบานนึง เพราะฉะนั้นโอกาสที่บานที่เหลือจะเป็นบานที่ถูกคือ 66.6666% จึงควรจะเปลี่ยนประตู

ในอีกกรณ๊ ถ้าเราไม่เปลี่ยนแน่ๆ โอกาสที่บานที่เราเลือกแต่แรกจะถูกก็จะเท่ากับ 33.3333% เท่าเดิม

สังเกตดีๆ นะครับ คือผมไม่ได้เอาความน่าจะเป็นจากการเลือกครั้งที่สองหลังพิธีกรเปิดให้ดูบานนึงเข้ามาคิด เพราะกำหนดไว้แต่แรกแล้วว่า จะเปลี่ยนแน่ๆ หรือ จะไม่เปลี่ยนแน่ๆ

ผมยังไม่แน่ใจว่าวิธีนี้ถูกหรือเปล่านะครับ แต่เพื่อนผมก็ยังยืนยัน 50 50 เท่าเดิม โลกแตกมากครับตอนนี้

ปล ช่วยคิดหน่อยครับ

ปล2 เปลี่ยนธีมบล็อกอีกแล้วครับ ถ้าใครใช้อะไรเปิดแล้วการแสดงผลมีปัญหา ช่วยบอกไว้ด้วยครับ ขอบคุณครับ

ปล3 ครั้งหน้าจะอัพเรื่องทำ cg ละครับ จะได้เข้ากับ title หน่อย = =

Comment

Comment:

Tweet

http://en.wikipedia.org/wiki/Monty_Hall_problem

เจอโดยบังเอิญ

#10 By chayanin (124.121.113.167) on 2008-09-02 17:57

เง้อ ตอนหลังเราก็ไม่ได้ยืนยันนะ

แค่พยายามหาคำอธิบายว่า ทำไมมันต่างกัน เหอๆ

(อันนี้อ้างจากที่คุยกับพี่อิ๊กเมื่อวานด้วยนะ)

#9 By chayanin (124.121.113.167) on 2008-09-01 22:39

ไอ้ที่แกพยายามเล่น โดยใช้ไพ่มะวานป่าววะอั้ม

#8 By ++Rene_Reclu$e++ on 2008-09-01 12:28

ลืมแล้วอะ sad smile

#7 By Boon (202.28.180.202) on 2008-09-01 03:24

พูดว่าแต่ละคนได้ยังไง ต้องแต่ละเสียคนสิถึงจะถูก

ปล.ก็แค่อ้างอิงความรู้ตามสายที่ได้เรียนมา

#6 By เสียคน (124.121.107.15) on 2008-09-01 01:54

แต่ละคน มาอย่างเสียคน = =''

#5 By Xzodust on 2008-09-01 01:50

เป็นไปตามนี้แหละ
http://o2perfect.o2sx.com/upload/stat1.gif
http://o2perfect.o2sx.com/upload/stat2.gif
http://o2perfect.o2sx.com/upload/stat3.gif

#4 By เสียคน (124.121.107.15) on 2008-09-01 01:33

Quod Erat Demonstradum.

#3 By เสียคน (124.121.107.15) on 2008-09-01 01:02

อะ ลองเขียนโปรแกรมพิสูจน์มันซะเลย
using System;
class thebox
{
//create empty box 0 0 0
public static int[] box = new int[3]{0,0,0};

//store variable
static int round = 0;
static int correct = 0;
static int changecorrect = 0;
static int rand = 0;

static void Main()
{
Random randnum = new Random();

//input how many round
Console.Write("How many round : ");
int length = int.Parse(Console.ReadLine());

//loop for xxx round
for (int n = 0; n < length; n++)
{
//random the correct box and let it = 1
int num=randnum.Next(3);
box[num] = 1;
Console.WriteLine("correct box is{0}", num);

//random a choice
int select = randnum.Next(3);
Console.WriteLine("select number{0}", select);


//cut the wrong one out
while(true)
{
rand = randnum.Next(3);
if(rand!=select&&box[rand]==0)
{ box[rand] = 2; Console.WriteLine("cut number{0}",rand); break; }
}

//check.. is the selected box correct?
if(box[select]==1){correct++;}

//check.. if changing box will make it correct..
else for (int i = 0; i < 3; i++)
{
if (i != select && i != rand) { if (box[i] == 1)changecorrect++; }
}
Console.WriteLine();

//clear value
box[0] = 0; box[1] = 0; box[2] = 0; round++;

}//end loop

//result
Console.WriteLine("round {0}",round);
Console.WriteLine("correct {0}",correct);
Console.WriteLine("change correct {0}",changecorrect);
Console.ReadLine();
}
}
แล้วลองรันใส่ไปสิบล้านรอบ
ได้ผลดังนี้
round 10000000
correct 3333123
change correct 6666877
จะเห็นว่าเปลี่ยนแล้วถูกประมาณ66.67%ดังนั้นถูกแล้วแหละอั้ม

#2 By gimkim (58.8.157.239) on 2008-09-01 00:48

อั้มถูกแล้วครับ

#1 By Zerothman (58.64.96.133) on 2008-08-31 23:46