質問<232>2000/2/24
ハサミ男という小説の中で 二子山部屋に貴乃花と若乃花、東関部屋に曙がいて、この3 力士は彼等以外の力士に必ず勝ち、互いに対戦したときの勝 率は五分五分だとすると、貴乃花あるいは若乃花が優勝する 確率はそれぞれ8分の3で、曙が優勝する確率は4分の1で ある。 では、二子山部屋にm人の力士がおり、佐渡ヶ獄部屋にn人 の力士がいてmはnより大きいとする。これらの力士は他の 部屋の力士には必ず勝ち、互いに対戦した時の勝率は5分5 分とする。このとき、それぞれの部屋から優勝力士が出る確 立を求めよ。 という問題があったんですが、まったくもって分かりません。 気になって夜も眠れないのでご存知でしたら教えて下さい。
お返事2000/2/26
from=武田
二子山部屋の貴乃花と若乃花、そして東関部屋の曙の例で 考えてみると、次のようになる。曙が優勝するのは、2人に勝ったときだから、 1 1 1 ─×─=─ ……東関部屋が優勝する確率 2 2 4 二子山部屋が優勝する確率は、 1 3 1-─=─ 4 4 貴乃花、若乃花それぞれの優勝確率は2で割って、 3 3 ─÷2=─ 4 8 さて、質問のことですが、 二子山部屋にm人の力士と、佐渡ヶ獄部屋にn人の力士がい て、mはnより大きいとする場合を考えるわけだが、 普通、変数m,nがでてくるときは、数列的に変化させて様 子を見るのが得策なので、それでやってみましょう。 m=3、n=1の場合
Dが全勝するのは、3人に勝ったときだから、 1 1 1 1 ─×─×─=─ ……佐渡ヶ嶽部屋が優勝する確率 2 2 2 8 二子山部屋が優勝する確率は、 1 7 1-─=─ 8 8 m=3、n=2の場合 D、Eそれぞれが全勝するのは、3人に勝ったときだから、 1 1 1 1 ─×─×─=─ 2 2 2 8 D、E両方とも全勝するのは、 1 1 1 ─×─=── 8 8 64 佐渡ヶ嶽部屋が優勝するのは、D∪Eの確率だから、 P(D∪E)=P(D)+P(E)-P(D∩E) 1 1 1 15 =─+─-──=── 8 8 64 64 二子山部屋が優勝する確率は、 15 49 1-───=── 64 64 m=4、n=1の場合 Eが全勝するのは、4人に勝ったときだから、 1 1 1 1 1 ─×─×─×─=── ……佐渡ヶ嶽部屋が優勝する確率 2 2 2 2 16 二子山部屋が優勝する確率は、 1 15 1-──=── 16 16 m=4、n=2の場合 E、Fそれぞれが全勝するのは、4人に勝ったときだから、1 1 1 1 1 ─×─×─×─=── 2 2 2 2 16 E、F両方とも全勝するのは、 1 1 1 ──×──=─── 16 16 256 佐渡ヶ嶽部屋が優勝するのは、E∪Fの確率だから、 P(E∪F)=P(E)+P(F)-P(E∩F) 1 1 1 31 =──+──-───=─── 16 16 256 256 二子山部屋が優勝する確率は、 31 225 1-───=─── 256 256 m=4、n=3の場合 E、F、Gそれぞれが全勝するのは、4人に勝ったときだから、 1 1 1 1 1 ─×─×─×─=── 2 2 2 2 16 E、F、G3人とも全勝するのは、 1 1 1 1 ──×──×──=──── 16 16 16 4096 E∩F、F∩G、E∩Gの確率はそれぞれ 1 1 1 ──×──=─── 16 16 256 佐渡ヶ嶽部屋が優勝するのは、E∪F∪Gの確率だから、 P(E∪F∪G) =P(E)+P(F)+P(G) -P(E∩F)-P(F∩G)-P(E∩G) +P(E∩F∩G) 1 1 1 721 =──×3-───×3+────=──── 16 256 4096 4096 二子山部屋が優勝する確率は、 721 3375 1-────=──── 4096 4096 n=1のときの二子山部屋の優勝確率を数列で考えて、 (2)(3)(4)……(m) 3 7 15 2m-1 ─、─、──……──── 4 8 16 2m m=4のとき、nを変化させて、 (1) (2) (3)…………(n) 15 225 3375 24-1 ──、───、────……(────)n 16 256 4096 24 したがって、 m人いる二子山部屋Pとn人いる佐渡ヶ嶽部屋Qの優勝する 確率は 2m-1 P=(────)n ……(答) 2m Q=1-P ただし、同部屋対戦はないことと、他部屋は必ず対戦するので、 1≦n<m≦15 (追伸)「全勝しないでも優勝できるかも」と言う質問があ りましたが、同点決勝となったうえでの話なので、上の解答 にもう一つ条件を付けます。 条件「同点決勝での優勝は除く」
お返事2000/9/15
from=武田
上の条件の「同点決勝での優勝は除く」は止めました。そのかわり、 同点決勝のときは、その人数の割合で優勝する確率を設定しました。 例えば、A部屋の3人とB部屋の1人が、14勝1敗で同点決勝になっ たとすると、A:B=0.75:0.25として、カウントします。 計算による確率の式化はできませんでしたが、コンピュータによる計算プ ログラムは完成しました。 2進法を利用したプログラムなので、秋の関数協の研究大会に発表するつ もりです。 なお、このもとになるBASICは、文教大学教育学部の白石和夫さんが 作った「(仮称)十進BASIC」です。昔のBASICと似ているので 便利に使っています。 ********************************* dim G(15,15),B(210),a_victor(15),b_victor(15) !入力設定 DO clear print "相撲の確率 by T.Takeda" input PROMPT "A部屋の関取の数 m=":m input PROMPT "B部屋の関取の数 n=":n if m>n and m<=15 and n>=1 then EXIT DO END IF print "入力は、1≦n<m≦15の範囲にしてください!" LOOP !全体初期化 LET l=n*m LET a_count=0 LET b_count=0 LET pattern=0 DO !内部初期化 for saisyo1=1 to l LET B(saisyo1)=0 next saisyo1 for saisyo2=1 to m LET a_victor(saisyo2)=0 next saisyo2 for saisyo3=1 to n LET b_victor(saisyo3)=0 next saisyo3 LET a_max=0 LET b_max=0 !2進法化 LET keisan=pattern for henkan=1 to l if keisan/2<=0 then LET B(henkan)=0 EXIT FOR ELSEIF keisan/2<1 then LET B(henkan)=1 EXIT FOR ELSE LET B(henkan)=MOD( keisan , 2 ) LET keisan=int(keisan/2) END IF next henkan print pattern;"→"; for hyouji=1 to l print B(hyouji); next hyouji print !行列化 for gyou=1 to n for retu=1 to m LET G(gyou,retu)=B((gyou-1)*m+retu) print G(gyou,retu); next retu print next gyou print print !A部屋の勝敗 for rool=1 to m for qool=1 to n LET a_victor(rool)=a_victor(rool)+G(qool,rool) next qool LET a_victor(rool)=15-a_victor(rool) print a_victor(rool); next rool print print !B部屋の勝敗 for qeel=1 to n for reel=1 to m LET b_victor(qeel)=b_victor(qeel)+G(qeel,reel) next reel LET b_victor(qeel)=15-m+b_victor(qeel) print b_victor(qeel); next qeel print print !最大値 for raal=1 to m LET a_max=max(a_max,a_victor(raal)) next raal for qaal=1 to n LET b_max=max(b_max,b_victor(qaal)) next qaal print a_max;"勝 対 ";b_max;"勝" print !カウント if a_max>b_max then LET a_count=a_count+1 ELSEIF a_max<b_max then LET b_count=b_count+1 ELSE LET s_count=0 LET t_count=0 LET goukei=0 for s=1 to m if a_max=a_victor(s) THEN LET s_count=s_count+1 end if next s for t=1 to n if b_max=b_victor(t) THEN LET t_count=t_count+1 end if next t LET goukei=s_count+t_count LET c=round(s_count/goukei,5) LET d=round(t_count/goukei,5) print c;d LET a_count=a_count+c LET b_count=b_count+d END IF print ;"A部屋";a_count;"B部屋";b_count print !繰り返し条件 LET pattern=pattern+1 IF pattern>=2^l then EXIT DO END IF loop !最後の表示 print print "A部屋(";m;"人)優勝の確率";round(a_count/(2^l),5)*100;"%" print "B部屋(";n;"人)優勝の確率";round(b_count/(2^l),5)*100;"%" end ********************************* なお、結果ですが、時間がかかるので、以下の例しかやっていません。 A部屋( 2 人)優勝の確率 75 %:B部屋( 1 人)優勝の確率 25 % A部屋( 3 人)優勝の確率 87.5 %:B部屋( 1 人)優勝の確率 12.5 % A部屋( 3 人)優勝の確率 69.531 %:B部屋( 2 人)優勝の確率 30.469 % A部屋( 4 人)優勝の確率 93.75 %:B部屋( 1 人)優勝の確率 6.25 % A部屋( 4 人)優勝の確率 82.578 %:B部屋( 2 人)優勝の確率 17.422 % A部屋( 4 人)優勝の確率 67.144 %:B部屋( 3 人)優勝の確率 32.856 %