Ziegenproblem

Code-Stücke können hier veröffentlicht werden.
Antworten
Üpsilon
User
Beiträge: 188
Registriert: Samstag 15. September 2012, 19:23
Wohnort: Altschauerberg 8 in 91448 Emskirchen

Montag 27. April 2015, 20:14

Wir haben heute uns heute in Mathe mit bedingten Wahrscheinlichkeiten beschäftigt und dann auch übers Ziegenproblem gequatscht. Bekanntlich soll man ja wechseln, aber die Erklärung des Lehrers war nur so halb überzeugend. Aber jetzt haben wir Gewissheit:

Code: Alles auswählen

from random import choice

def ohne(liste, raus):
    return filter(lambda i: i not in raus, liste)

TUEREN = ["a", "b", "c"]

def ohne_wechseln():
    hauptgewinn = choice(TUEREN)
    kandidat = choice(TUEREN)
    ##showmaster = choice(ohne(TUEREN, [kandidat, hauptgewinn]))
    return kandidat == hauptgewinn
    
def mit_wechseln():
    hauptgewinn = choice(TUEREN)
    kandidat = choice(TUEREN)
    showmaster = choice(ohne(TUEREN, [kandidat, hauptgewinn]))
    kandidat = ohne(TUEREN, [kandidat, showmaster])[0]
    return kandidat == hauptgewinn

print "Ohne Wechseln:", sum([ohne_wechseln() for _ in range(10000)])
print "Mit Wechseln:", sum([mit_wechseln() for _ in range(10000)])
PS: Die angebotene Summe ist beachtlich.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dienstag 28. April 2015, 08:00

Ich hatte dazu auch vor olims Zeiten mal einen Thread erstellt - leider ist paste.pocoo.org ja down und somit der Code weg :-( (Müsste mal gucken, ob ich den lokal noch habe)

Um das ganze evtl. klarer zu machen, stellt Dir mal vor, dass Du 100 Türen hast und Dir 98 falsche nach der ersten Wahl weggenommen werden. Dann ist es viel intuitiver, dass man beim ersten Mal eher falsch liegt als richtig ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3))
assert encoding_kapiert
Üpsilon
User
Beiträge: 188
Registriert: Samstag 15. September 2012, 19:23
Wohnort: Altschauerberg 8 in 91448 Emskirchen

Mittwoch 29. April 2015, 16:32

Jaja, auch eine schöne Erklärung ist folgende:

»Angenommen, wir wüssten, dass der Hauptgewinn hinter Tür A oder B ist.
Dann würden wir auf C setzen, der Moderator würde B aufmachen und wir wüssten mit Sicherheit, dass A gewinnt (oder andersrum) und wir würden wechseln.
Da die angenommene Bedingung (Gewinn hinter A oder B) meistens (2/3) stimmt, sollte man immer so handeln.«

b2t: Es wurde ja noch gar nix zu meinem Programm gesagt. Soll ich das so verstehen, dass das Programm perfekt ist? :mrgreen:
Ohne ist n Scheißname, die Listenklammern in den letzten Zeilen sind unnötig und ich will eigentlich xrange benutzen.
PS: Die angebotene Summe ist beachtlich.
Antworten