특정 종자가 주어질 때마다 선형 균등 생성기를 사용하면 균등하게 분포 된 것으로 알려진 고정 된 난수 시퀀스를 생성 할 수 있습니다. [1, K] 사이에 [1, K^M] 사이에 균등하게 분포 된 M 차원 랜덤 벡터를 생성하기 위해 이러한 RNG를 어떻게 사용해야합니까?선형 합동 RNG에서 임의의 벡터 생성
답변
당신이 사용하고자하는 프로그래밍 언어 나 K와 M의 범위가 무엇인지 모르겠지만, K가 2의 거듭 제곱 인 경우, M 의사 난수의 2 진 표현을 덧붙여 간단히 get 하나의 의사 랜덤 수는 [1, K^M]에 걸쳐 균일하게 분포한다. K가 2의 거듭 제곱이 아닌 경우 일종의 파티셔닝 함수를 사용하거나 특정 값에 대해 다시 롤링하여 [1, K^M] 분포 숫자의 비트를 구성 할 수 있습니다.
선형 합동 생성기의 경우 (시드, 현재 숫자) 다음의 의사 난수가 무엇인지 결정할 수 있다는 것을 알고 있습니다. 이렇게하면 [1, 2, 3, 4]에 균등하게 분산 된 숫자를 생성 할 수 없습니다. K^M] 맞지? –
예, LCG의 일련의 상관 관계에 문제가 있습니다. sh1의 대답은 몇 가지 대안을 탐구합니다. – MattG
M 차원의 경우를 제외하고 LCG에 만족한다면 가장 기본적인 해결책은 M 개의 개별 발전기에 대해 M 개의 개별 시드를 사용하는 것입니다. 이것은 최소한 주어진 벡터의 요소가 독립적 인지를 보장 할 수 있습니다 (당신의 시딩 알고리즘의 한계).
그러나 실제로는 이 실제로 인 상태는 벡터의 모든 부분이 약간의 혼합을 보장 할 수있는 상태 인 적어도 M*log_2(K)
비트의 PRNG입니다. 64 비트가 넘으면 LCG를 사용하는 것이 훨씬 간단한 해결책보다 약한 것을 구현하려는 많은 노력처럼 보입니다.
M이 일정하고 부당하게 크지 않다면 xorshift, carry with multiply 또는 WELL을 볼 수 있습니다. 그렇지 않은 경우 잘 알려진 거대 기간 생성기 또는 암호화 알고리즘을 사용하고 이론적 한계를 눈 감아 야합니다.
- 1. Javascript의 사용자 정의 선형 합동 생성기
- 2. 의사 난수 생성기의 선형 합동 방법
- 3. 결과에서 선형 합동 생성기의 상태를 확인하십시오.
- 4. C++에서 임의의 문자열 벡터 생성
- 5. 임의의 2D 방향 벡터 생성 이해
- 6. 3D 벡터 선형 보간
- 7. 벡터 선형 보간은 선형 보간과 동일합니까?
- 8. 임의의 값을 가진 선형 방정식
- 9. 비슷하지만 다른 벡터 생성
- 10. 젤러의 합동 코드 오류
- 11. 다각형 합동 알고리즘
- 12. 두 조건의 조건부 합동
- 13. iPhone에서 선형 바코드 생성
- 14. 합동, 유사성 및 직각 삼각형
- 15. 비선형 합동 솔버 (모듈러 산술)
- 16. matplotlib : 벡터 플롯 생성
- 17. 게임용 벡터 그리드 생성
- 18. 데이터베이스에서 고유 벡터 생성
- 19. 무작위 색인 벡터 생성
- 20. 워드 벡터 생성 방법
- 21. MATLAB에서 벡터 생성
- 22. 선형 배치를 화면의 임의의 위치에 배치하려면 어떻게해야합니까?
- 23. 벡터
- 24. 임의의 시간에 임의의 스레드 생성 C
- 25. 최대 1을 더하는 임의의 숫자 목록 생성
- 26. 임의의 단어 생성
- 27. 임의의 문자열 시퀀스 생성
- 28. 임의의 2D 배열 생성
- 29. 임의의 색상 편차 생성
- 30. 임의의 지형 생성
[1, K^M] 사이에 임의의 벡터가 균등하게 분포되어 있다는 것은 무엇을 의미합니까? [1, K]에서 각 항목이 일정해야하고 숫자로 변환 될 때 벡터가 균일해야한다는 것을 의미합니까? – user2566092
@ user2566092 : 바로 그 것입니다. –