バレーボールの試合では24点を取ると、2点差がつくまでラリー形式になって試合を続ける。理論的にはお互いに勝ち負けを繰り返すと、無限に試合が続く。
このラリーが続く回数を3つのアプローチで調べてみる。元ネタは以下。
新品価格 |
アプローチ1
過去に行われた実際の試合からスコアを取得する。Googleで検索してみたが、唯一見つけたのは以下のサイトであり、ここも一覧形式ではなく、クリックでスコアを取得するのですぐには情報を得るのが難しそう。
とりあえず断念。
アプローチ2
シミュレーションをしてみて確率を求める。Javaでプログラムを作成した。24点同点から2点差がつくまでのラリー回数を求める。
試行回数は100としている。
package volleyball; import java.util.Random; public class volleyballsimulator { static int trial = 100; static int game = 100; static int max_game = 100; static int[][] gameresults = new int[100][100]; static Random rnd = new Random(); static int cur_trial = 0; static int cur_game = 0; public static void main(String[] args) { // TODO Auto-generated method stub for ( cur_trial = 0; cur_trial < trial; cur_trial++){ for ( cur_game=0; cur_game < game; cur_game++ ){ playOnegame(); } } int idx = 0; for ( cur_game=0; cur_game < game; cur_game++ ){ idx++; System.out.print(idx + ","); for ( cur_trial = 0; cur_trial < trial; cur_trial++){ System.out.print(gameresults[cur_trial][cur_game] + ","); } System.out.print("\n"); } } private static void playOnegame() { // TODO Auto-generated method stub int score_a = 0, score_b = 0, score = 0, gamematch = 0; for (int i = 0; i < max_game; i++){ gamematch++; if ( rnd.nextBoolean() ){ score_a++; } else { score_b++; } score = score_a - score_b; if (score == 2) { gameresults[cur_trial][gamematch]++; break; } if (score == -2){ gameresults[cur_trial][gamematch]++; break; } } } }
結果がtab形式のファイルで取得できる。これをエクセルに取り込み、グラフを作成した。
これを見てみると1/xにモデルが近いことがわかる。
アプローチ3
これは本に詳細が載っているので省略