乱数が実際に使われている場面
6 つの分類で、実際の依頼のほとんどが説明できます。しかも必要な乱数の性質はそれぞれ違います。
6 つの分類
| 用途 | 典型的な範囲 | 重複の可否 |
|---|---|---|
| 公平な抽選・景品 | 1 から応募者数 | なし |
| 監査用の抽出 | 1 からレコード数 | なし |
| ゲームの処理 | サイコロ、d20、カード | ダイスの種類による |
| テストデータ | 任意の範囲や長さ | どちらでも。通常はあり |
| タスクや座席の割り当て | 1 から人数 | なし |
| 意思決定とタイブレーク | 1 から選択肢数 | 該当なし |
間違えられるのは「重複なし」のほう
当選者を 1 人ずつ引き、重複したら引き直すのが手作業の方法で、2 つの問題があります。試行が無駄になり、そして公平であっても手続きが恣意的に見えます。非復元抽出(部分シャッフル)は正しく、しかも説明が簡単です。
この区別は計算にも影響します。復元ありなら各回の確率は同じですが、復元なしでは母集団が縮むので、引くたびに確率が動きます。
乱数を使ってはいけない場所
再現性が必要なもの全般です。実行のたびに一致しなければならないテストフィクスチャ、利用者ごとに安定していなければならない A/B 割り当て、決定論的なシミュレーション。これらには乱数ではなく、シード付きの生成器が必要です。同じシードから同じ列が再現されます。
セキュリティに関わるものには、便利なページではなく暗号学的な乱数源を使ってください。抽選の乱数とトークンの乱数は見た目が同じで、要求は正反対です。
よくある質問
抽選と単なる選択は何が違いますか?
抽選は順序と重複なしを含意し、選択は 1 回の独立した判断を含意します。複数の当選者を出すなら、抽選の挙動が必要です。
景品企画に乱数生成器を使えますか?
気軽な企画なら使えます。法的な意味を持つ場合は、抽選の前に方法と応募者リストを記録し、順番つきの結果を保存してください。
テストデータは乱数とシードのどちらにすべきですか?
テストがそれに依存するならシードです。実行ごとに変わる乱数値は、失敗の再現を難しくします。