福引必勝法 [戯言]
クジ引きをする場合、いつ(何番目に)クジを引いたら一番当たるのだろう。
結論から言えば、「いつでもいっしょ」
具体的に計算してみます。
10本中当たりが1本の場合、一人目が当たる確率は 1/10。
二人目が当たる確率は、
まず一人目が外れることが前提(確率 9/10)で、一人目が引いた後の残った9本に当たりが1本なので、
(9/10)×(1/9) = 1/10。
そんな感じで10人目まで全員当たる確率は 1/10 です。
当たりが沢山ある場合は、ちょっと複雑になりますが基本は一緒。
例えば、100本中当たりが10本なら、
一人目が当たる確率は 10/100 = 1/10。
二人目が当たる確率は、一人目が当たった場合(確率 1/10)は残り99本に当たりが9本、一人目が外れた場合(確率 9/10)は残り99本に当たりが10本。
なので、
(1/10)×(9/99)+(9/10)×(10/99) = 1/10
三人目は、一人目と二人目が(当たり,当たり)(当たり,外れ)(外れ,当たり)(外れ,外れ)の場合それぞれで計算します。
で、やっぱり確率は1/10。
一人目から100人目まで、みんな確率 1/10。
詳しくは、高校の数学の教科書に載っているはずです。
(政府がバカ量産計画を実施していなければ)
そんなわけで、
クジ引きは、何番目に引いても当たる確率は一緒
なのです。
さて、
先日、福引の中の人と話していたら、こんなことを言っていました。
「箱の中には当たりクジは1本しか入ってなくて、当たりが出る度に1本ずつ補充するんだよ」
Ω ΩΩ < な、なんだってーーー!?
じゃあ、いつクジを引いたら一番当るのだろう。
ざっくりイメージで考えて見ます。
100本のクジがあって当たりが10本としましょう。
そして、最初に当たりが出るまでを「1期」、最初の当たりが出てからから2番目の当たりまでを「2期」という様に分類します(当たりが全部出てしまった後が「11期」)。
1期での当たり確率は、
最初箱の中には 90本の外れと1本の当たりが入っているので、1/91。
誰かが当たりを引くまでは、普通のくじ引きと同じで、当たり確率は等しく 1/91 。
じゃあ、2期は?
確率計算の常套手段「場合分け」で考えます。
まず、1期が一人で終わった(最初の一人目がいきなり当たりを引いた)場合、
外れは90本で変わらず、当たりは新たに補充された1本のみなので、1/91 です。
1期が二人(一人目が外れで二人目で当たり)の場合、
2期(三人目)では、外れが89本の当たりが1本で 1/90です。
1期は最大でも91人までにしかならないのですが、この場合、
抽選箱の中身は、(外れが全部出てしまって)当たりが1本入っているだけなので、当たり確率は 1 です(必ず当たる)。
ここから解ることは
1期での当たり確率を P1、2期での当たり確率 P2 とすれば、
1/91 = P1 ≦ P2
が成り立ちます。
同じようにして、最終的には
1/91 = P1 ≦ P2 ≦ P3 ≦ … ≦ P10
となります。
「11期」は、全ての当たりが出てしまった状態なので、絶対に当たりは出ません。
P11 = 0
結論、10期にクジを引くのが一番。
後でクジを引いた方が良く当るけど、遅すぎるとあぼーん。
まさにチキンレース。
グラフにすると、こんな感じでしょうか。
(当たり確率があがる=当たりを引く人の間隔が短くなるので、だんだん傾きが急になります)
いや、その理屈はおかしい。
確かに、1期よりも2期にクジを引いた方が当たりやすいのは間違いないのです。
ただ、それは、今が2期だと解っていてクジを引いた場合に限定されるのです(多分)。
上で言っている確率は、俗に言う「条件付き確率」と呼ばれる確率での話で、
実際のクジ引きで例えるなら、
抽選箱の横で何人当ったかをじっと観察していて、自分の好きなタイミングで他の人を押しのけてクジを引いた場合の確率です。
そんな、周りの人に袋叩きにあいそうな確率ではなく、本当の確率は、どのくらいなのか改めて計算してみます。
一人目が当った場合外れた場合、二人目が当った場合外れた場合、と地道に場合分けをして計算することになります。
では、早速やってみましょう。
一人目:1/91
二人目:1/91*1/91 + 90/91*1/90
三人目:1/91*1/91*1/91 + 90/91*1/90*1/90 + 1/91*90/91*1/90 + 90/91*89/90*1/89
四人目:やってられるかーーーー。
というわけで、プログラムを組んで実行してみました。
(一般的な計算式は数学好きの誰かがきっと教えてくれる)
コンパイルには拙作 Combinationが必要です。
#include <iostream> #include "combination.h" #define TOTAL 100 // クジの総数 #define ATARI 10 // 当たりクジの数 int no[TOTAL]; char flag[TOTAL]; typedef Combination<int> C; double f2(int n) { double kuji = (TOTAL - ATARI + 1); double result = 1.0; for (int i = 0; i < n; i++) { if (flag[i] != 0) { result *= 1.0 / kuji; } else { result *= (kuji - 1.0) / kuji; kuji -= 1.0; } } result *= 1.0 / kuji; return result; } // n 番目 // a それ以前の当り数 double f1(int n, int a) { if (a > n || n - a > (TOTAL - ATARI)) return 0.0; if (n == 0) return 1.0/(TOTAL - ATARI + 1); if (a == 0) { memset(flag, 0, n); return f2(n); } double result = 0.0; C it(no, n, a); for ( ; it != C(); ++it) { memset(flag, 0, n); for (int i = 0; i < a; i++) flag[(*it)[i]] = 1; result += f2(n); } return result; } double f(int n) { double result = 0.0; for (int atari = 0; atari < ATARI; atari++) { result += f1(n, atari); } return result; } int main() { for (int i = 0; i < TOTAL; i++) no[i] = i; for (int i = 0; i < TOTAL; i++) { std::cout << i << "\t" << f(i) << std::endl; } return 0; }
100本中当たりが10本の設定で実行した結果をグラフにしたのがコレ。
60人目まで表示してあります。
なぜ、100人目まで表示しないのかって?
計算が終わらないんだよ。
何も考えずに単純にループを回しているだけなので、
\sum_{n=0}^{10} \binom{100}{n}
回もループが回るんだよ。
1回のループで電気代が1円かかると、計算が終わるまでに日本の国家予算超えるんだよ。(多分)
そこで、当たり本数を2本~6本に減らして計算しなおしてみました。
クジは全部で100本、そのうち当たりが2~6本。抽選箱の中には当たりは多くても1本しかなくて、当たりが出る度に1本ずつ補充した場合の、クジを引く順番と当たり確率のグラフです。
(横軸がクジを引く順番。縦軸が当たり確率です)
………
………
………
正しいのかな、この結果?。
後で引けば引くほど当たり確率が跳ね上がってますが……。
しかも、99番目と100番目の当たり確率が等しいと言うのも……。
………
………
………
と言うわけで、福引は一番最後に引きましょう。
もちろん、これは、外れクジの補充が無いことを前提にしています。
ちなみに、福引の中の人 曰く
「当たりは 初めの方に良く出てるよ」
補充してるな。外れクジ。
今日の一冊 | ||
|
データの使い方を知らないと、 今後は生きていけない |
コメント 0