무작위 난수를 기반으로 특정 공간에 해당 난수가 존재할 가능성을 확인하는 알고리즘
몬테카를로 알고리즘은 큰 수와 반복적인 작업을 해야 하므로 직접적인 계산 보다는 시스템 및 함수 처리에서 무작위성을 사용하여 알고리즘을 해결한다.
특정한 패턴을 따르는 경향이 있다.
- 가능한 입력의 도메인을 정의한다.
- 도메인에 대한 확률 분포에서 임의로 입력을 생성한다.
- 입력에 대한 결정론적인 계산을 수행한다.
- 결과를 집계한다.
몬테카를로 알고리즘을 통한 문제 해결 예시는 대표적으로 원주율을 구하는 방식이다.
- 정사각형을 그린 후 그 안에 사분면을 삽입한다.
- 정사각형 위에 일정한 개수의 점을 균일하게 분포한다.
- 사분면 내부의 점, 즉 원점으로부터 1만의 개수를 센다.
- 내부의 개수와 전체 개수의 비율은 두 영역의 비율을 나타내므로 그 값에 4를 곱하여 파이를 만든다.
원주율을 구하는 실제 코드는 아래와 같다.
작성: java
import java.util.*;
public static double pie(){
int roofNum = 100000;
int count = 0;
while( i != 100000){
double x = Math.random() * 2 - 1;
double y = Math.random() * 2 - 1;
if((x*x) + (y*y) <= 1) {
count++;
}
i++
}
double result = 4.0 * count / roofNum;
return result;
}
참고