난수 생성기가 동일한 시드에서 다른 출력을 생성 할 수 있습니까?


10

제목이 요약됩니다. DateTime.Now 또는 광 센서에서 생성 된 숫자와 같은 임의의 다른 소스에 의존하지 않고 동일한 입력에 대해 가변 출력을 생성 할 수있는 알고리즘이 있는지 알고 싶습니다. 또한 알고리즘을 실행할 수 없습니다 순서대로, 서로 다른 결과를 생성하는 두 개의 별개의 관련없는 런.


당신이 말하는 것은 구체적으로 pseud-random-number generator입니다.
Marcel

대부분의 언어 는 시드가 "무작위"가되도록 시드를 지정 하지 않고도 난수 생성기를 인스턴스화 할 수 있습니다. 씨앗이 사용되는 이유가 있습니다.
Neil

1
@Neil :이 경우에도 여전히 시드가 있으며 일반적으로 시스템 시간 인 암시 적입니다.
Michael Borgwardt

@MichaelBorgwardt, 나는 단순히 씨앗도 무작위라고 말했다. 물론 아무것도 무작위는 아니지만 일반적으로 시스템 시간은 시드를 전달하지 않고 난수 생성기를 인스턴스화하지 않는 한 적절한 시드를 제공합니다.이 경우 동일한 시드 "임의"시드를 두 번 얻을 수 있습니다.
Neil

부정확 한 하드웨어에 대한 흥미로운 연구 영역이 있으며, 여기에는 통계적으로 잘 정의 된 부정확성이 있습니다. 잠재적 이점은 전력 소비가 적다는 것입니다. 2.0 + 2.0그러한 시스템을 계산 하는 것만으로 는 동일한 결과를 얻을 수 없습니다. 다른 임의의 출처가 필요하지 않습니다.
MSalters

답변:


15

DateTime.Now 또는 광 센서에서 생성 된 숫자와 같은 임의의 소스에 의존하지 않고 동일한 입력에 대해 가변 출력을 생성 할 수있는 알고리즘이 있는지 알고 싶습니다.

아니요, 알고리즘의 정의는 잘 정의되고 결정적입니다. 즉, 동일한 입력이 항상 동일한 출력을 생성 할 수 있기 때문에 근본적으로 불가능합니다. 무작위 알고리즘이 있지만 입력으로 임의성이 필요합니다.

또한 결정 성은 컴퓨터 하드웨어 가장 중요한 디자인 목표입니다. 동일한 입력이 주어지면 동일한 출력을 생성하지 않는 CPU는 대부분의 목적에 전혀 쓸모가 없습니다.


14

아니오, 의사 난수 생성 알고리즘은 항상 동일한 시드 (따라서 의사 난수) 에서 동일한 출력을 생성합니다 .

"프로그램"이 아니라 "알고리즘"이라는 용어를 사용한 것이 흥미 롭습니다. 여기에는 특정 클래스의 예 답변 (RAM의 소프트 오류, 멀티 스레드 RNG의 다른 스레드 인터리빙 등)이 제외됩니다. 알고리즘을 실행할 때마다 반복 할 때마다 동일한 입력을 무작위로 지정하지 않으면, 각 실행에서 동일한 출력을 생성합니다.

즉, CPU 온도와 같은 기본 사항조차도 제대로 정규화되면 엔트로피 소스로 작동하기에 충분히 예측할 수 없습니다. 따라서 이것이 실행 된 시간을 알고 있다면 "암호 적으로 안전한"난수 생성기를 예측할 수 있다고 생각하지 마십시오. 그들 중 다수는 시스템 생성 엔트로피 피드를 사용합니다.


알고리즘은 올바른 단어였습니다.) 엔트로피의 외부 소스, 메모리 결함, 스레드 순서, 광원과 같은 예측할 수없는 입력 등을 제거하려고합니다. 무작위 알고리즘에 대한 나의 이해 부족과 아마도 나는 더 일반적인 질문을 할 수 있었다. 동일한 입력 (모든 엔트로피 소스 포함)이 주어지면 다른 결과를 반환하는 함수를 만들 수 있는지 정말로 궁금합니다. 답변이 아니오 인 것 같습니다
ConditionRacer

7

동일한 시드가 주어질 때마다 동일한 난수 시퀀스가 ​​생성되도록 사람들이 매우 열심히 일한다는 것을 알고 있습니까? 이것은 결과가 완전히 재현 가능하다는 것을 의미하므로 Monte Carlo 시뮬레이션과 같은 것들에 바람직한 특성입니다. 시드를 지정하지 않으면 시간과 같은 것이 사용되지만 정확한 재현성을 실제로 원합니다.

이것이 정말로 바람직하지 않은 유일한 RNG는 암호화에 사용되는 RNG이며, 일반적으로 운영 체제 자체의 난수 소스 (일반 상황에서는 되감기 불가능하고 멋진 하드웨어를 사용할 수 있음 )를 사용하여 시드를 제공함으로써이를 달성합니다.


네, 당신이 무슨 말을하는지 이해합니다. 나는 새로운 것을 구현하려고하지 않고 있으며, 이것은 심야 호기심이었습니다.
ConditionRacer

1

다른 하드웨어 플랫폼에서 알고리즘을 구현하고 정수에서 중간 N 비트를 가져 오는 것과 같은 기술을 사용했다고 가정하면 정수 인코딩이 다른 경우 (큰 / 작은 / 중간 엔디안) 다른 대답을 얻을 수 있습니다. FPU가있는 컴퓨터에서 실행되는 문제와 부동 소수점 숫자를 조작하는 경우에는 그렇지 않은 문제가 발생할 수 있습니다. 데스크톱 급 컴퓨터에서는 문제가되지 않지만 전화에서는 문제 일 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.