선형 합동 의사 난수 생성기 (PRNG)를 사용한다고 가정합니다. 시드 , 곱셈 계수 (a), 이동 계수 (c) 및 모듈러스 계수 (m)가 주어지면 PRNG 기간을 어떻게 결정할 수 있습니까? 실험 / 패턴 감지 알고리즘으로 결정합니까, 아니면주기를 계산하기위한 직접적인 공식이 있습니까?
내 질문은 특히 선형 합동 방법에 관한 것이지만, 다른 PRNG에 대해서도 실제로 기간이 계산되는 방법에 대해 더 많이 알고 있습니다.
선형 합동 의사 난수 생성기 (PRNG)를 사용한다고 가정합니다. 시드 , 곱셈 계수 (a), 이동 계수 (c) 및 모듈러스 계수 (m)가 주어지면 PRNG 기간을 어떻게 결정할 수 있습니까? 실험 / 패턴 감지 알고리즘으로 결정합니까, 아니면주기를 계산하기위한 직접적인 공식이 있습니까?
내 질문은 특히 선형 합동 방법에 관한 것이지만, 다른 PRNG에 대해서도 실제로 기간이 계산되는 방법에 대해 더 많이 알고 있습니다.
답변:
전체 사이클 LCG PRNG로 자신을 제한 하면 대답은 간단합니다. 정의에 따르면 간단히 입니다.
주어진 시드에 대해 전체 사이클이 아닌 LCG PRNG의 기간을 찾으려면 시드 값을 한 번 더 생성 할 때까지 PRNG의 반복 횟수를 계산하면됩니다.
참조 된 wikipedia 페이지에서 :
기간
역사적으로, 잘못된 선택은 LCG의 비효율적 인 구현으로 이어졌습니다. 이것의 특히 예시적인 예는 1970 년대 초에 널리 사용 된 이 RANDU 이며,이 불량한 LCG의 사용으로 인해 현재 많은 의문이 제기되고 있습니다.
LCG PRNG를 전체 주기로 제한하지 않으면 큰 위험에 노출 됩니다.
당신이하지 않으면 알고 주어진 LCG는 전체주기는 다음 것을 당신은 할 수 일부는 서로 별개의 시퀀스, 임의의 수와 발전기로 끝낼 수 있었다 곤란하게 악명 높은 것보다 어쩌면 더 작은 소름이 끼치는 임의성이, RANDU의 발전기 .
응용 프로그램에 충분한 시퀀스를 생성하기 위해 가능한 모든 시드 값을 확인하지 않아도됩니다.
의사 난수 생성기에 대한 훌륭한 입문서를 위해 난수에 대한 수치 레시피 장을 읽는 것이 좋습니다 .