몬티홀 문제에 대해 모르시는 분들은 아래 링크된 글을 읽고 오시면 이해가 됩니다
이 문제에 대해 처음 언급했을때 수천통의 수학, 공학 박사학위 소지자들이 확률이 2/3이 되지 않는다며 항의 메일을 보냈고
20세기 후반 최고의 수학자라고 불려지던 전설적인 수학자 폴 에어디쉬도 선택을 바꾸든 아니든 확률은 같다고 생각했고, 컴퓨터로 실험해본 뒤에야 바꾸는 것이 유리한 선택임을 인정했다고 한다. (이불킥!)
public class MonteHall {
public static void main(String[] args) {
int testno = 100;
Random random = new Random();
// 오로지 0번만 선택
int choice = 0;
System.out.println("난 심지있는사람! 결과를 바꾸지 않는다");
int resultcnt = 0;
//문의 종류는 0번,1번,2번이다.
for (int i = 0; i < testno; i++) {
int car = random.nextInt(3);// 0,1,2
if (choice == car)
resultcnt++;
}
System.out.println("Result: " + (double) resultcnt / (double) testno);
choice = 0;
resultcnt = 0;
System.out.println("결과를 바꾸면?");
for (int i = 0; i < testno; i++) {
int car = random.nextInt(3);// 0,1,2
// change!
if (car == 0) {
// 사회자는 나머지 문 2개중 아무거나 열어준다.
choice = random.nextInt(2) + 1;
} else if (car == 1) {
// 사회자는 열어 줄 문이 2번문 뿐이다. 그래서 선택을 바꾼다면 바꿀 수 있는 문은 1번문 뿐이다.
choice = 1;
} else if( car == 2){
// 사회자는 열어 줄 문이 1번문 뿐이다. 그래서 선택을 바꾼다면 바꿀 수 있는 문은 2번문 뿐이다.
choice = 2;
}
if (choice == car)
resultcnt++;
}
System.out.println("Result: " + (double) resultcnt / (double) testno);
}
}
위와 같이 돌릴 경우
Random함수를 썼기때문에 결과는 바뀔 수 있다(testno의 변수를 늘리면 정확해짐)
난 심지있는사람! 결과를 바꾸지 않는다
Result: 0.31
결과를 바꾸면?
Result: 0.67
따라서 시뮬레이션 결과 결과를 바꾸는 것이 확률이 2/3가 되어 자동차를 가져갈 수 있다!
'Java' 카테고리의 다른 글
Java: 유용한 수학 라이브러리 The Apache Commons Mathematics Library (0) | 2017.02.28 |
---|