「 個の要素のある配列のうち、乱数を使ってそのうちの 個 () をランダムに 1 に、残りを 0 にする」というプログラムを書いてもらったところ、 どうも以下のように考えることが多いようであった (これを方法 A と呼ぶ):
個の一つをランダムに選び、 そこが 0 ならば 1 として を一つ増やすが、 そこが 1 ならば何もしない
しかしこの方法 A の場合、 既に 1 であるところにぶつかるとまた乱数を取ってやり直すので、 何回で終わるという保証はないし、 極端な話、乱数があまりよくない乱数である場合には、 かなりの回数がかかってしまう可能性もある。
よって以下のように考えるのがまだいいのではないかと思う (これを方法 B と呼ぶ):
現在 0 の箇所の 個から一つをランダムに選び、 そこを 1 として を一つ増やす
この方法 B なら、もちろん丁度 回で終わるし、 乱数も 回生成するだけで済む。
では、方法 A の場合は、終了するまでだいたい何回位かかるのであろうか。 本稿ではそれを考察してみることにする。
竹野茂治@新潟工科大学