ということで、ペアマッチについて様々な確率を求めてみようと思い立った私ですが、実はちょっと甘く見ていました。確率の計算については人よりもちょっと得意だとか思っているので、10分とか20分とか、悪くても一時間もすれば答えを出せるんじゃないかなーとか思ったわけです。しかし、実際に考え出してみると意外と面倒な計算が必要だということが発覚したのです。
例えば、一人目が平均何枚取れるのかを計算するとします。
そうすると、まずは一発で当てないといけないので、最初の二枚で一枚取れる確率としては1/15です。で、その場合にはもう一回めくれるので、1/13の確率でもう一枚取れることになります。さらに1/11でもう一枚取れて…という計算になります。最後まで書くと、
1/15 + 1/13・15 + 1/11・13・15 + … + 1/3・5・7・9・11・13・15 + 1/1・3・5・7・9・11・13・15 = 0.0723
となります。つまり一人目の人は平均すると0.07枚取れるということです。
ここまではいいのですが、二人目が平均何枚取れるかを計算しようとすると急に面倒になります。何故かというと、一人目が一枚も取れなかった場合、一枚取った場合、…について、すべて計算して足し合わせる必要があるからです。この時点ですでに手計算 では無理っぽい感じになってきます。
そして、三人目の確率を求めようとするとさらにやっかいな問題が出てきます。
例えば、一人目も二人目も一枚も取れなかった場合で考えてみましょう。単純に考えると、まだ見えていないパネルは16-4=12なので、1/11で最初の一枚が取れるように思えます。しかし、そうでない場合もあるということに注意しなければいけません。例えば一人目がパネル1と2をめくったとしましょう。これが違う賞品で二人目に 順番が移ったとします。そして二人目がパネル3と4をめくりました。ここまでで四枚のパネルがめくられている状況です。この四枚がすべて違う賞品であれば上記の計算でいいのですが、例えばパネル1とパネル4が同じ 賞品だという可能性があるのです。そうすると三人目の人は当然これを取ることができるので、最初の一枚を取れる確率は100%として計算しないといけないのです。これはやっかいです。
さらに、先攻の夫婦の勝率なんかを計算しようとすると、もっと面倒なことになります。上記の計算でN人目の人が平均何枚取れるかを出すことは出来るのですが、それだけでは勝率は出てきません。つまり、一人目がw枚で、二人目がx枚、三人目がy枚、四人目がz枚、というそれぞれの 状況でさらに場合分けが必要になってくるのです。これについては、今回はシミュレーションを行いました。
ということで、手計算で確率を出すのは無理そうなので、プログラムを書いてしまうことにしました。以下、その考え方について説明して行きます。
まずはパネルの状態の場合分けから行いました。以下の四通りに分けることができます。
このそれぞれの状態の賞品が何組あるかによって、パネルの状態を記述することが出来ます。例えば、開始時の状態は、すべてのカードがめくられていないので、上から、0、0、0、8ということになります。パネル1、2をめくってそれが違う賞品だった場合には、0、0、2、6です。
次に、各パネル状態から一人分の進行があったときの遷移確率を計算してやります。これが出来てしまえば、後は四回繰り返すだけで最終的な確率分布が求まるというわけです。この計算を行うときにポイントになるのは、賞品をとった場合にはその人がもう一回めくれるという 神経衰弱のルールです。確率計算を行うときにはこれが結構面倒なわけですが、幸いにも再帰関数という便利な手段がありますので、プログラム的にはエレガントに実装することが可能です。
以下に計算アルゴリズムの概略を示します。別に何言語ということはなく、適当に流れだけ書いています。
ポイントは、賞品を取った場合には再帰的に自分を呼び出してやることです。こうすることで、ややこしい事は考えずに、上記のように直感的な形で書くことが出来ます。
スポンサードリンクこのページに対するご意見ご感想は (ara999 あっと gmail.com ) までお願いします