কম্পিউটার টিউটোরিয়াল

পাইথনে বার্থডে প্যারাডক্স (Birthday Paradox) - একই জন্মদিনের প্রোবাবিলিটি থেকে লোকজন সংখ্যা বের করুন

সমস্যা বিবরণ

বার্থডে প্যারাডক্স হলো একটি বিখ্যাত প্রোবাবিলিটি সমস্যা: একটি গ্রুপে কতজন লোক থাকলে তাদের মাঝপথে কমপক্ষে দুজনের জন্মদিন একই হওয়ার প্রোবাবিলিটি নির্দিষ্ট মাত্রা (যেমন ৭০%) অতিক্রম করে? স Tunisian সূত্র ব্যবহার করে আনুমানিক লোক সংখ্যা বের করা।

গাণিতিক সূত্র

নন-লিপ ইয়ারে (৩৬৫ দিন) দুজনের জন্মদিন আলাদা হওয়ার প্রোবাবিলিটি:

P(ডিফারেন্ট) = 1 × (1 - 1/365) × (1 - 2/365) × ... × (1 - (n-1)/365)

কমপক্ষে এক জোড়ার জন্মদিন একই হওয়ার প্রোবাবিলিটি:

P(সেইম) = 1 - P(ডিফারেন্ট)

বড় n এর জন্য এপ্রক্সিমেশন (টেইলর সিরিজ ব্যবহার করে):

P(সেইম) ≈ 1 - e^(-n²/(2×365))

এই থেকে n বের করলে:

n ≈ √(2 × 365 × ln(1/(1-p)))

পূর্ণ কোড উদাহরণ

import math

def findPeople(p):
    """
    p = কমপক্ষে এক জোড়ার জন্মদিন একই হওয়ার প্রোবাবিলিটি (0 থেকে 1)
    রিটার্ন: আনুমানিক লোক সংখ্যা (সিলিং করে পূর্ণসংখ্যা)
    """
    if p <= 0 or p >= 1:
        return 0
    n = math.sqrt(2 * 365 * math.log(1 / (1 - p)))
    return math.ceil(n)

# টেস্ট: ৭০% প্রোবাবিলিটির জন্য
prob = 0.70
people = findPeople(prob)
print(f"প্রোবাবিলিটি {prob*100}% হলে আনুমানিক লোক সংখ্যা: {people}")

# আরও কিছু উদাহরণ
for p in [0.50, 0.90, 0.99]:
    print(f"P={p*100:.0f}% → n ≈ {findPeople(p)} জন")

আউটপুট

প্রোবাবিলিটি 70.0% হলে আনুমানিক লোক সংখ্যা: 30
P=50% → n ≈ 23 জন
P=90% → n ≈ 41 জন
P=99% → n ≈ 70 জন

ব্যাখ্যা

  • ২৩ জনে ৫০% চান্স, ৩০ জনে ৭০% চান্স, ৪১ জনে ৯০% চান্স।
  • এটি কাউন্টার-ইনটিউইটিভ (বিরোধী অনুমান) কারণ ৩৬৫ দিনে মাত্র ২৩ জনে ৫০% চান্স অনেকের কাছে অবিশ্বাস্য লাগে।
  • সুনির্দিষ্ট গণনার জন্য একজেক্ট ফর্মুলা ব্যবহার করুন, এপ্রক্সিমেশন বড় n এর জন্য ভালো কাজ করে।
  1. পাইথনে issuperset() ফাংশন

  2. পাইথনে আন্ডারস্কোর (_) এর ব্যবহার

  3. পাইথনে Quine প্রোগ্রাম (স্ব-প্রजनনকারী কোড)

  4. পাইথনে জন্মদিন রিমাইন্ডার অ্যাপ্লিকেশন