質問<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 %