Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Birthday Paradox ใน Python


Birthday Paradox ( парадокс วันเกิด ) เป็นปัญหา nổiดมากในส่วนของความน่าจะเป็น

ข้อความโจทย์ - มีหลายคนในงานปาร์ตี้วันเกิด บางคนมีวันเกิดตรงกัน (collision) เราต้องการหาจำนวนคนประมาณในงานปาร์ตี้วันเกิด โดยอิงจากความน่าจะเป็นที่มีวันเกิดตรงกัน

ในความน่าจะเป็น เรารู้ว่าความน่าจะเป็นของการได้หัวก้อยคือ 1/2 เหมือนกันถ้าเรามีเหรียญบางอย่าง ความน่าจะเป็นของการได้หัว 10 ครั้งคือ 1/100 หรือ 0.001

มาทำความเข้าใจแนวคิดกัน

โอกาสที่สองคนจะมีวันเกิดต่างกันคือ $$\frac{364}{365}$$ ซึ่งคือ $$\lgroup1-\frac{1}{365}\rgroup$$ ในปีที่ไม่ใช่ปีอธิกสุรทิน

ดังนั้น เราสามารถพูดได้ว่าคนแรกมีความน่าจะเป็นของวันเกิดเฉพาะคือ '1' และสำหรับคนอื่นๆ จะต่างกัน ซึ่งคือ

P(different) = $$1\times\lgroup1-\frac{1}{365}\rgroup\times\lgroup1-\frac{2}{365}\rgroup\times\lgroup1-\frac{3}{365}\rgroup\times\lgroup1-\frac{4}{365}\rgroup...$$

ดังนั้น

P(same) = 1 − P(different)

ตัวอย่าง จำนวนคนที่มีวันเกิดตรงกันสำหรับความน่าจะเป็น 0.70

N = √2 × 365 × log(1-1/p)

N = √2 × 365 × log(1-1/0.70) = 30

ดังนั้น จำนวนคนประมาณที่มีวันเกิดตรงกันคือ 30 คน

ตัวอย่าง

import math
def findPeople(p):
    return math.ceil(math.sqrt(2*365*math.log(1/(1-p))))
print(findPeople(0.70))

ผลลัพธ์

การรันโค้ดจะได้ผลลัพธ์ดังนี้

30