Unipicker추첨 백서
알고리즘 · LESSON 4

불공정 난수 버리기

가중치 구간 추첨대량 응모자 추첨

주사위(1~6)로 친구 5명을 공평히 뽑으려면? 5로 안 나눠떨어지는 6은 불공정한 난수예요. 그럴 땐 버리고 다시 굴려요.

개념

주사위 1~6으로 5명을 뽑으면?

주사위 값으로 5로 나눈 나머지로 당첨 번호를 정해봐요. (이 예시는 나머지에 +1을 더하지 않고, 나머지 값 그대로 당첨 번호가 되고 나머지가 0일 때는 5번이 당첨번호가 되는 걸로 가정했어요.)

주사위÷ 5나머지→ 당첨
1몫 011번
2몫 022번
3몫 033번
4몫 044번
5몫 105번
6몫 111번 (또!)
주사위는 6까지 있는데 사람은 5명. 그래서 6은 1번을 또 가리켜요 → 1번만 두 배 유리해져 불공정해요. 그래서 6은 거부하고 다시 굴려요. (나머지 0은 마지막 5번)
실험

실제 추첨 시뮬레이션 — 직접 굴려보기

'공정'은 6을 거부하고 다시 굴려요. '불공정'은 6도 그대로 써요. 많이 굴려 막대 높이를 비교해봐요.

16이 나왔을 때 어떻게 할지 골라요
2주사위를 여러 번 굴려서 결과를 확인해 보세요
공정 모드는 불공정한 난수(6)를 거부하고 다시 굴려서 막대가 평평해요. 불공정 모드는 6도 1번에게 줘서 1번만 높아져요.
menu_book참고문헌 · 거부법(불공정 난수 버리기)
  1. von Neumann, J. (1951). Various Techniques Used in Connection with Random Digits. National Bureau of Standards, Applied Mathematics Series, 12, 36–38.
  2. Lemire, D. (2019). Fast Random Integer Generation in an Interval. ACM Transactions on Modeling and Computer Simulation, 29(1), Article 3.