난수 생성기
IT 위키
난수 생성기(random number generator, RNG)는 무작위적인 수열을 생성하는 알고리즘 또는 장치를 말한다. 컴퓨터에서는 대부분 의사난수 생성기(pseudorandom number generator)를 사용하며, 이는 완전히 무작위는 아니지만 통계적으로 무작위처럼 보이는 수열을 생성한다.
1 개념[편집 | 원본 편집]
난수 생성기는 다음 두 종류로 나뉜다:
- 의사난수 생성기(Pseudorandom Number Generator, PRNG)
- 초기값(시드, seed)에 따라 결정되는 알고리즘
- 반복 가능하고 재현 가능함
- 속도가 빠르고 간편하지만, 진정한 무작위성은 아님
- 진정한 난수 생성기(True Random Number Generator, TRNG)
- 물리적 현상(방사능 붕괴, 전기 노이즈 등)을 이용
- 예측 불가능하고 진정한 무작위성 확보 가능
- 속도나 비용 면에서 비효율적일 수 있음
2 의사난수 생성기의 예[편집 | 원본 편집]
- 선형 합동법(linear congruential generator)
- Xn+1 = (aXn + c) mod m
- 고전적인 방식이지만 품질이 떨어질 수 있음
- Mersenne Twister
- 널리 사용되는 고품질 PRNG
- 주기(period)가 매우 길고 통계적 성질이 우수
- Python의 기본 `random` 모듈에서 사용
- PCG, Xorshift, WELL 등
- 고속, 병렬화, 고품질을 추구한 현대적 알고리즘
3 시드(seed)[편집 | 원본 편집]
- 난수열은 시드에 의해 결정되며, 같은 시드를 주면 같은 수열이 생성됨
- 실험 재현이나 테스트에 매우 중요
- 종종 현재 시간 등으로 자동 설정되기도 함
4 활용[편집 | 원본 편집]
- 시뮬레이션(Monte Carlo 방법)
- 통계적 샘플링
- 게임, 암호학, 머신러닝
- 테스트 데이터 생성
5 주의사항[편집 | 원본 편집]
- 의사난수는 보안 목적에는 적합하지 않음
- 예: 암호학에는 CSPRNG(cryptographically secure PRNG)를 사용해야 함
- 난수의 품질이 낮으면 통계적 분석 결과나 시뮬레이션 결과가 왜곡될 수 있음
6 같이 보기[편집 | 원본 편집]
7 참고 문헌[편집 | 원본 편집]
- Knuth, D. E. (1997). The Art of Computer Programming, Vol. 2: Seminumerical Algorithms. Addison-Wesley
- L'Ecuyer, P. (1994). Uniform random number generation. Annals of Operations Research, 53(1), 77–120