나는 상태를 숨기지 않고 이전 출력에서 순수 함수처럼 계산할 수있는 좋은 의사 난수 생성기가 필요합니다. "좋은"에서 말 :PRNG가 숨겨진 상태가 아닌 값을 생성하는 "양호한"PRNG가 있습니까?
나는 어떤 매개 변수
2^n
반복 그것을 실행하는 (또는 그 중 일부 큰 부분 집합하는) 사이의 모든 또는 거의 모든 값을 포함해야한다는 등의 방법으로 생성 변수화 할 수 있어야합니다0
및2^n - 1
입니다. 여기서n
은 출력 값의 비트 수입니다.n + p
비트결합 된 발전기 출력 모두를 포함해야하거나 거의
0
및2^(n + p) - 1
사이의 모든 값 I는p
파라미터의 비트 수는 그 변수의 모든 가능한 조합2^n
반복 그것을 실행할 경우.
예를 들어, LCG 순수한 함수처럼 계산 될 수 있고, 그것은 첫 번째 조건을 충족 할 수 있지만, 두 번째를 충족시킬 수 없다. 우리는 32 비트 LCG 인 m = 2^32
을 가지고 있으며, 우리의 p = 64
(2 개의 32 비트 매개 변수 a
과 c
), n + p = 96
이 상수이기 때문에 두 번째 조건을 충족하기 위해 출력에서 3 정수로 데이터를 엿보아야합니다. 불행하게도, 출력은 홀수 및 짝수 int의 순서가 엄격하게 교번하기 때문에 조건을 만족시킬 수 없습니다. 이것을 극복하기 위해서는 숨겨진 상태가 도입되어야하지만, 그것은 순수한 것이 아니며 첫 번째 조건 (긴 감추어 진 기간)을 깨뜨린다.
편집 :는 엄밀히 말하면, 나는 p
비트에 의해, 각 단지 지속적으로 (p + n)
를 증가하지, 독특한 "randomish"의 방법을 p + n
비트의 모든 가능한 바이너리 문자열을 생성 n
비트의 전체 상태와 매개 변수화 기능의 가족을 원한다 - 비트 int. 고유 한 방법을 선택하려면 매개 변수화가 필요합니다.
너무 많이 갖고 싶습니까?
난수 생성기에서 거의 별개의 시퀀스를 생성하도록 하시겠습니까? –
@Moron, 네. 생성기는 n
actual
k 통화에서 k 개의 고유 번호가 예상되는 경우이 번호는 전혀 임의가 아닙니다. 예 : 나는 항상 마지막 것을 예측할 수있다! 아니면 내가 오해 했습니까? –