Это проблема подсчета: есть возможных назначений b дней рождения n людям. Из них пусть q ( k ; n , b ) будет количеством назначений, для которых ни один день рождения не является общим для более чем k человек, но по крайней мере один день рождения фактически является общим для k человек. Вероятность, которую мы ищем, может быть найдена путем суммирования q ( k ; n , b ) для соответствующих значений k и умножения результата на b - n .bnbnq(k;n,b)kkq(k;n,b)kb−n
Эти подсчеты можно найти точно для значений менее нескольких сотен. Тем не менее, они не будут следовать какой-либо простой формуле: мы должны рассмотреть шаблоны способов, которыми могут быть назначены дни рождения . Я проиллюстрирую это вместо общей демонстрации. Пусть n = 4 (это наименьшая интересная ситуация). Возможности:nn=4
- У каждого человека есть уникальный день рождения; код {4}.
- Ровно два человека делят день рождения; код {2,1}.
- Два человека имеют один день рождения, а два других - другой; код {0,2}.
- Три человека делят день рождения; код {1,0,1}.
- Четыре человека делят день рождения; код {0,0,0,1}.
Как правило, код представляет собой набор подсчетов, чей k- й элемент определяет, сколько различных дат рождения совместно используются ровно k людьми. Так, в частности,{a[1],a[2],…}kthk
1a[1]+2a[2]+...+ka[k]+…=n.
Обратите внимание, что даже в этом простом случае есть два способа достижения максимум двух человек на день рождения: один с кодом а другой с кодом { 2 , 1 } .{0,2}{2,1}
Мы можем напрямую посчитать количество возможных назначений дня рождения, соответствующих любому данному коду. Это число является произведением трех терминов. Одним из них является коэффициент многочлена; он подсчитывает число способов разбиения людей в течение [ 1 ] группы 1 , [ 2 ] группы из 2 , и так далее. Поскольку последовательность групп не имеет значения, мы должны разделить этот множитель коэффициента на a [ 1 ] ! [ 2 ] ! ⋯na[1]1a[2]2a[1]!a[2]!⋯; его взаимностью является второй член. Наконец, выстроите группы в группы и назначьте им каждый день рождения: в первой группе есть кандидатов, во второй b - 1 , и так далее. Эти значения должны быть умножены вместе, образуя третий член. Он равен «факториальному произведению» b ( a [ 1 ] + a [ 2 ] + ⋯ ), где b ( m ) означает b ( b - 1 ) ⋯ ( b - m + 1bb−1b(a[1]+a[2]+⋯)b(m) .b(b−1)⋯(b−m+1)
Существует очевидная и довольно простая рекурсия, связывающая счет для шаблона с счетом для шаблона { a [ 1 ] , … , a [ k - 1 ] } . Это позволяет быстро рассчитывать значения для скромных значений n . В частности, a [ k ] представляет собой [ k ] даты рождения, разделенные ровно k{a[1],…,a[k]}{a[1],…,a[k−1]}na[k]a[k]kлюди каждый. После этого [ к ] группы K людей были взяты из русских людей, которые могут быть сделаны в х различных способах (скажем), остались подсчитать количество способов достижения шаблона { [ 1 ] , ... , a [ k - 1 ] } среди оставшихся людей. Умножение этого на х дает рекурсию.a[k]knx{a[1],…,a[k−1]}x
Я сомневаюсь, что существует формула замкнутой формы для , которая получается суммированием отсчетов для всех разбиений n, чей максимальный член равен k . Позвольте мне привести несколько примеров:q(k;n,b)nk
С (пять возможных дней рождения) и n = 4 (четыре человека), мы получаемb=5n=4
q(1)q(2)q(3)q(4)=q(1;4,5)=360+60=120=420=80=5.
Откуда, например, вероятность того, что три или более человек из четырех имеют одинаковый «день рождения» (из возможных дат), равна ( 80 + 5 ) / 625 = 0,136 .5(80+5)/625=0.136
В качестве другого примера возьмем и n = 23 . Вот значения q ( k ; 23 , 365 ) для наименьшего k (только для шести подписей):b=365n=23q(k;23,365)k
k=1:k=2:k=3:k=4:k=5:k=6:k=7:k=8:0.492700.4945920.01253080.0001728441.80449E−61.48722E−89.92255E−115.45195E−13.
Используя эту технику, мы можем легко вычислить, что есть вероятность 50% (по крайней мере) столкновения с трехсторонним днем рождения среди 87 человек, 50% вероятность столкновения с четырьмя путями среди 187 и 50% вероятность пятистороннее столкновение среди 310 человек. Этот последний расчет начинает занимать несколько секунд (в любом случае в Mathematica), потому что количество рассматриваемых разделов начинает увеличиваться. Для существенно большего нам нужно приближение.n
Одно приближение получено с помощью распределения Пуассона с ожиданием , потому что мы можем рассматривать присвоение дня рождения как возникающее из b почти (но не совсем) независимых переменных Пуассона, каждая с ожиданием n / b : переменная для любого данного возможного дня рождения описывает, сколько из русских людей имеют этот день рождения. Таким образом, распределение максимума приблизительно равно F ( k ) b, где F - CDF Пуассона. Это не строгий аргумент, поэтому давайте проведем небольшое тестирование. Аппроксимация для n = 23 , бn/bbn/bnF(k)bFn=23 даетb=365
k=1:k=2:k=3:k=4:0.4987830.4968030.0141870.000225115.
Сравнивая с предыдущим, вы можете видеть, что относительные вероятности могут быть низкими, когда они малы, но абсолютные вероятности достаточно хорошо приближены к 0,5%. Тестирование с широким диапазоном и b показывает, что аппроксимация обычно примерно такая же.nb
Для того, чтобы обернуть, давайте рассмотрим исходный вопрос: принять (число наблюдений) и б = 1n=10,000 (количество возможных «структур», примерно). Примерное распределение для максимального количества «общих дней рождения»b=1000000
k=1:k=2:k=3:k=4:k>4:00.8475+0.1520+0.0004+<1E−6.
(Это быстрый расчет.) Очевидно, что наблюдение одной структуры в 10 раз из 10000 было бы весьма значительным. Поскольку и b оба большие, я ожидаю, что приближение здесь будет работать достаточно хорошо.nb
Между прочим, как отметил Шейн, симуляции могут обеспечить полезные проверки. Симуляция Mathematica создается с помощью функции
simulate[n_, b_] := Max[Last[Transpose[Tally[RandomInteger[{0, b - 1}, n]]]]];
который затем повторяется и суммируется, как в этом примере, который выполняет 10000 итераций с , b = 1n=10000 корпус:b=1000000
Tally[Table[simulate[10000, 1000000], {n, 1, 10000}]] // TableForm
Его вывод
2 8503
3 1493
4 4
Эти частоты близко согласуются с теми, которые предсказаны в приближении Пуассона.