SUGARSPOT

Androidアプリ、WEBサービス開発の SUGARSPOT  |Androidブログ「Androidのことなんだけど」もやってます

2012年6月16日土曜日

抽選アプリは難しい?


とある「抽選を行う事ができるアプリ」があり、そのアプリの動作が気になったので調べてみました

抽選範囲を1~150にして、1回目にどのような値が抽出されるかを100回施行

※抽選→初期化。抽選→初期化。・・・・を繰り返します

その結果が次ぎの画像です
(左の数字が施行回数。右の枠線に囲まれているのが出た目)


パッとみただけで、「あれ? 1 が異常に多いなぁ」と、気づくでしょう

各数値の出現回数を見てみる
(左の数字が出た目。右の数字が出現回数)


圧倒的に「1」が出てますね。
150の数値の中から100回抽出なので単純計算でいうと、あるひとつの数字が選ばれる確立は0.66666・・・%

それが「1」の確立は 12% で理論値の20倍近くになってます

なんだ?こりゃ?

きっと乱数をつかって数値を抽出していると思います
多くのプログラム言語で用意されているランダムな値を取得する仕組みは何も工夫をしなければ多少の偏りが出てくるものですが、ここまで偏るような事は無いはずです

そこで考えられるのは、今回試したアプリは乱数の初期化を正しく行えていないなどのバグが含まれている可能性が高い気がします

抽選などあまり厳密ではない場面で利用するアプリの場合は、多少の偏りは気にされないかもしれません。ですから、プログラム言語が用意しているランダムな値を取得する仕組みを(正しく)利用すれば良い思います
しかし、暗号化など厳密にランダムである事が求められるような場面で利用する場合では、出来るだけ偏りの無い仕組みを考える必要があります
偏りのない乱数の取得方法については色々な方法がありますので、ここでは記述しませんが
必要な際にはGoogleなど検索サイトで調べると沢山情報が見つかりますので、そちらを参考にしてください

おっと、最後に結論
「抽選アプリを作る事は難しくはないだろうが、利用する際は良くチェックして利用したほうが良さそうですね。」

以上です





0 件のコメント:

コメントを投稿