人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile


●質問者: fmht7
●カテゴリ:学習・教育
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

6 ● a-kuma3
●50ポイント

コメントにも書いたとおり、算数的には、さっぱり理解できません。

なので、プログラムで無理矢理。

class Toys
 COMPLETED = 0b11111111
 def initialize
 @collection = 0
 end
 def store (n)
 @collection |= (1 << n)
 end
 def to_s
 s = sprintf("has %08b", @collection)
 end
 def complete?
 @collection == COMPLETED
 end
end


class Problem
 def initialize
 @n = 0
 @sum = 0
 end
 def challenge(try_n)
 try_n.times { |i|
 n = 0
 mytoys = Toys.new
 until mytoys.complete?
 toy = rand(8)
 mytoys.store(toy)
 n += 1
 end
 @sum += n
 }
 @n += try_n
 end
 def report
 puts "average is #{@sum / @n.to_f}"
 end
end


p = Problem.new
10.times {
 p.challenge(10000)
 p.report
}

10万回試行して、8個そろうまでにかかった回数の平均値を求めます。1万回ごとに、経過報告も。

結果は、こんな感じになりました。

average is 21.8048

average is 21.7363

average is 21.69493333

average is 21.6928

average is 21.67944

average is 21.68865

average is 21.71261429

average is 21.69645

average is 21.69582222

average is 21.69976


22回かかるっぽいです。


# もう、みんな知ってるって



算数的にも、多少納得したので、追記。


http://www2.odn.ne.jp/~cdh88520/toys.html

ここで、「これは、幾何分布の期待値です」というキーワードを入手。

確率統計論とか、そういう方面を調べてみれば良いのか。


幾何分布 Geometric Distribution

定義と計算式が手に入れば、とりあえず納得。

幾何分布は『初めて成功するまでに失敗した回数』である離散型確率変数が従う分布である.


fmht7さんのコメント
ありがとうございます。 シミュレーションでも理論値の近似がきれいに出ますね。 あたりまえといえばあたりまえですが、あたりまえのことが目に見えると素直に感動します。 こういう楽しさが分かると情報処理の道へ進みたくなると思うんですけどね? #ところで言語は何なのでしょうか? Java? 自分はPascal,BASIC,CとB/C-Shellを少々なので最近の言語にめっきり疎くて困ります^^;

a-kuma3さんのコメント
>> ところで言語は何なのでしょうか? << Ruby で書きました。模索しながら書くには、スクリプト系の方が気が楽です。

fmht7さんのコメント
まさに自分もシェルスクリプトを少しずつ動かしながらパイプでつないで…で魅力を感じた口です。 最後に期待通りの動きになった時は細やかながら感動モンですね。

a-kuma3さんのコメント
今回に限っては、期待通りというよりは、「ちぇ、式があってるんだなあ」って 感じでしたけどね <tt>:-)</tt>

6-6件表示/6件
4.前5件|次の5件6.
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ