거부 샘플링이 무작위로 무작위로 균일 한 분포를 얻는 유일한 방법입니까?


21

분포가 균일 한 범위의 숫자를 출력하는 랜덤 생성기가 있고 [0..R1]분포가 균일 한 범위의 난수를 생성해야한다고 가정합니다 [0..N1] .

N<R 이고 N 고르게 나누지 않는다고 가정하자 R. 진정으로 균일 한 분포 를 얻기 위해 거부 샘플링 방법을 사용할 수 있습니다 .

  • kk N < R 과 같은 가장 큰 정수인 경우kN<R
  • [ 0 .. R - 1 ] 에서 난수 r 을 선택하십시오 .[0..R1]
  • 경우 r<kN 다음 출력 , 그렇지 않으면 다른 난수 R ', R "로 시도, ...을 유지 조건이 충족 될 때까지rmodN
거부 샘플링이 진정으로 균일 한 이산 분포를 얻는 유일한 방법입니까?

대답이 예라면 왜 그렇습니까?

참고 : N>R 경우 아이디어는 동일합니다. [0..R ^ m-1] 에서 난수 r 을 생성하고 [0..Rm1],Rm>=N 을 입력하십시오 (예 : r=R(...R(Rr1+r2)...)+rm 여기서 ri[0..R-1] 범위의 난수입니다 [0..R1]


답변:


13

예, 아니요, "유일한 방법"의 의미에 따라 다릅니다. 예, 종료 보장 방법이 없으므로 및 의 일반 값에 대해 최선 의 방법은 확률 1로 종료하는 알고리즘입니다. 아니요, "폐기물"을 작게 만들 수 있습니다. 당신이 원하는대로.RNR

일반적으로 보장 된 종료가 불가능한 이유

결정 론적 계산 엔진 (Turing 머신 또는 보트를 떠 다니는 모든 것)과 요소 세트 의 임의 요소를 생성하는 오라클이 있다고 가정하십시오 . 목표는 요소 세트 의 요소를 생성하는 것입니다 . 엔진의 출력은 오라클이 반환하는 일련의 값에만 의존합니다. 그것은 잠재적으로 무한한 시퀀스 의 함수 입니다 .[ 0 .. R - 1 ] N [ 0 , N - 1 ] F ( R 0 , R 1 , R 2 , ... )R[0..R1]N[0,N1]f(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 mmmmmx(r0,,rm1)f(r0,,rm1)=x1/RmA/Rm여기서 는 과 사이의 정수 입니다.A0Rm

경우 분할은 일부 , 다음에 걸쳐 균일 한 분포를 생성 할 수 랜덤 발생기를 호출하여 요소 시간 (이것은 독자 운동으로 남아). 그렇지 않으면 이것은 불가능합니다. 확률 결과를 얻을 수있는 방법이 없습니다 . 이 조건은 모든 의 주요 요인도 요인 이라고 말하는 것과 같습니다 (이는 귀하가 질문에 쓴 것보다 더 관대 한 것입니다. 예를 들어 6면 공정으로 4 중에서 무작위 요소를 선택할 수 있음) 4는 6을 나누지 않아도 죽는다).R m m N m 1 / N N RNRmmNm1/NNR

폐기물 감소

전략에서 이면 즉시 다시 그릴 필요가 없습니다. 직관적으로, 약간의 엔트로피가 남아 있어 믹스를 유지할 수 있습니다.[ krkN[kN..R1]

실제로 이하의 난수를 영원히 생성 하고 무승부 를 만들어 한 번에 를 생성 한다고 가정하십시오 . 이 그룹 생성에 대해 간단한 거부 샘플링을 수행하는 경우 draws 의 낭비 는 . 즉 나머지 를 드로우 수로 나눈 값. 이것은 만큼 수 있습니다 . 때 과 서로 소, 당신은 충분히 큰 값 들기 폐 임의로 작게 만들 수 . 과 의 일반 값u d d R d - kNudd RdmodNugcd(R,N)RNdRNgcd(R,N)N/gcd(R,N)RdkNudRdmodNugcd(R,N)RNdRN 및 개별적 으로 고려해야하기 때문에 계산이 더 복잡 하지만, 충분히 큰 그룹으로 폐기물을 임의로 작게 만들 수 있습니다.gcd(R,N)N/gcd(R,N)

실제로, 비교적 비효율적 인 난수 (예를 들어, 암호화)에서도, 이 작지 않으면 간단한 거부 샘플링 이외의 다른 작업은 거의 할 수 없습니다 . 예를 들어, 이 전형적으로 2의 거듭 제곱이고 이 일반적으로 수백 또는 수천의 비트 인 암호화에서 , 균일 한 난수 생성은 일반적으로 원하는 범위에서 직선 제거 샘플링에 의해 진행된다.R NNRN


첫 번째 증거는 결함입니다. 의 존재 가 너무 강합니다. 우리는 임의로 많은 요소를 소비하지만 항상 종료 되는 기계를 가질 수 있습니다 . 기본적으로 하나의 시퀀스 (종료되지 않는 시퀀스)를 제외하고 싶지만 무한히 많은 시퀀스는 모두 제외합니다. m
라파엘

@Raphael 나는 당신이 무슨 뜻인지 이해하지 못합니다. 그런 기계를 예로 들어 줄 수 있습니까?
Gilles 'SO- 악한 중지'

아, 내 관심사는 너무 일반적이었다. 여기에-입력이 없을 경우-맞습니다. 모든 계산이 종료되면 유한하게 많은 수 (입력, 단계 당 유한 결정 수, 유한 트리를 포함)가 있으므로 가장 긴 값은 입니다. m
라파엘

@Raphael 귀하의 의견은 TCS 독자를위한 더 나은 프레젠테이션을 생각하게합니다. RNG를 오라클 대신 TM의 입력으로 만드십시오. TM이 종료되었다고 가정합니다 (그렇지 않으면 알고리즘이 올바르지 않습니다). 이 생길 경우 입력이 무엇이든, 최대의 TM 외모하도록 입력 셀 다음 <의해 어쩌구 나눌 ㅋ 가질 수 동일 확률 결과>은. 그렇지 않으면, 모든 에 대해, 적어도 드로우 를 요구할 확률은 입니다. m R m N m m R - mmmRmNmmRm
Gilles 'SO- 악한 중지'

1
@Raphael : König의 기본 정리는 기계가 항상 종료되면 실제로 작동 시간에 상한이 있음을 보여줍니다. 이것은 RNG의 출력 세트가 유한 한 한 (그렇지 않으면 사소한 거짓 인 경우) 작동합니다.
Yuval Filmus

6

어떤 정확한 의미에서, 당신이 필요로하는 이론 쇼 코딩 섀넌의 소스 샘플 종류의 (평균) 타입의 난수 생성 . 더 정확하게 말하면 Shannon은 첫 번째 유형의 샘플을 제공하는 비효율적 인 알고리즘을 제공 하고 두 번째 유형의 샘플을 높은 확률로 출력합니다. 그는 또한 높은 확률로 샘플 을 출력하는 것이 불가능하다는 것을 보여줍니다.[ 0 , , R - 1 ] [ 0 , , N - 1 ] m m ( log N / log R - ϵ ) m ( log N / log R + ϵ )logN/logR[0,,R1][0,,N1]mm(logN/logRϵ)m(logN/logR+ϵ)

Shannon의 정리는 또한 더 일반적인 경우에도 왜곡 된 입력 분포 (아마도 왜곡 된 출력 분포)에서 작동합니다. 이 경우 로그를 엔트로피로 바꿔야합니다. 정리에 의해 주어진 알고리즘은 무작위로 정의되지만, 경우에 따라 (좀 더 나쁜 성능의 대가로) 비 무작위화할 수 있습니다.


5

실제로, 거부 샘플링은 유일한 진행 방법과는 거리가 멀다. 불행하게도, 시스템 비트들과 같은 모든 정보를 저장하고, 따라서 단지 정보의 랜덤 비트를 조작 할 수있는 것을 고려하면, 범위의 균일 한 랜덤 변수 그리는 어떤 알고리즘 이진베이스 개발하는 경우, 무한이 무한하다.NNN

이 정리는 DDG- 트리 (이산 분포 생성 트리)의 프레임 워크를 개발 한 Knuth and Yao (1976)의 고전적인 결과입니다.

Gilles에 의해 노출되는 방법은 거부로 인해 발생하는 폐기물을 완화하기 위해 수행 된 전형적인 종류이지만, 물론 Knuth 및 Yao의 나무를 생성 할 수 있다면 훨씬 더 효율적입니다-평균 96 %의 랜덤 비트 저장됩니다.

다음 CStheory post 에서 이에 대한 자세한 정보를 제공 했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.