質問<232>2000/2/24
from=ロイ
「相撲の確率」


ハサミ男という小説の中で
二子山部屋に貴乃花と若乃花、東関部屋に曙がいて、この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 %