{{위키데이터 속성 추적}}
{{구별|몬테카를로 방법}}

[[컴퓨팅]]에서 '''몬테카를로 알고리즘'''은 항상 유한한 시간 안에 멈추지만, 특정 [[확률]](주로 낮은 [[확률]])로 부정확할 수도 있는 결과를 도출하는 [[확률적 알고리즘|무작위 알고리즘]]이다. 이러한 알고리즘의 두 가지 예로 [[카거 알고리즘|카거-스테인 알고리즘]]<ref>{{저널 인용|제목=A New Approach to the Minimum Cut Problem|저널=J. ACM|성=Karger|이름=David R.|성2=Stein|이름2=Clifford|날짜=July 1996|권=43|호=4|쪽=601–640|doi=10.1145/234533.234534|issn=0004-5411}}</ref>과 [[피드백 아크 세트|최소 피드백 아크 집합]]에 대한 몬테카를로 알고리즘이 있다.<ref>{{저널 인용|제목=Monte-Carlo randomized algorithm for minimal feedback arc set problem|저널=Applied Soft Computing|성=Kudelić|이름=Robert|날짜=2016-04-01|권=41|쪽=235–246|doi=10.1016/j.asoc.2015.12.018}}</ref>

몬테카를로(Monte Carlo)라는 용어는 1947년 [[니콜라스 메트로폴리스]]가 제안한 이름이다.<ref>{{저널 인용|제목=The beginning of the Monte Carlo method|저널=[[Los Alamos Science]]|성=Metropolis|이름=N.|저자링크=Nicholas Metropolis|url=http://library.lanl.gov/la-pubs/00326866.pdf|연도=1987|호=1987 Special Issue dedicated to Stanislaw Ulam|쪽=125–130}}</ref> 그의 동료였던 [[폴란드]] 출신 수학자 [[스타니스와프 울람]]에게는 삼촌이 있었는데, 그는 [[모나코]]의 유명한 도박의 도시 [[몬테카를로]]에서 도박을 하기 위해 친척들의 돈을 종종 빌려갔다. 몬테카를로 알고리즘 또한 무작위성이 있으므로 이로부터 이름이 유래된 것이 지금까지 이어져 내려왔다.

[[라스베가스 알고리즘]]은 부정확할 수도 있는 결과를 절대 반환하지 않는 몬테카를로 알고리즘의 [[쌍대성|듀얼]]이다. 이 때문에 [[라스베가스 알고리즘]]은 몬테카를로 알고리즘과 다르게 무작위 선택을 하지 않는다고 오해할 수 있다. 그러나 [[라스베가스 알고리즘]] 또한 시행의 일부로 무작위 선택을 할 수 있다. 그 결과, 동일한 입력을 사용하더라도 실행 간에 소요되는 시간이 다를 수 있다.

만약 몬테카를로 알고리즘에 의해 주어진 답이 정확한지 검증하는 절차가 있고 정답일 확률이 0보다 크다면, 답을 테스트하면서 알고리즘을 반복적으로 실행하는 프로세스가 결국 정답을 줄 사건은 [[거의 어디서나|거의 확실하게]] 발생한다. 이 프로세스가 [[라스베가스 알고리즘]]인지는 [[라스베가스 알고리즘]]의 정의에 프로세스가 중지되는 사건이 [[거의 어디서나|거의 확실하게]] 발생하는 프로세스를 포함시키는지 여부에 따라 다르다.

== 단측 오류 대 양측 오류 ==
[[결정론적 알고리즘|결정적 알고리즘에]] 의해 반환된 답은 항상 정확할 것으로 예상되지만 몬테카를로 알고리즘의 경우는 그렇지 않다. [[결정 문제]]의 경우 몬테카를로 알고리즘은 일반적으로 '''거짓''' [[편향]] 또는 '''참''' 편향으로 분류된다. '''거짓''' 편향된 몬테카를로 알고리즘은 '''거짓'''을 반환할 때 항상 정확하다. 반대로 '''참''' 편향된 몬테카를로 알고리즘은 '''참'''을 반환할 때 항상 정확하다. 이러한 거짓 편향과 참편향이 있는 몬테카를로 알고리즘을 ''단측'' 오류가 있다고 한다. 반면, 거짓 편향과 참편향의 두 분류에 속하지 않는, 즉 편향이 없는 몬테카를로 알고리즘 또한 존재할 수 있다. 이들은 ''양측'' 오류가 있다고 한다. 양측 오류가 있는 몬테카를로 알고리즘이 도출하는 참 또는 거짓의 답은 어느 정도 제한된 확률로 부정확할 수 있다.

예를 들어, [[솔로바이-슈트라센 소수판별법|솔로바이-슈트라센 소수판별법]]은 주어진 숫자가 소수인지 여부를 결정하는 데 사용된다. 이 검정은 [[소수 (수론)|소수]] 입력에 대해 항상 '''참'''으로 답한다'''.''' [[합성수]] 입력의 경우 {{분수|1|2}} 이상의 확률로 '''거짓'''으로 답하고 {{분수|1|2}} 이하의 확률로 '''참'''으로 답한다. 따라서 이 검정이 '''거짓'''으로 도출한 답은 그 답이 정확하다고 확신할 수 있는 반면에, '''참'''으로 도출한 답은 정확한지 확신할 수 없다. 이런 방식의 알고리즘을 ''{{분수|1|2}}-옳은 거짓 편향 알고리즘''이라 부른다.

== 증폭 ==
단측 오류가 있는 몬테카를로 알고리즘의 경우 알고리즘을 k 번 실행하여 실패 확률을 줄이고 성공 확률을 증폭시킬 수 있다. [[솔로바이-슈트라센 소수판별법|솔로바이-슈트라센 알고리즘]]의 ''{{분수|1|2}}-옳은 거짓 편향 알고리즘''을 다시 고려하자. [[솔로바이-슈트라센 소수판별법|솔로바이-슈트라센 알고리즘]]으로 시행을 ''k''번 반복하는 동안 '''거짓''' 반응에 도달하면 '''거짓'''이라는 답을 반환하고, 그렇지 않으면 '''참'''이라는 답을 반환하면서 알고리즘을 여러번 실행한다고 하자. 만약 숫자가 [[소수 (수론)|소수]]이면 답은 항상 옳고 숫자가 [[합성수]]이면 답은 최소한 1 &#x2212; (1 &#x2212;{{분수|1|2}} ) <sup>''k''</sup> = 1&#x2212;2<sup>''&#x2212;k''</sup> 이상의 확률로 옳다.

양측 오류가 있는 몬테카를로 결정 알고리즘의 경우 한 시행에서 ''k''번 실행하고 도출된 답의  [[다수결 함수|다수 함수]]를 반환하여 실패 확률을 다시 줄일 수 있다.

== 복잡성 클래스 ==
[[복잡도 종류|복잡도 클래스]] [[유계오차 확률적 다항시간|BPP]]는 양측 오류에 대한 유계 오류 확률을 갖는 [[시간 복잡도#다항 시간 (Polynomial time)|다항 시간]] 몬테카를로 알고리즘으로 해결할 수 있는 [[결정 문제]]를 표현한다. [[복잡도 종류|복잡도 클래스]] [[RP (복잡도)|RP]]는 단측 오류에 대한 유계 오류 확률이 1인 몬테카를로 알고리즘으로 해결할 수 있는 문제를 표현한다. 즉, 만약 정답이 '''거짓'''이면 알고리즘 또한 항상 거짓을 반환하지만, 정답이 '''참'''이면 경우에 따라 옳지 않은 답인 '''거짓'''을 잘못 반환할 수 있다. 대조적으로, [[복잡도 종류|복잡도 클래스]] [[ZPP]]는 다항 기대 시간 라스베가스 알고리즘으로 해결할 수 있는 문제를 표현한다. 따라서 위 [[복잡도 종류|복잡도 클래스]]들의 관계는 {{개행 금지|ZPP ⊆ RP ⊆ BPP}}로 나타낼 수 있다. 그러나 이러한 복잡성 클래스들이 서로 구별되는지 여부는 알려져 있지 않다. 즉, 몬테카를로 알고리즘은 [[라스베가스 알고리즘]]보다 더 큰 계산 능력을 가질지도 모르지만 이는 아직 증명되지 않았다. 또 다른 [[복잡도 종류|복잡도 클래스]]인 PP는 동전을 던지는 것보다는 더 정확하지만 오류 확률이 모든 시행에서 {{분수|1|2}} 보다 낮다고는 할 수 없는 [[시간 복잡도#다항 시간 (Polynomial time)|다항 시간]] 몬테카를로 알고리즘의 결정 문제를 표현한다.

== 계산 정수론에서의 응용 ==
잘 알려진 몬테카를로 알고리즘에는 [[솔로바이-슈트라센 소수판별법]], [[베일리–PSW 소수판별법]], [[밀러-라빈 소수판별법]] 및 [[계산적 군론]]에서 [[Schreier-Sims 알고리즘]]의 실행속도를 높인 특정 변형이 포함된다.

== 같이 보기 ==
* [[몬테카를로 방법]] : 물리 시뮬레이션과 계산 통계에서 사용되는 무작위 샘플 채취를 기반으로 수치적 계산의 근사를 위한 알고리즘
* [[애틀랜틱시티 알고리즘]]
* [[라스베가스 알고리즘]]

== 참고 문헌 ==

=== 인용 ===
{{각주}}
=== 출처 ===
{{참고 자료 시작}}
* {{서적 인용|title=Randomized Algorithms|last1=Motwani|first1=Rajeev|author1-link=Rajeev Motwani|last2=Raghavan|first2=Prabhakar|author2-link=Prabhakar Raghavan|year=1995|publisher=Cambridge University Press|location=[[뉴욕|New York]]|isbn=0-521-47465-5}}
* {{서적 인용|title=Introduction to Algorithms|last1=Cormen|first1=Thomas H.|author1-link=Thomas H. Cormen|last2=Leiserson|first2=Charles E.|author2-link=Charles E. Leiserson|year=2001|edition=2nd|publisher=MIT Press and McGraw-Hill|location=[[Boston]]|chapter=Ch 5. Probabilistic Analysis and Randomized Algorithms|isbn=0-262-53196-8|last3=Rivest|first3=Ronald L.|author3-link=Ronald Rivest|last4=Stein|first4=Clifford|author4-link=Clifford Stein|title-link=Introduction to Algorithms}}
* {{서적 인용|title=Algorithms: Sequential, Parallel, and Distributed|last1=Berman|first1=Kenneth A.|last2=Paul|first2=Jerome L.|year=2005|publisher=Course Technology|location=[[Boston]]|chapter=Ch 24. Probabilistic and Randomized Algorithms|isbn=0-534-42057-5}}
{{참고 자료 끝}}

[[분류:확률적 알고리즘]]