2013-08-01 3 views
0

특정 종자가 주어질 때마다 선형 균등 생성기를 사용하면 균등하게 분포 된 것으로 알려진 고정 된 난수 시퀀스를 생성 할 수 있습니다. [1, K] 사이에 [1, K^M] 사이에 균등하게 분포 된 M 차원 랜덤 벡터를 생성하기 위해 이러한 RNG를 어떻게 사용해야합니까?선형 합동 RNG에서 임의의 벡터 생성

+0

[1, K^M] 사이에 임의의 벡터가 균등하게 분포되어 있다는 것은 무엇을 의미합니까? [1, K]에서 각 항목이 일정해야하고 숫자로 변환 될 때 벡터가 균일해야한다는 것을 의미합니까? – user2566092

+0

@ user2566092 : 바로 그 것입니다. –

답변

0

당신이 사용하고자하는 프로그래밍 언어 나 K와 M의 범위가 무엇인지 모르겠지만, K가 2의 거듭 제곱 인 경우, M 의사 난수의 2 진 표현을 덧붙여 간단히 get 하나의 의사 랜덤 수는 [1, K^M]에 걸쳐 균일하게 분포한다. K가 2의 거듭 제곱이 아닌 경우 일종의 파티셔닝 함수를 사용하거나 특정 값에 대해 다시 롤링하여 [1, K^M] 분포 숫자의 비트를 구성 할 수 있습니다.

+1

선형 합동 생성기의 경우 (시드, 현재 숫자) 다음의 의사 난수가 무엇인지 결정할 수 있다는 것을 알고 있습니다. 이렇게하면 [1, 2, 3, 4]에 균등하게 분산 된 숫자를 생성 할 수 없습니다. K^M] 맞지? –

+0

예, LCG의 일련의 상관 관계에 문제가 있습니다. sh1의 대답은 몇 가지 대안을 탐구합니다. – MattG

1

M 차원의 경우를 제외하고 LCG에 만족한다면 가장 기본적인 해결책은 M 개의 개별 발전기에 대해 M 개의 개별 시드를 사용하는 것입니다. 이것은 최소한 주어진 벡터의 요소가 독립적 인지를 보장 할 수 있습니다 (당신의 시딩 알고리즘의 한계).

그러나 실제로는 이 실제로 인 상태는 벡터의 모든 부분이 약간의 혼합을 보장 할 수있는 상태 인 적어도 M*log_2(K) 비트의 PRNG입니다. 64 비트가 넘으면 LCG를 사용하는 것이 훨씬 간단한 해결책보다 약한 것을 구현하려는 많은 노력처럼 보입니다.

M이 일정하고 부당하게 크지 않다면 xorshift, carry with multiply 또는 WELL을 볼 수 있습니다. 그렇지 않은 경우 잘 알려진 거대 기간 생성기 또는 암호화 알고리즘을 사용하고 이론적 한계를 눈 감아 야합니다.