正規乱数/Box–Muller 法
Box–Muller 法は、互いに独立な (0, 1)
上に一様分布する2つの確率変数 X
, Y
から、標準正規分布に従う互いに独立な2つの確率変数 Z1
, Z2
を生成する方法。
Z1 = sqrt( -2 * ln( X ) ) * cos( 2 * PI * Y ) Z2 = sqrt( -2 * ln( X ) ) * sin( 2 * PI * Y )
参考:
ボックス=ミュラー法 (正規乱数の生成) の証明 | 高校数学の美しい物語
Box-Muller 法による正規分布列生成 – Qiita
C# でボックスミューラー法による正規分布に従う乱数生成 | 真実の楽譜
Box-Muller 法で正規分布する乱数を生成する | blog.PanicBlanket.com
乱数列
参考:
擬似乱数
参考:
線形合同法 (Linear congruential generators / LCG)
Park & Miller
x_(n+1) = ( 48271 * x_(n) ) % (2^31 - 1)
参考:
乱数発生方法と線形合同法のメモ | はしくれエンジニアもどきのメモ
線形合同法の周期 | tsujimotter のノートブック
線形合同法のパラメータを乱数列から求めてみる | みつの CTF 精進記録
メルセンヌ・ツイスタ (Mersenne Twister)
参考:
メルセンヌ・ツイスタについてちょっとだけ真面目に解説する記事/線形合同法と LFSR – Qiita
Mersenne Twister – A Random Number Generator | 松本 眞
Mersenne Twister with Improved Initialization (mt19937ar) | 松本 眞
暗号論的擬似乱数生成器
参考:
ノンス/ナンス (Nonce)
参考:
解析
参考:
実装
参考:
C言語による乱数生成 | 近江崇宏 (omitakahiro.github.io)
メルセンヌ・ツイスタの C# / C++ ポート | C++マニアック
乱数らしさ
参考:
偏りがあるように思わせない (偏った) 乱数生成 | 北陸先端科学技術大学院大学 情報科学研究科 池田研究室
シャッフル
- Fisher–Yates シャッフル
参考:
Fisher-Yates Shuffl アルゴリズムを用いて自作で配列をシャッフルさせる – Qiita
シャッフルした結果が偏ると相談を受けたときに確認すること | yoheimuta
そのシャッフル、本当にシャッフルですか?何気ない落とし穴にハマった話 | BASE プロダクトチームブログ
Fisher-Yates アルゴリズム – 世界最速の配列シャッフルアルゴリズム | Panda Noir
Fisher-Yates のシャッフルアルゴリズムをC言語で実装してみる | IT を使っていこう
ランダムシャッフル | Programming Place Plus
ランダムに配列をシャッフルする Fisher-Yates Shuffle アルゴリズム を理解した | 3匹の猫
Fisher–Yates Shuffle – Wikipedia