Strona główna Prawdopodobieństwo Problem kolekcjonera kuponów — oczekiwana liczba losowań

🎟️ Problem kolekcjonera kuponów — oczekiwana liczba losowań

Zbierz wszystkie N kuponów w losowaniach: patrz, jak wypełnia się siatka, porównaj średnie empiryczne z E[T]=N·H_N oraz N·ln N+γN i obejrzyj histogram czasu ukończenia.

Prawdopodobieństwo2DŁatwy60 FPS
coupon-collector ↗ Otwórz osobno
Interfejs samej symulacji jest w języku angielskim.

O problemie kolekcjonera kuponów

Problem kolekcjonera kuponów to klasyczny wynik teorii prawdopodobieństwa, który zadaje pytanie: jeśli każde losowe losowanie daje jeden z N równie prawdopodobnych typów kuponów, ile losowań potrzeba średnio, aby zebrać co najmniej jeden egzemplarz każdego typu? Dokładna wartość oczekiwana wynosi E[T] = N · HN, gdzie HN = 1 + 1/2 + 1/3 + … + 1/N to N-ta liczba harmoniczna. Ta symulacja pozwala obserwować proces kolekcjonowania w czasie rzeczywistym, śledzić spowalniającą krzywą pokrycia oraz porównywać średnią empiryczną z setek prób z teoretyczną predykcją.

Problem ma praktyczne znaczenie wszędzie tam, gdzie losowe próbkowanie musi osiągnąć pełne pokrycie: przy uzupełnianiu albumów z naklejkami i zestawów kart kolekcjonerskich, generowaniu losowych danych testowych obejmujących każdą ścieżkę kodu, mierzeniu różnorodności losowych schematów haszowania oraz szacowaniu wysiłku potrzebnego, by co najmniej raz wylosować każdy element populacji.

Najczęściej zadawane pytania

Jaka jest oczekiwana liczba losowań potrzebna do zebrania wszystkich N kuponów?

Dokładna wartość oczekiwana wynosi E[T] = N · HN, gdzie HN to N-ta liczba harmoniczna (suma 1 + 1/2 + 1/3 + … + 1/N). Ponieważ HN rośnie jak ln(N) + γ (gdzie stała Eulera–Mascheroniego γ ≈ 0,5772), upraszcza się to do znanego przybliżenia E[T] ≈ N · ln(N) + γ · N. Na przykład dla N = 20 kuponów oczekiwana liczba losowań wynosi około 71,9.

Jak korzystać z tej symulacji?

Użyj suwaka N, aby wybrać liczbę odrębnych typów kuponów (2–50), a następnie kliknij Play run, aby obejrzeć jedno animowane kolekcjonowanie: siatka podświetla każdy typ w momencie jego pierwszego pojawienia się, a krzywa pokrycia pokazuje zebraną frakcję w czasie. Kliknij Run 100 trials, aby błyskawicznie zasymulować wiele powtórzeń i zbudować histogram, który powinien skupiać się wokół zielonej linii E[T]. Suwak Speed kontroluje, ile losowań jest przetwarzanych na klatkę animacji.

Dlaczego krzywa pokrycia spłaszcza się pod koniec?

Gdy posiadasz już k spośród N typów, każde nowe losowanie trafia w brakujący typ z prawdopodobieństwem tylko (N − k) / N. W miarę zbliżania się k do N to prawdopodobieństwo maleje w kierunku 1/N, więc każdy kolejny unikalny kupon staje się coraz trudniejszy do znalezienia. Oczekiwana liczba losowań potrzebna do przejścia od k do k+1 wynosi N / (N − k), co rośnie nieograniczenie, gdy k → N. Ten efekt „malejących zysków” spłaszcza krzywą pokrycia i tworzy długi prawy ogon w histogramie czasu ukończenia.

Jak wyprowadza się wzór z liczbą harmoniczną?

Wyprowadzenie wykorzystuje liniowość wartości oczekiwanej. Po zebraniu k odrębnych kuponów czas oczekiwania do kolejnego nowego ma rozkład geometryczny z prawdopodobieństwem sukcesu p = (N − k) / N, więc jego średnia wynosi N / (N − k). Sumowanie po k = 0, 1, …, N−1 daje E[T] = N/N + N/(N−1) + … + N/1 = N · (1 + 1/2 + … + 1/N) = N · HN. Znana jest też wariancja: Var[T] = N2 · Σ(1/k2) ≈ N2 · π2/6 dla dużych N.

Jakie są przykłady problemu kolekcjonera kuponów w rzeczywistym świecie?

Albumy z naklejkami Panini są najbardziej znanym przykładem: album na Mistrzostwa Świata 2018 zawierał 682 naklejki, a kolekcjonerzy potrzebowali średnio około 4832 zakupionych naklejek (w paczkach po 5), aby go ukończyć. W inżynierii oprogramowania losowy fuzzing musi wygenerować wystarczająco dużo danych testowych, aby dotrzeć do każdej gałęzi kodu; przy N gałęziach oczekiwany wysiłek rośnie jak N · ln(N). Protokoły sieciowe przydzielające losowe identyfikatory stają przed tym samym dualnym problemem: jak szybko dojdzie do kolizji względem tego, ile identyfikatorów potrzeba, by pokryć cały zbiór.

Czy to błędne przekonanie, że potrzeba dokładnie N losowań, aby zebrać N kuponów?

Tak — byłoby to prawdą tylko wtedy, gdyby można było zagwarantować brak powtórzeń, jak przy losowaniu bez zwracania. Przy losowaniu ze zwracaniem (niezależne losowe losowania) powtórzenia są nieuniknione. Oczekiwana suma rośnie jak N · ln(N), nie N, ponieważ kilka ostatnich kuponów wymaga wielu powtarzanych losowań, zanim pojawi się brakujący typ. Dla N = 50 oczekiwana liczba losowań wynosi około 225, a nie 50. Histogram ujawnia też długi prawy ogon, co oznacza, że czasem potrzeba znacznie więcej losowań niż średnio.

Kto pierwszy badał problem kolekcjonera kuponów i kiedy?

Problem ma korzenie w XVIII-wiecznej kombinatoryce. Abraham de Moivre badał pokrewne problemy obsadzeń w swoim dziele z 1718 roku The Doctrine of Chances. Nowoczesne sformułowanie i rozwiązanie z liczbą harmoniczną stały się znane dzięki podręcznikom probabilistyki z połowy XX wieku. Nazwa „kolekcjoner kuponów” spopularyzowała się, gdy na początku XX wieku fizyczne zestawy kuponów i karty kolekcjonerskie stały się powszechnymi produktami konsumenckimi, co uczyniło ją naturalną analogią dla abstrakcyjnego problemu obsadzeń.

Jakie inne problemy probabilistyczne są powiązane z tym tematem?

Problem kolekcjonera kuponów jest ściśle powiązany z paradoksem urodzin (który pyta o pierwszą kolizję, a nie o zapełnienie wszystkich miejsc), problemami obsadzeń w kombinatoryce oraz analizą losowych funkcji haszujących. Jest dualny wobec problemu kolekcjonowania: jeden pyta o pierwsze powtórzenie, drugi o pełne pokrycie. Powiązane symulacje obejmują paradoks urodzin, problemy pokrycia błądzenia losowego oraz całkowanie metodą Monte Carlo — wszystkie dotyczą czasów oczekiwania w procesach losowych.

Jak problem kolekcjonera kuponów jest wykorzystywany w informatyce i inżynierii?

W testowaniu oprogramowania problem ten określa, ile losowych danych testowych potrzeba, aby osiągnąć pełne pokrycie ścieżek kodu — punkt odniesienia dla generowania testów losowych (fuzzing) w porównaniu z systematycznym. W systemach rozproszonych modeluje, ile komunikatów rozgłoszeniowych jest potrzebnych, zanim każdy węzeł sieci otrzyma co najmniej jeden. Systemy równoważenia obciążenia i tablice haszujące wykorzystują pokrewną analizę obsadzeń, by przewidzieć, kiedy wszystkie kubełki będą niepuste. Ograniczenie N · ln(N) pojawia się także w losowych algorytmach dla problemów pokrycia zbioru.

Co się dzieje, gdy kupony nie są równie prawdopodobne lub pojawiają się w grupach?

Gdy typy kuponów mają nierówne prawdopodobieństwa, wzór z liczbą harmoniczną przestaje obowiązywać. Oczekiwany czas ukończenia jest wtedy określany przez najrzadszy kupon: jeśli najmniej prawdopodobny typ ma prawdopodobieństwo pmin, oczekiwana liczba losowań rośnie co najmniej tak szybko jak 1/pmin. Zjawisko to bada się jako „niejednorodny problem kolekcjonera kuponów” i może ono być znacznie gorsze niż przypadek jednorodny. Gdy kupony pojawiają się w paczkach (jak w albumach z naklejkami), problem staje się wariantem ze skorelowanymi losowaniami, analizowanym za pomocą funkcji tworzących i symulacji, co pokazuje, że struktura paczek może nieznacznie zwiększyć lub zmniejszyć oczekiwany łączny koszt w zależności od rozmiaru paczki i reguł nakładania się.

Podobne symulacje