몬티홀 문제 - 간단히 확률만 구하자면
아래에 올린 몬티홀 문제 시뮬레이션 프로그램은 처음에는 다음과 같이 확률만 짧게 구한 버젼이었습니다.
코드 길이 줄이는 게 목적이 아니라서 충분히 짧진 않네요. 행수 줄이는 게 목적이라면 확 줄여서 단지 몇 줄로 줄긴 합니다만.
#!/usr/bin/perl
use strict;
use warnings;my $choices = 3;
my $game_count = 0;
my $success_count = 0;
my $fail_count = 0;my $will_change = 1;
while ($game_count < 1000) {
$game_count++;
# 차가 있는 문 번호를 랜덤하게 지정
my $car_door_number = int(rand($choices));
# 출연자가 선택한 문 번호를 랜덤하게 지정
my $chosen_door_number = int(rand($choices));
# 출연자가 '차가 있는 문 번호'를 선택한 경우
if ( $chosen_door_number == $car_door_number ) {
# 바꾸면 꽝, 안바꾸면 車
if ($will_change) {
$fail_count++;
} else {
$success_count++;
}
# 출연자가 '꽝'인 문 번호를 선택한 경우
} else {
# 바꾸면 車, 안바꾸면 꽝
if ($will_change) {
$success_count++;
} else {
$fail_count++;
}
}
}print "GAMES COUNT : $game_count\n";
print "SUCCEDED : $success_count\n";
print "FAILED : $fail_count\n";
여튼 이렇게 간단히 만들 수 있는 기반은 다음과 같습니다.
- 문 3개 중 꽝은 2개, 차는 1개 이므로 출연자가 처음에 차를 고를 확률이 33%, 꽝을 고를 확률이 66%.
- 처음에 차를 고른 경우 선택을 바꾸면 무조건 꽝
- 처음에 꽝을 고른 경우 선택을 바꾸면 무조건 차
- 따라서 선택을 변경하는 경우, 처음에 차를 고른 경우 결국 꽝, 처음에 꽝을 고른 경우 결국 차
- 그러므로 선택을 변경하는 경우, 결국 33% : 꽝, 66% : 차
- 처음에 차를 고른 경우 선택을 안바꾸면 당연히 차
- 처음에 꽝을 고른 경우 선택을 안바꾸면 당연히 꽝
- 따라서 처음 선택을 유지하면, 당연히 처음에 차를 골랐으면 그대로 차, 꽝을 골랐으면 그대로 꽝
- 그러므로 처음 선택을 유지하는 경우, 처음 선택 확률과 동일하게 33% : 차, 66% : 꽝
즉 차냐 꽝이냐의 확률은 결국 처음 선택에 완전히 종속됩니다. 선택을 바꿀 경우 처음에 꽝을 골라야 결국 차를 탈 수 있는데, 처음 꽝을 고를 확률이 66%라서 처음에 차를 고를 확률 33%의 두 배가 됩니다. 반면 처음 선택을 유지한다면 처음에 차를 골랐어야 하는데, 처음에 차를 고를 확률은 33%죠. 따라서 선택을 바꾸는 게 유리하죠.
근데 이렇게 만들고 보니 이건 중간과정 생략하고 경우에 따른 결과만 가지고 만든 것 같아서 시뮬레이션이 아니더라고요.^^
실행결과는 아래 프로그램이랑 똑같습니다. 당연히 같을 수밖에 ㅎㅎ
Comments
워낙 개념없이 살아서 모든게 어려운가봐요 ㅎ