- 作者: 結城浩
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2011/02/26
- メディア: 単行本
- 購入: 19人 クリック: 779回
- この商品を含むブログ (103件) を見る
買って通勤時に4日で読んだけど、とにかく重い。持ち運ぶときはそんなに感じなかったけど、持って読んでいるとすぐに腕が疲れてくる。だんだん分厚くなってきているよね。
アルゴリズム解析というと、前に古い本を読んだことがある。細かいところにこだわっているところが古さを感じさせるなあと思ったけど、少し触発されてここを何回通るかって数えたっけ。
この本の中でサイコロの目が6つとも出るまでにかかる回数の期待値を求める問題が出ていた。じゃあちょっと考えてみようかと思って本を閉じた瞬間に思いついた。こういう解き方だよね、ふつうは。でも高校生のときでは思いつかなかったよなあ。
主人公はこうではなく正攻法で期待値を求めようとする。すなわち、確率を求めてそこから期待値を求める。しかし、ちょっとしか考えが進まずに砕け散っている。えー、そこはもうちょっとがんばれないか?
「お兄ちゃんは粘りがないにゃー」
仕方がないので代わりに考えてあげよう。
pnをn回目に初めてサイコロの目が6つとも出る確率とします。これを求めればいいわけです。しかし、これを直接求めるのは難しそうですよね。こういうときは次のように考えるのが定石です。すなわち、qnをn回目にサイコロの目が6つとも出ている確率とすれば、
pn = qn - qn-1 (n > 1)
となります。qnはn回目の状態だけ考えればいいのでわかりやすいです。
n回目にm種類の目が出ている場合の数をS(m, n)としてこれを求めましょう。まず、S(1, n)は、1から6の同じ目が常に出ているということだから、
S(1, n) = 6 (n >= 1)
です。S(2, n)は、6つの目の中から2つを選んで、その2つの目が出続けるので、6C22n。どちらか一方の目が出続けるのは排除しなければならないので、
S(2, n) = 6C2(2n - 2) (n >= 1)
です。S(3, n)は、6つの目の中から3つを選んで、その3つの目が出続けるので、6C33n。3つのどれか2つが出続けるのは排除しなければならないので、3C223を引かなければならないです。しかし、これだと1つの目が出る場合を重複して排除しているので、その分を考慮して、
S(3, n) = 6C3(3n - 3C22n + 3C1)
これは包除原理ですね。kの目が出ている場合をSkとすると、
|S1∩S2∩S3| = |S1∪S2∪S3| - |S1∪S2| - |S1∪S3| - |S2∪S3| + |S1| + |S2| + |S3|
m = 6なら、
qnは、
pnは、
ですね。n > 1で成り立つことに注意して計算すると期待値が計算できます。
11回目に6つともの目が出るのが最も確率が高いんですね。