ปัญหาวันเกิด

(..อ่านเนื้อหาข้างล่างประกอบความเข้าใจว่าผมแปะโค้ดอะไรนะครับ)

ไม่ชัวร์ว่าวันนี้จะเรียกว่ามีสาระได้หรือเปล่านะครับ
คือสืบเนื่องจากวันก่อนผมอ่านข่าวนี้ แล้วงงกับคำหนึ่งในเนื้อข่าว.. “Birthday Attack
พอหาอ่านใน Wikiฯ ปรากฏว่าอ้างไปถึงคำว่า “Birthday Problem (ปัญหาวันเกิด)” อีก ซึ่งยิ่งงงแดกเข้าไปใหญ่ ต้องตามไปอ่านอีก

(ผมมองว่า) มันน่าสนใจตรงเนื้อหาของ Birthday Problem ครับ

หากอยากอ่านทฤษฎีจ๋า ไปอ่านใน Wikiฯ/วิกิฯ เลยนะครับ
..ผมขอเกริ่นคร่าวๆ แล้วกัน


ปัญหาวันเกิด‘ เป็นทฤษฎีความน่าจะเป็นที่สมมุติโจทย์ขึ้นมาว่า..

สมมุติสุ่มกลุ่มตัวอย่างมาจำนวน X คน
มีความเป็นไปได้แค่ไหน (กี่ %) ที่ใน X คนเหล่านั้น จะมีอย่างน้อยหนึ่งคู่ (สองคน) ที่บังเอิญมีวันและเดือนเกิดตรงกัน?
(โดยตามโจทย์นี้, X คนที่ว่านี้จะไม่นับวัน/คนที่เกิดวันที่ 29 ก.พ. (เพราะไม่ได้มีทุกปี โอกาสไม่เท่าวันอื่น), รวมถึงคนที่เป็นฝาแฝด ฯลฯ ที่ทำให้ข้อมูลไม่ใช่สุ่มจริงๆ)

ลองมาหาคำตอบที่ 100% กันก่อนครับ..
(100% หมายความว่าถ้าสุ่มคนมาจำนวน X คน ยังไงก็ต้องมีคู่นึงมีวันเกิดตรงกันชัวร์, ในที่นี้เราจะหาค่า X ครับ)

ในหนึ่งปี (ไม่นับปีอธิกรสุรทินที่มี 29 ก.พ. ) มี 365 วัน
X ในที่นี้ก็จะเท่ากับ (365 + 1) = 366 คน
(สมมุติ 365 คนแรก วันเกิดไม่ซ้ำกันเลย, มีทุกวัน วันละหนึ่งคน ..ยังไง๊คนที่ 366 ก็ต้องซ้ำกับใครสักคนใน 365 คนแรกอยู่ดี ..ไม่งงนะครับ)

ทีนี้ถ้าเปลี่ยนเป็น 99% ..ผู้อ่านคิดว่า X ต้องเป็น (อย่างน้อย) กี่คนครับ?
ผมคิดแบบความฉลาดหางอึ่งแว้บแรกว่ายังไงก็ต้อง 200+ แน่ๆ (หรืออย่างน้อยที่สุดก็ไม่น่าจะต่ำกว่า 183 แน่ๆ)

คำตอบจริงๆ คือ ความเป็นไปได้จะเท่ากับ 99% (บวกทศนิยมนิดหน่อย) ที่ X = 57 ครับ
(มีใครประหลาดใจเหมือนตอนผมรู้ครั้งแรกไหมครับ?)

วิธีคำนวณพร้อมคำอธิบายมีอยู่แล้ใน Wikiฯ/วิกิฯ นะครับ ใครสนใจลองอ่านดู


..ทีนี้ กลับมาที่ JSFiddle ที่ผมแปะไว้ข้างต้นครับ
คือพอผมอ่านบทความในวิกิฯ พอรู้เรื่อง ผมก็ลองทดสอบขำๆ ด้วยการจำลองการสุ่มข้อมูลกลุ่มตัวอย่างขึ้นมา
(ใช้ chance.js สุ่มวันเกิดครับ ..ที่จริงใช้สุ่มชื่อคนขึ้นมาด้วย :D)
แล้วลองเช็คดูว่าด้วย X = 57 มันจะเจอ 99% จริงๆ เหรอ?

ซึ่งเท่าที่เช็ค ก็เป็น 99%+ จริงๆ ครับ ลองมาน่าจะถึงร้อยครั้งแล้ว ยังไม่เจอว่าตัวอย่างไม่มีวันเกิดซ้ำกันเลย

..ใครสนใจลองเล่นก็ลองขำๆ ได้ครับ

ป.ล. ผมแสดงตัวเลข % ความน่าจะเป็นตอนสุ่ม X ใน console ด้วยนะครับ ใครสนใจลองเปิด console ในเว็บเบราว์เซอร์ของท่านดูผลประกอบด้วยก็ได้
ล่าสุดผมเอาสิ่งที่ไปแสดงใน console ออกมาแสดงรวมใน JSFiddle แล้วครับ ทำเป็นฟอร์มให้เห็นไปเลย

Leave a Reply

Your email address will not be published. Required fields are marked *