난수 생성기 쉽게 이해하기 — 개념과 원리
이 도구는 정한 범위에서 무작위 수를 뽑습니다. 중복 허용 여부, 정수나 소수, 정렬 순서나 뽑은 순서를 고를 수 있으며, 개수, 합, 평균, 가능한 값의 수, 가능한 서로 다른 조합의 수도 보여 줍니다. 수업 추첨, 당첨자 고르기, 게임, 표본 추출, 로또식 연습 추첨에 씁니다.
계산 방법
- 수는 브라우저의 암호학적 난수 생성기(crypto.getRandomValues)에서 나옵니다.
- 각 값은 범위 안의 균등한 정수이며, 소수는 먼저 범위를 늘려 뽑습니다.
- 단순한 나머지 연산에서 생기는 작은 치우침은 기각 표집으로 없앱니다.
- 중복 없이 뽑을 때는 피셔–예이츠 섞기를 일부만 수행해 모든 조합이 같은 확률을 갖게 합니다.
- 중복 없는 가능한 조합 수 = C(N, k) = N! ÷ (k!(N − k)!), N은 범위의 값 수, k는 뽑는 개수
'추첨 번호'를 포함해 어떤 입력을 바꿔도 새로 뽑습니다.
원리
공정한 추첨이라면 허용된 모든 값(또는 조합)이 같은 확률로 나와야 합니다. 컴퓨터는 무작위 비트를 만들고, 이를 나머지 연산으로 범위에 맞추면 범위가 비트 경우의 수를 나누어떨어지게 하지 않는 한 작은 값이 조금 더 자주 나옵니다. 기각 표집은 치우침을 만드는 몇몇 값을 버리고 다시 뽑아 이를 해결합니다. 피셔–예이츠 섞기는 뽑힌 값을 남은 후보에서 바꿔 빼내므로 중복 없이 모든 순서가 같은 확률을 갖습니다.
예제 풀이
기본값은 1~45, 6개, 중복 없음, 정수, 정렬입니다. 페이지에 나온 추첨 결과는 다음과 같습니다.
- 뽑힌 수: 3, 20, 22, 23, 31, 42
- 개수 6, 합 3 + 20 + 22 + 23 + 31 + 42 = 141
- 평균 141 ÷ 6 = 23.5
- 범위 안의 가능한 값: 45개
- 가능한 서로 다른 조합: C(45, 6) = 8,145,060
직접 뽑으면 수는 달라지지만 마지막 두 값은 그대로입니다.
결과 해석
45개 중 6개의 각 조합은 모두 8,145,060분의 1로 같은 확률입니다. 1, 2, 3, 4, 5, 6처럼 규칙적으로 보이는 조합도 다른 조합과 똑같이 나올 수 있습니다. 공정한 추첨의 평균은 여러 번 뽑으면 범위 가운데(여기서는 23)에 가까워지지만, 한 번의 추첨은 크게 다를 수 있습니다. 1~45에서 6개를 뽑는 설정은 우리나라 로또 6/45와 같은 구조라서 당첨 확률을 실감하는 데에도 쓸 수 있습니다.
흔한 실수
- 오래 안 나온 수가 '나올 차례'라고 믿는 경우(각 추첨은 독립입니다)
- 서로 다른 수가 필요한데 중복을 허용하거나 그 반대로 하는 경우
- 입력을 바꾸지 않고 새 결과를 기대하는 경우
- 한 번의 추첨에서 합이나 평균에 의미를 두는 경우
자주 묻는 질문
정말 무작위인가요?
예측할 수 없도록 설계된 브라우저의 암호학적 생성기를 쓰므로 일상적인 추첨에는 충분합니다.
같은 설정으로 다시 뽑으려면 어떻게 하나요?
'추첨 번호' 칸의 값을 바꾸면 새로 뽑습니다.
45개 중 6개를 모두 맞힐 확률은 얼마인가요?
공정한 추첨에서 8,145,060분의 1입니다.
출처: W3C Web Cryptography API, crypto.getRandomValues · D. E. Knuth, The Art of Computer Programming, Vol. 2, §3.4.2 (random sampling and shuffling)