풀 사이클

Full cycle

Pseudorandom Number Generator(PRNG; 의사랜덤 번호 생성기)에서 풀 사이클 또는 풀 주기는 일련의 유효한 상태에 걸친 PRNG 동작입니다.특히 PRNG는 유효한 시드 상태에 대해 시드 상태로 돌아가기 전에 PRNG가 모든 유효 상태를 횡단하는 경우, 즉 그 기간이 상태 공간의 카디널리티와 동일한 경우 풀 사이클을 갖는 것으로 간주된다.

PRNG가 완전한 사이클을 보유하기 위한 PRNG의 파라미터 제한은 선형 합동 생성기 및 선형 피드백 시프트 레지스터와 같은 특정 유형의 PRNG에 대해서만 알려져 있습니다.PRNG 알고리즘이 상태 공간을 소진하는 데 필요한 전체 사이클 부족 여부를 판단하는 일반적인 방법은 없습니다. 상태 공간은 알고리즘 내부 상태의 크기에 비해 기하급수적으로 클 수 있습니다.

예 1(C/C++)

0보다 크거나 같은 난수 시드, 1보다 큰 총 샘플 크기 및 총 샘플 크기에 대한 증가분을 지정하면 다음 논리로 전체 사이클을 생성할 수 있습니다.표본 크기보다 작은 음수가 아닌 각 숫자는 정확히 한 번 발생합니다.

서명되어 있지 않다 인트 씨를 뿌리다 = 0; 서명되어 있지 않다 인트 sample_size = 3000; 서명되어 있지 않다 인트 generated_number = 씨를 뿌리다 % sample_size; 서명되어 있지 않다 인트 증량 = 7;  위해서 (서명되어 있지 않다 인트 리터레이터 = 0; 리터레이터 < > sample_size; ++리터레이터) {     generated_number = (generated_number + 증량) % sample_size; } 

예 1(Python의 경우)

# 풀 사이클을 거치는 발전기 방어하다 사이클(씨를 뿌리다: 인트, sample_size: 인트, 증량: 인트):     nb = 씨를 뿌리다     위해서 i  범위(sample_size):         nb = (nb + 증량) % sample_size         산출하다 nb  # 값 예시 씨를 뿌리다 = 17 sample_size = 100 증량 = 13  # 모든 번호 인쇄 인쇄물(목록.(사이클(씨를 뿌리다, sample_size, 증량)))  # 모든 번호가 올바르게 생성되었는지 확인합니다. 주장하다 세트(사이클(씨를 뿌리다, sample_size, 증량)) == 세트(범위(sample_size)) 

「 」를 참조해 주세요.