It's about pairs, not you
The trap most people fall into is imagining the question as "what is the chance someone shares my birthday?" — a small chance, roughly 1 in 365 for each other person. But the birthday paradox asks a different question: what is the chance that any two of n people share a birthday? The number of distinct pairs in a group of n grows like n(n-1)/2, which is quadratic, not linear — with 23 people there are already 253 separate chances for a coincidence, and it only takes one of them to hit.
number of pairs: C(n,2) = n(n-1)/2 n = 23 -> 23*22/2 = 253 distinct pairs to check for a match
Dokładna formuła
Zamiast bezpośrednio obliczać prawdopodobieństwo dopasowania, znacznie łatwiej jest obliczyć prawdopodobieństwo braku dopasowania i odjąć je od 1. Dodawaj ludzi po kolei: pierwszy może mieć dowolny dzień urodzenia, drugi musi unikać tego pierwszego (364 spośród 365 możliwości), trzeci musi unikać obu poprzednich (363 spośród 365) i tak dalej.
P(no match) = (365/365) * (364/365) * (363/365) * ... * ((365-n+1)/365) P(match) = 1 - P(no match) n = 23 -> P(match) ~ 50.7% n = 30 -> P(match) ~ 70.6% n = 57 -> P(match) ~ 99.0%
Dlaczego rośnie tak szybko: przybliżenie wykładnicze
Korzystając z przybliżenia 1 - x ~ e^-x dla każdego czynnika, przekształcamy iloczyn na sumę w potędze, co daje czysty, zamknięty wzór szacunkowy, którego wykładnik skaluje się ze składnią n kwadrat – co dokładnie powoduje, że prawdopodobieństwo rośnie szybciej niż intuicja przewiduje. Ustawiając to przybliżenie na 0,5 i rozwiązując dla n, otrzymujemy n ~ sqrt(2 * 365 * ln 2) ~ 22,99, co prawie idealnie zgadza się z prawdziwym progiem wynoszącym 23.
P(match) ~ 1 - exp( -n(n-1) / (2*365) ) n for 50% chance ~ sqrt(2 * 365 * ln 2) ~ 22.99
Beyond birthdays: hash collisions
The same combinatorics govern birthday attacks on hash functions. A hash with b bits of output has 2^b possible values, and by the same reasoning as above, you expect to find two random inputs that collide after generating on the order of the square root of 2^b samples — not 2^b. This is precisely why cryptographic hash functions need roughly double the output length to resist collision attacks compared with what would be needed to resist a brute-force preimage search, and why 128-bit hashes like MD5 were considered broken for collision resistance long before anyone could realistically search anywhere near its full 2^128 space.
Frequently asked questions
Dlaczego 23 osoby wydają się zbyt małe dla 50% szans?
Ludzie instynktownie myślą o prawdopodobieństwie, że ktoś współdzieli ich urodziny, co jest niewielkie (około 1 na 365 w porównaniu). Prawdziwe pytanie brzmi, czy jakiekolwiek dwie osoby spośród 23 mają wspólne urodziny, a z 23 osobami istnieje 253 różnych par, każda z małą szansą na przypadek. To liczba par, rosnąca w przybliżeniu proporcjonalnie do kwadratu wielkości grupy, która sprawia, że prawdopodobieństwo gwałtownie rośnie.
Ile osób potrzeba, aby osiągnąć 99% szans na współdzielone urodziny?
57 osób. Prawdopodobieństwo wystąpienia co najmniej jednej wspólnej daty urodzin rośnie bardzo szybko: około 50,7% dla 23 osób, około 70% dla 30 osób i około 99,9% dla 70 osób, znacznie przed momentem, w którym grupa zbliża się do 366 osób, które gwarantują dopasowanie zgodnie z zasadą gniazdka ptasiego.
Co to ma wspólnego z funkcjami skrótu kryptograficznymi?
Podobnie działają kombinatoryki w przypadku wyników skrótów: przy skrócie o b bitach i więc 2^b możliwych wartościach, spodziewamy się znaleźć dwie losowe wejścia, które skłują się na tę samą wyjściową wartość po około pierwiastku kwadratowym z 2^b próbach, a nie 2^b. Ta 'atak urodzinowa' jest powodem, dla którego funkcje skrótu odporne na kolizje potrzebują w przybliżeniu podwójnej długości bitów niż to, co byłoby potrzebne do odparcia ataku brute-force na znalezienie obrazu z preimage.
Wypróbuj na żywo
Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Birthday Paradox i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.
▶ Otwórz symulację Birthday Paradox