Mersenne Twister乱数という、疑似乱数生成アルゴリズムがあります
去年、研究でこの乱数から生成されたデータを組み込んだシミュレーションと少々絡んでました。
特徴は
・2^19937-1 という長い周期を持ち、長周期・高次元(623次元)均等分布を持ちます
・生成速度が速い(rand関数と同じくらい)
・メモリ効率が良い
という感じです。
要するに、「一様乱数よりもより乱数らしい乱数」です
僕の学科では、モンテカルロ法に一様乱数を使うと研究を通してくれない変わった教授がいたので、MT乱数を使っていた訳です
で、Javaの勉強をしていたら、たまたまオレゴン大学のOPEN SOURCE LABにあったので、メモしておきます(作者がCERNの核研究施設の人?)
http://osuosl.org/
プログラミング的な使い道ですが、暗号用の乱数として使うと良さそうです。
Secure Hashing Algorithm(数ワードを圧縮して1ワードを 生成する非可逆的なアルゴリズム)と組み合わせて使って、出力列を数ワードごとに切って、ハッシュ関数で 1ワードに圧縮して使うといった感じです
↑Wikipediaとまつもとまことのホームページより
【参考文献】

去年、研究でこの乱数から生成されたデータを組み込んだシミュレーションと少々絡んでました。
特徴は
・2^19937-1 という長い周期を持ち、長周期・高次元(623次元)均等分布を持ちます
・生成速度が速い(rand関数と同じくらい)
・メモリ効率が良い
という感じです。
要するに、「一様乱数よりもより乱数らしい乱数」です

僕の学科では、モンテカルロ法に一様乱数を使うと研究を通してくれない変わった教授がいたので、MT乱数を使っていた訳です

で、Javaの勉強をしていたら、たまたまオレゴン大学のOPEN SOURCE LABにあったので、メモしておきます(作者がCERNの核研究施設の人?)

http://osuosl.org/
プログラミング的な使い道ですが、暗号用の乱数として使うと良さそうです。
Secure Hashing Algorithm(数ワードを圧縮して1ワードを 生成する非可逆的なアルゴリズム)と組み合わせて使って、出力列を数ワードごとに切って、ハッシュ関数で 1ワードに圧縮して使うといった感じです

↑Wikipediaとまつもとまことのホームページより
【参考文献】