Birthday paradox เป็นปัญหาที่มีชื่อเสียงมากในส่วนของความน่าจะเป็น ปัญหานี้ระบุว่า
มีคนหลายคนในงานปาร์ตี้วันเกิด บางคนมีวันเกิดซ้ำกัน (birthday collision) เราต้องหาจำนวนคนประมาณในงานปาร์ตี้วันเกิดโดยอิงจากการมีวันเกิดเดียวกัน
ในความน่าจะเป็น เรารู้ว่โอกาสได้หัวก้อยคือ 1/2 เหมือนกับถ้าเรามีเหรียญบางอัน โอกาสได้ 10 หัวคือ 1/100 หรือ 0.001
มาทำความเข้าใจแนวคิด
โอกาสของสองคนที่มีวันเกิดต่างกันคือ
364/365 ซึ่งคือ 1-1/365 ในปีที่ไม่ใช่ปีอธิกสุรทิน
ดังนั้นเราสามารถพูดได้ว่าคนแรกมีความน่าจะเป็นของวันเกิดเฉพาะคือ '1' และสำหรับคนอื่นๆ จะแตกต่างกันซึ่งคือ
P(ต่างกัน) = 1 × (1-1/365) × (1-2/365) × (1-3/365) × (1-4/365) ......
ดังนั้น P(เหมือนกัน) = 1 - P(ต่างกัน)
ตัวอย่าง
จำนวนคนที่มีวันเกิดเดียวกันซึ่งความน่าจะเป็นคือ 0.70
N = √(2 × 365 × log(1/(1-p)))
N = √(2 × 365 × log(1/(1-0.70))) = 30
ดังนั้น จำนวนคนประมาณที่มีวันเกิดเดียวกันคือ 30
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int findPeople(double p) {
return ceil(sqrt(2 * 365 * log(1 / (1 - p))));
}
int main() {
printf("%d", findPeople(0.70));
return 0;
}
ผลลัพธ์
30