Als ik 5 keer kop-of-munt gooi en jij gooit 6 keer kop-of-munt, wat is dan de kans dat jij meer keer kop gooit dan ik?
Ofwel gooi jij meer kop dan ik, ofwel gooi jij meer munt dan ik, maar nooit beide (ga voor jezelf na dat dit het geval is). Beide uitkomsten zijn symmetrisch, waardoor de kans $$\frac{1}{2}$$ is.
Meer algemeen blijft de kans altijd $$\frac{1}{2}$$ als ik $$m$$ keer kop-of-munt gooi en jij gooit $$m + 1$$ keer kop-of-munt, met $$m \geq 1$$.
We beschouwen het meer algemene geval waarin ik $$m$$ keer kop-of-munt gooi en jij $$n$$ keer kop-of-munt gooit. Om de kans te berekenen dat jij meer keer kop gooit dan ik, kunnen we voor alle mogelijke uitkomsten tellen hoe vaak dat het geval is.
Er zijn in totaal $$2^{m+n}$$ mogelijke uitkomsten. Elke uitkomst correspondeert met een decimaal getal: $$0, 1, 2, \ldots, 2^{m+n} - 1$$. We kunnen immers elk van deze decimale getallen omzetten naar een binair getal met $$m + n$$ cijfers, waarbij het binaire cijfer $$0$$ correspondeert met kop (K) en het binaire cijfer $$1$$ met munt (M). We beschouwen de eerste $$m$$ binaire cijfers als de worpen die ik gegooid heb en de laatste $$n$$ binaire cijfers als de worpen die jij gegooid hebt. Het volstaat dan om voor elke uitkomst te bepalen of jij meer keer kop gooit dan ik. De gezochte kans is gelijk aan het aantal uitkomsten waarvoor dat het geval is, gedeeld door het aantal mogelijke uitkomsten ($$2^{m+n}$$).
Onderstaande tabel geeft een samenvatting van alle mogelijke uitkomsten voor onze originele vraag uit de inleiding, waarbij $$m = 5$$ en $$n = 6$$.
decimaal | binair | kop-of-munt |
---|---|---|
0 | 00000000000 | KKKKKKKKKKK |
1 | 00000000001 | KKKKKKKKKKM |
2 | 00000000010 | KKKKKKKKKMK |
3 | 00000000011 | KKKKKKKKKMM |
4 | 00000000100 | KKKKKKKKMKK |
5 | 00000000101 | KKKKKKKKMKM |
… | … | … |
1187 | 10010100011 | MKKMKMKKKMM |
1188 | 10010100100 | MKKMKMKKMKK |
1189 | 10010100101 | MKKMKMKKMKM |
… | … | … |
2043 | 11111111011 | MMMMMMMMKMM |
2044 | 11111111100 | MMMMMMMMMKK |
2045 | 11111111101 | MMMMMMMMMKM |
2046 | 11111111110 | MMMMMMMMMMK |
2047 | 11111111111 | MMMMMMMMMMM |
In dat geval zijn er $$2^{5 + 6} = 2^{11} = 2048$$ mogelijke uitkomsten. Uitkomst 1188 (decimaal) correspondeert bijvoorbeeld met het binair getal 10010100100 van $$5 + 6 = 11$$ cijfers. Als we daarin $$0$$ vervangen door K (kop) en $$1$$ door M (munt) dan krijgen we MKKMKMKKMKK. Daarvan heb ik de eerste 5 worpen gegooid (MKKMK; in de tabel aangeduid in het groen) en jij de laatste 6 worpen (MKKMKK; in de tabel aangeduid in het rood). Voor deze uitkomst gooi ik 3 keer kop en gooi jij 4 keer kop, waardoor jij dus meer keer kop gooit dan ik. In totaal blijkt dat voor 1024/2048 van de mogelijke uitkomsten het geval te zijn, waardoor de kans 0.5 is.
We stellen een reeks worpen voor als een string (str) die enkel de letters K en M bevat. Daarbij stelt K een worp voor waarin kop gegooid wordt, en M een worp waarin munt gegooid wordt. Gevraagd wordt:
Schrijf een functie kop waaraan een reeks worpen (str) moet doorgegeven worden. De functie moet teruggeven hoeveel keer kop gegooid werd in de gegeven reeks worpen (int).
Schrijf een functie munt waaraan een reeks worpen (str) moet doorgegeven worden. De functie moet teruggeven hoeveel keer munt gegooid werd in de gegeven reeks worpen (int).
Schrijf een functie jij_meer_kop_dan_ik waaraan twee reeksen worpen (str) moeten doorgegeven worden: i) de reeks worpen die ik gegooid heb en ii) de reeks worpen die jij gegooid hebt. De functie moet een Booleaanse waarde (bool) teruggeven, die aangeeft of jij meer keer kop gegooid hebt dan ik.
Schrijf een functie uitkomst waaraan drie natuurlijke getallen (int) moeten doorgegeven worden: i) het aantal keer $$m$$ dat ik kop-of-munt gooi, ii) het aantal keer $$n$$ dat jij kop-of-munt gooit en iii) de decimale voorstelling $$d$$ van een mogelijke uitkomst met $$m + n$$ worpen ($$0 \leq d < 2^{m+n}$$). De functie moet een tuple teruggeven met de corresponderende reeksen worpen die ik en jij bij die mogelijke uitkomst gegooid hebben.
In Python kan je de ingebouwde functie bin1 gebruiken om een decimale waarde (int) om te zetten naar een string (str) met de corresponderende binaire waarde. Deze string begint altijd met de vaste prefix 0b als aanduiding dat het een binair getal voorstelt.
>>> bin(14672002) '0b110111111110000010000010'
Schrijf een functie kans waaraan twee natuurlijke getallen (int) moeten doorgegeven worden: i) het aantal keer $$m$$ dat ik kop-of-munt gooi en ii) het aantal keer $$n$$ dat jij kop-of-munt gooit. De functie moet de kans (float) teruggeven dat jij in dat geval meer keer kop gooit dan ik.
>>> kop('MKKMKMKKMKK')
7
>>> kop('KKKKMMMKMKM')
6
>>> kop('MKMKMMMKMMK')
4
>>> munt('MKKMKMKKMKK')
4
>>> munt('KKKKMMMKMKM')
5
>>> munt('MKMKMMMKMMK')
7
>>> jij_meer_kop_dan_ik('MKKMK', 'MKKMKK')
True
>>> jij_meer_kop_dan_ik('KKKKM', 'MMKMKM')
False
>>> jij_meer_kop_dan_ik('MKMKM', 'MMKMMK')
False
>>> uitkomst(5, 6, 1188)
('MKKMK', 'MKKMKK')
>>> uitkomst(5, 6, 117)
('KKKKM', 'MMKMKM')
>>> uitkomst(5, 6, 1398)
('MKMKM', 'MMKMMK')
>>> kans(5, 6)
0.5
>>> kans(6, 5)
0.2744140625
>>> kans(3, 8)
0.88671875