2014-11-04 5 views
4

의사 난수 생성기를 뒤집을 수 있습니까? 예를 들어, 생성 된 숫자의 배열을 가져 와서 원래 시드를 가져옵니다. 그렇다면 어떻게 구현 될까요?의사 난수 생성기를 뒤집을 수 있습니까?

+0

내가 생각을 일반적인 배경에 대한

, 여기에 선형 합동 생성기 반전에 대한 몇 가지 리소스입니다 너는 길이에 관계없이 숫자들의 연속을 생성 할 수있는 하나 이상의 씨앗이 항상 있다는 것을 ... 당신은 아마 씨앗을 발견 할 수 있지만 더 많은 것이 있어야한다. ... 하나를 찾더라도 순서의 다음 숫자를 알 수 없으므로 올바르지 않을 수 있습니다. –

+0

다음 의사 난수를 얻는 방정식은 역변환 가능하다고 가정합시다. 수식에 의해 생성 된 숫자가 주어지면 이전의 의사 난수를 얻기 위해 역함수를 적용 할 수 있습니다. 이게 씨앗 이니? 어떻게 알았어? 한 번 더 역 공식을 적용한다면, 그 종자입니까? 아니면 반대 12,842 번 더 적용해야합니까? – beaker

답변

1

일반적으로 아니오. 전체 숫자 배열을 가지고 있다면 대부분의 발전기에 대해 가능하면이어야합니다. 모든 번호를 갖고 있지 않거나 어떤 번호를 알고 있는지 (12 번째 또는 300 번째를 가지고 있습니까?) 어디에서 멈출 지 모르기 때문에 전혀 이해할 수 없습니다.

발전기의 세부 정보를 알고 있어야합니다. 선형 합동 생성기를 디코드하는 것은 피보나치 생성기와 다를 메르 센 트위스터와 다를 수있는 카운터 기반 PRNG에 대해 이와 다를 것입니다. 또한 아마도 발전기의 파라미터를 알아야 할 것입니다. 여러분이 모든 것을 가지고 있고 숫자를 생성하는 방정식이 반전 가능하다면, 가능합니다. 방법에 관해서는, 그것은 정말로 PRNG에 의존합니다.

2

이것은 절대적으로 가능합니다. 목적에 맞는 PRNG 만 만들어야합니다. 그것은 당신이 성취해야 할 것이 정확히 무엇인가에 달려 있습니다 - 당신이 당신의 상황을 더 자세히 묘사한다면 더 많은 조언을 드리겠습니다. 여기 Reversible pseudo-random sequence generator

pseudo random distribution which guarantees all possible permutations of value sequence - C++

그리고 일부는 메르 센 트위스터 반전됩니다 : http://www.randombit.net/bitbashing/2009/07/21/inverting_mt19937_tempering.html http://b10l.com/reversing-the-mersenne-twister-rng-temper-function/

관련 문제