O problema de Monty Hall é um quebra-cabeça matemático que apresenta uma solução surpreendentemente contra-intuitiva.
É descrito como uma história sobre um game show. Nele, o anfitrião (Monty) mostra três portas fechadas e diz que atrás de uma está um carro novo, mas atrás de cada uma das outras duas está uma cabra. Você escolherá uma porta e ganhará o que estiver atrás (para ser claro, você quer o carro). Para lhe dar uma chance esportiva, Monty lhe dará uma dica e uma oportunidade para mudar de ideia.
Especificamente,
- Você escolhe uma das 3 portas fechadas.
- Monty abre uma das outras duas portas e mostra uma cabra.
- Ele então pergunta se você gostaria de mudar de ideia e opta pela porta fechada restante.
- Você faz sua escolha e leva seu prêmio.
A questão é: você deve mudar de ideia ou não? Surpreendentemente, a maioria das pessoas conclui que a escolha não pode importar: é um 50-50 de qualquer maneira. Não é. Na verdade, você deve sempre escolher trocar, pois isso dobra suas chances de ganhar!
Já que você provavelmente não acredita em mim, vá em frente e cole esta canção de rubi e convença-se. Para (várias) explicações sobre este efeito, consulte a página da Wikipedia.
#! /usr/bin/env ruby
# http://en.wikipedia.org/wiki/Monty_Hall_problem
def monty(switch)
doors = (0...3).to_a
winner = rand(doors.size)
guess = rand(doors.size)
revealable = doors - [guess, winner]
revealed = revealable[rand(revealable.size)]
other = (doors - [guess, revealed]).first
guess = other if switch
guess == winner
end
TRIALS = 10000
won_staying, won_switching = 0, 0
(0...TRIALS).each do |trial|
won_staying += 1 if monty(false)
won_switching += 1 if monty(true)
end
puts "Win frequencies in Monty Hall when"
puts " staying: #{100.0 * won_staying / TRIALS}%"
puts " switching: #{100.0 * won_switching / TRIALS}%"
# Win frequencies in Monty Hall when
# staying: 33.03%
# switching: 66.38%