Geburtstagsproblem

> restart;

Zufallsgenerator initialisieren:

> _seed:=readlib(randomize)(); #wg. Maple 5 Abwärtskompatibilität

_seed := 1041627133

n : Anzahl der Personen für die Testreihe

> n:=50;

n := 50

tage : Array das vermerkt, wie viele Personen an diesem Tag Geburtstag haben.

> tage:=array(1..365);

tage := array(1 .. 365,[])

tage auf 0 initialisieren:

> for i from 1 to 365 do: tage[i] := 0; od:

>

>

Für jede Person: Zufälliger Tag für t bestimmen, entsprechender Eintrag im tage-array um 1 erhöhen:

> for i from 1 to n do:
t:=rand(1..365)():
tage[t] := tage[t]+1;
od:

tage-Array anzeigen:

> print(tage);

vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...
vector([0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1...

>

Anzahl der Mehrfachbelegungen berechnen:

> anz:=0;

anz := 0

> for i from 1 to 365 do:
if tage[i] > 1 then:
anz := anz+1:
end if:
od:

Anzahl ausgeben:

> anz;

20

Simulation mehrer Gruppen

>

mehrfachgeburtstage : Funktion gibt 1 zurück, falls die Simulation mindestens einen Mehrfachgeburtstag ergab, ansonsten 0

> mehrfachgeburtstage := proc(n)
local anz, i, tage, t:
anz:=0;
tage:=array(1..365):
for i from 1 to 365 do: tage[i] := 0; od:
for i from 1 to n do: t:=rand(1..365)(): tage[t] := tage[t]+1; od:
for i from 1 to 365 do: if tage[i] > 1 then: return 1; end if: od:
return 0;
end proc:

>

simN: Anzahl der Simulationen

> simN:=100;

simN := 100

Simulationsergebnisse: 1 steht für Mehrfachgeburtstag, 0 für keinen

> sim:=seq(mehrfachgeburtstage(n), a=1..simN);

sim := 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,...
sim := 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,...

Verhältniss

> sum(sim[j], j=1..simN)/simN;

19/20

> evalf(%);

.9500000000

>