mindstalk: (Default)
Yeah, I'm behind on posting news links and such. Moving on!

Given 11 people, what is the probability that 3 of the 11 share the same birthday? Assuming uniform distribution of birthdays in the population, of course.

This seems a lot harder than the classic problem of finding whether at least two have the same birthday. I debunked a couple of answers, came up with a nice one of my own for "at least 3 share, and I don't care about anyone else" which came nowhere near simulation, then someone else came up with an answer for "3 people share a birthday, and the other 8 don't share any birthdays" which matched debugged simulation, and that one's actually fairly easy in retrospect (in my defense, it wasn't the problem I'd been thinking about.) I still don't know why I'm so far off for the "at least" case.

Date: 2010-02-18 17:34 (UTC)From: [identity profile] oniugnip.livejournal.com
ext_110843: (Default)
I like that you did this in simulation!

(would you post the code?)

Date: 2010-02-18 17:46 (UTC)From: [identity profile] mindstalk.livejournal.com
Well, I did math first, until someone on gale did simulation and got wildly different numbers, so I did sim and got the same wildly different number.

It's nothing much:
from random import *
triplets=0
for j in xrange(100000):
    bdays={}
    for i in range(11):
        b=randint(1,365)
        if b in bdays:
            bdays[b]+=1
        else:
            bdays[b]=1
#    if max(bdays.values()) == 2 and len(bdays)==8:
    if max(bdays.values()) >= 3 
       triplets+=1

print triplets


Commented line is for finding the probability of exactly 3 pairs, vs. at least one triplet-or-more.

First version was less elegant and ultimately less flexible:

from random import *
triplets=0
for j in xrange(100000):
    bdays=[]
    for i in range(11):
        bdays.append(randint(1,365))
    if len(bdays)==len(set(bdays)):
        continue
    else:
        for i in range(11):
            match=0
            for k in range(i+1,11):
                if bdays[i]==bdays[k]:
                    match+=1
            if match>=2:
                triplets+=1

print triplets


which actually inflates 'match' but for these purposes it doesn't matter because we only care about the threshold.

Python code, if that's not obvious.
Edited Date: 2010-02-18 17:48 (UTC)

Profile

mindstalk: (Default)
mindstalk

June 2025

S M T W T F S
123 45 67
89 10 1112 1314
15161718192021
22232425262728
2930     

Most Popular Tags

Expand Cut Tags

No cut tags

Style Credit

Page generated 2025-06-18 07:07
Powered by Dreamwidth Studios
OSZAR »