まず、明確にするために、思いついたアルゴリズムは疑似乱数ジェネレーターであり、真の乱数ジェネレーターではありません。アルゴリズムを作成する(つまり、関数を作成する、つまり一連のルールを作成する)ので、乱数ジェネレーターは最終的にそれ自体を繰り返すか、ランダムではない同様のことを行う必要があります。
真の乱数ジェネレーターの例は、自然界からランダムなノイズをキャプチャしてデジタル化するものです。これらには以下が含まれます:
http://www.fourmilab.ch/hotbits/
http://www.random.org/
ホワイトノイズ(またはランダム性に関するその他の手段)を生成する物理的な機器を購入して、それをデジタルでキャプチャすることもできます。
http://www.lavarnd.org/
http://www.idquantique.com/true-random-number-generator/products-overview.html
http://www.araneus.fi/products-alea-eng.html
疑似乱数ジェネレーターに関して、学ぶのが最も簡単なもの(そして平均的な一般の人がおそらく自分で作ることができるもの)は線形合同ジェネレーターです。残念ながら、これらは最悪のPRNGの一部でもあります。
優れたPRNGを決定するためのガイドラインには、次のものがあります。
- 周期性(利用可能な数の範囲はどれくらいですか?)
- 連続番号(同じ番号が2回続けて繰り返される確率はどれくらいですか)
- 均一性(特定のサブ範囲から別のサブ範囲と同じように数値を選択する可能性がありますか)
- それをリバースエンジニアリングすることの難しさ(それが本当にランダムに近い場合、誰かがそれが生成した最後のいくつかの数に基づいてそれが生成する次の数を理解できないはずです)
- 速度(新しい数値を生成できる速度はどれくらいですか?5回または500回の算術演算が必要ですか)
- 私が行方不明になっている他の人がいると確信しています
現在、ほとんどのアプリケーション(つまり、crptographyではない)で優れていると考えられている最も人気のあるものの1つは、MersenneTwisterです。リンクからわかるように、これは単純なアルゴリズムであり、おそらくわずか30行のコードです。ただし、これらの20行または30行のコードを最初から作成しようとすると、多くの頭脳とPRNGの研究が必要になります。通常、最も有名なアルゴリズムは、PRNGを数十年にわたって研究してきた教授または業界の専門家によって設計されています。
PRNGを勉強して、自分で試してみてください(KnuthのArt of ComputerProgrammingまたはNumericalRecipesを出発点として試してください)が、一日の終わりにこれをすべてレイアウトしたかっただけです(PRNGがあなたの人生の仕事)他の誰かが思いついたものを使うほうがはるかに良いです。また、これらの方針に沿って、歴史的にコンパイラやスプレッドシートなどは、ほとんどの数学者が優れたPRNGと見なすものを使用しないため、高品質のPRNGが必要な場合は、標準ライブラリを使用しないでください。 C ++、Excel、.NET、Javaなどで、それらが何を実装しているかを調査するまで。