예, 아니요, "유일한 방법"의 의미에 따라 다릅니다. 예, 종료 보장 방법이 없으므로 및 의 일반 값에 대해 최선 의 방법은 확률 1로 종료하는 알고리즘입니다. 아니요, "폐기물"을 작게 만들 수 있습니다. 당신이 원하는대로.R엔아르 자형
일반적으로 보장 된 종료가 불가능한 이유
결정 론적 계산 엔진 (Turing 머신 또는 보트를 떠 다니는 모든 것)과 요소 세트 의 임의 요소를 생성하는 오라클이 있다고 가정하십시오 . 목표는 요소 세트 의 요소를 생성하는 것입니다 . 엔진의 출력은 오라클이 반환하는 일련의 값에만 의존합니다. 그것은 잠재적으로 무한한 시퀀스 의 함수 입니다 .[ 0 .. R - 1 ] N [ 0 , N - 1 ] F ( R 0 , R 1 , R 2 , ... )아르 자형[ 0 .. R - 1 ]엔[ 0 , N− 1 ]에프( r0, r1, r2, … )
엔진이 최대 번 Oracle을 호출한다고 가정하십시오 . 오라클이 회 미만으로 호출 된 흔적이있을 수 있습니다 . 그렇다면 오라클을 여분의 시간으로 호출하면 항상 정확히 번 호출 되므로 출력이 변경되지 않습니다. 따라서 일반성을 잃지 않고 오라클은 정확히 번 이라고 가정합니다 . 그런 다음 결과의 확률 시퀀스 번호 되도록 . 오라클은 균일 한 랜덤 생성기이므로 각 시퀀스는 동일하며 확률은 입니다. 따라서 각 결과의 확률은m m m X ( R 0 , ... , R의 m - 1 ) (F) ( R 0 , ... , R의 m - 1 ) = X 1 / R m / R m 0 R m엠엠엠mx(r0,…,rm−1)f(r0,…,rm−1)=x1/RmA/Rm여기서 는 과 사이의 정수 입니다.A0Rm
경우 분할은 일부 , 다음에 걸쳐 균일 한 분포를 생성 할 수 랜덤 발생기를 호출하여 요소 시간 (이것은 독자 운동으로 남아). 그렇지 않으면 이것은 불가능합니다. 확률 결과를 얻을 수있는 방법이 없습니다 . 이 조건은 모든 의 주요 요인도 요인 이라고 말하는 것과 같습니다 (이는 귀하가 질문에 쓴 것보다 더 관대 한 것입니다. 예를 들어 6면 공정으로 4 중에서 무작위 요소를 선택할 수 있음) 4는 6을 나누지 않아도 죽는다).R m m N m 1 / N N RNRmmNm1/NNR
폐기물 감소
전략에서 이면 즉시 다시 그릴 필요가 없습니다. 직관적으로, 약간의 엔트로피가 남아 있어 믹스를 유지할 수 있습니다.[ kr≥kN[kN..R−1]
실제로 이하의 난수를 영원히 생성 하고 무승부 를 만들어 한 번에 를 생성 한다고 가정하십시오 . 이 그룹 생성에 대해 간단한 거부 샘플링을 수행하는 경우 draws 의 낭비 는 . 즉 나머지 를 드로우 수로 나눈 값. 이것은 만큼 수 있습니다 . 때 과 서로 소, 당신은 충분히 큰 값 들기 폐 임의로 작게 만들 수 . 과 의 일반 값u d d R d - kNudd RdmodNugcd(R,N)RNdRNgcd(R,N)N/gcd(R,N)Rd−kNudRdmodNugcd(R,N)RNdRN 및 개별적 으로 고려해야하기 때문에 계산이 더 복잡 하지만, 충분히 큰 그룹으로 폐기물을 임의로 작게 만들 수 있습니다.gcd(R,N)N/gcd(R,N)
실제로, 비교적 비효율적 인 난수 (예를 들어, 암호화)에서도, 이 작지 않으면 간단한 거부 샘플링 이외의 다른 작업은 거의 할 수 없습니다 . 예를 들어, 이 전형적으로 2의 거듭 제곱이고 이 일반적으로 수백 또는 수천의 비트 인 암호화에서 , 균일 한 난수 생성은 일반적으로 원하는 범위에서 직선 제거 샘플링에 의해 진행된다.R NNRN