Das Geburtstagsparadoxon
Stellen Sie sich vor, Sie sind an einer Party mit 23 Gästen. Irgendwann ruft jemand in die Runde: "Wetten, dass zwei von uns am gleichen Tag Geburtstag haben?"
Sie überschlagen kurz im Kopf: Ein Jahr hat 365 Tage, wir sind nur 23 Leute... Sollten Sie die Wette annehmen?
Erst mal schätzen!
Bevor wir irgendetwas rechnen: Was sagt Ihr Bauchgefühl?
Kurz innehaltenNotieren Sie sich Ihre Antwort — wir lösen sie erst am Ende der Seite auf. Bis dahin gilt: nicht googeln, sondern selbst ausrechnen. Sie haben dafür gleich das perfekte Werkzeug: Python.
Die Mathematik dahinter
Wie packt man so eine Frage an? Direkt auszurechnen, dass irgendwo in der Gruppe zwei Personen am gleichen Tag Geburtstag haben, ist kompliziert — es gibt unzählige Kombinationen, wer mit wem zusammenfallen könnte.
Der Trick: Wir rechnen das Gegenteil aus — die Wahrscheinlichkeit, dass alle verschiedene Geburtstage haben. Davon nehmen wir dann eins minus.
Gehen wir Person für Person durch (365 Tage, alle gleich wahrscheinlich):
- Person 1 hat irgendeinen Geburtstag — kein Problem, Wahrscheinlichkeit .
- Person 2 muss einen anderen Tag haben: .
- Person 3 muss von beiden verschieden sein: .
- Person 4: — und so weiter.
Alle Brüche werden multipliziert (jede Bedingung muss gleichzeitig erfüllt sein):
Auf dem Papier ist dieses Produkt für grössere mühsam — für 23 Personen müssten Sie 22 Brüche von Hand multiplizieren. Zum Glück haben Sie etwas Besseres als Papier.
Die Challenge: Rechnen Sie es aus 🎂
Schreiben Sie eine Funktion wahrscheinlichkeit(n), die für n Personen die Wahrscheinlichkeit zurückgibt, dass mindestens zwei davon am gleichen Tag Geburtstag haben — als Dezimalzahl zwischen 0 und 1.
Tipps zum Vorgehen
- Starten Sie mit einer Variable
produkt = 1.0.- Multiplizieren Sie mit einer Schleife nacheinander die Brüche , , , ... auf — für
nPersonen sind dasn - 1Brüche.- Überlegen Sie sich, wie Sie den Zähler des Bruchs aus der Schleifenvariable berechnen können.
- Geben Sie am Schluss
1 - produktzurück.
Berechnen Sie anschliessend mit Ihrer Funktion die Wahrscheinlichkeit für 23 Personen — und vergleichen Sie mit Ihrer Schätzung vom Anfang. Probieren Sie auch andere Werte aus: Ab wie vielen Personen knackt die Wahrscheinlichkeit die 50 %? Ab wann 90 %?
Die Auflösung 🎉
Haben Sie es ausgerechnet? Dann wissen Sie es jetzt: Schon bei 23 Personen liegt die Wahrscheinlichkeit über 50 % — die Wette von der Party hätten Sie besser nicht angenommen. Hier die Übersicht:
| Personen | P(mindestens ein Doppel) |
|---|---|
| 10 | ~12 % |
| 23 | ~50.7 % |
| 30 | ~70.6 % |
| 41 | ~90 % |
| 50 | ~97 % |
| 57 | ~99 % |
In fast jeder Schulklasse gibt es also mit grosser Wahrscheinlichkeit ein Geburtstags-Duo. Probieren Sie es gleich aus — fragen Sie in die Runde!
Warum die Intuition versagt
Die meisten Menschen tippen auf 183 Personen — die Hälfte von 365 fühlt sich logisch an. Der Denkfehler: Unser Bauch vergleicht unbewusst eine Person gegen alle anderen — das wären bei 23 Personen nur 22 Vergleiche. Aber relevant sind die Paare: Bei 23 Personen gibt es
mögliche Paare — und jedes einzelne Paar ist eine Chance auf eine Kollision. 253 Chancen mit je Trefferwahrscheinlichkeit: Plötzlich wirken 50 % völlig plausibel.
Zusatz: Dasselbe mit Rekursion 🌀
Bis jetzt haben Sie Wiederholungen immer mit Schleifen gelöst. Es gibt aber noch einen zweiten, ganz anderen Weg: Rekursion — eine Funktion, die sich selbst aufruft.
Ein Beispiel: Countdown
Führen Sie den Code aus und verfolgen Sie, was passiert: countdown(5) druckt die 5 und ruft countdown(4) auf. Diese druckt die 4 und ruft countdown(3) auf — und so weiter, bis countdown(0) erreicht ist und die Kette stoppt.
Jede Rekursion braucht zwei Zutaten:
- Basisfall: Der einfachste Fall, der ohne weiteren Selbstaufruf beantwortet wird (hier:
n == 0). Ohne Basisfall ruft sich die Funktion endlos selbst auf — das rekursive Gegenstück zur Endlosschleife. - Rekursionsschritt: Das Problem wird ein Stück kleiner gemacht und an die Funktion selbst weitergereicht (hier:
countdown(n - 1)).
Die Challenge: Geburtstagsparadoxon rekursiv
Auch unsere Geburtstagsrechnung hat eine natürlich rekursive Struktur. Nennen wir die Wahrscheinlichkeit, dass Personen alle verschiedene Geburtstage haben:
- Basisfall: — eine einzelne Person hat garantiert keinen Geburtstagszwilling.
- Rekursionsschritt: — die ersten Personen müssen verschieden sein, und die -te Person muss einen der noch freien Tage erwischen.
Schreiben Sie eine rekursive Funktion alle_verschieden(n), die zurückgibt — also die Wahrscheinlichkeit, dass n Personen lauter verschiedene Geburtstage haben. Verwenden Sie keine Schleife: Die Funktion soll sich selbst aufrufen.
Wozu Rekursion?Alles, was Sie rekursiv lösen können, geht auch mit einer Schleife — und umgekehrt. Manche Probleme sind aber rekursiv viel natürlicher zu formulieren: Dateisysteme durchsuchen (Ordner enthalten Ordner enthalten Ordner...), Fraktale zeichnen, Spielbäume in Schach-Programmen durchrechnen. Rekursion ist eines der mächtigsten Denkwerkzeuge der Informatik — Sie werden ihr wieder begegnen.