提前預測世界盃冠軍

weixin_34247155發表於2018-06-15
3034232-33b1e36ff9f69df0.png
淘汰賽階段的對陣安排

0.前言

又一年的世界盃要開始了,不可避免的,我們要對比賽的結果進行預(jing)測(cai),那麼如何科(yi)學(ben)嚴(zheng)謹(jing)的進行呢?

首先我們來看一下比賽規則

1.比賽規則

1.1小組賽階段

32支參賽隊通過抽籤分為八個小組,每個小組分別有四支球隊進行比賽,每支球隊都必須和其他三支球隊進行且只進行一場比賽,每組4個隊迴圈比賽,共打6場,每場比賽90分鐘,勝平負分別積3、1、0分。每個小組積分的前兩名球隊出線進入淘汰賽階段的1/8決賽,共16支隊,即“16強”。

1.2淘汰賽階段

淘汰賽階段的 90分鐘內(含補時階段)進球多的球隊取勝,如果參賽雙方在90分鐘內(含補時階段)無法決出勝負,將進行上下半場各15分鐘的加時賽。加時賽階段,如果兩隊仍未分出勝負,則通過每個球員的點球決出勝者

16強階段開始採用淘汰賽制,淘汰賽階段的對陣安排

1/8決賽

A組第一對陣B組第二=勝者1
B組第一對陣A組第二=勝者2
C組第一對陣D組第二=勝者3
D組第一對陣C組第二=勝者4
E組第一對陣F組第二=勝者5
F組第一對陣E組第二=勝者6
G組第一對陣H組第二=勝者7
H組第一對陣G組第二=勝者8

獲勝的8個隊進入1/4決賽,即所謂“8強”

1/4決賽

勝者1對陣勝者3=勝者A
勝者2對陣勝者4=勝者B
勝者5對陣勝者7=勝者C
勝者6對陣勝者8=勝者D

1/4決賽的4個獲勝隊進入“4強”

半決賽

勝者A對陣勝者C
勝者B對陣勝者D

決賽

半決賽獲勝兩隊進入決賽,失利的兩隊爭奪三名

即如圖所示的安排:

3034232-33b1e36ff9f69df0.png
淘汰賽階段的對陣安排

2.分析

今天我們主要對淘汰賽進行分析和預測,那麼為了方便我們描述,為每一個隊進行編號,如圖所示:

3034232-5466ee50a6d601bd.png
淘汰賽階段的對陣安排
 以`隊1 `為例進行分析

1.如果隊1想要在1/8決賽勝出,那麼戰勝隊2即可
2.如果隊1想要在1/4決賽勝出,那麼在進1/8決賽的基礎上,要戰勝 勝者3
3.如果隊1想要在半決賽勝出,那麼在進1/4決賽的基礎上,要戰勝 勝者C
4.如果隊1想要在決賽勝出,那麼在進半決賽的基礎上,要戰勝 決賽2

3.計算

我們用
P(i,j)表示`隊i`與`隊j`相遇後,`隊i`獲勝的概率(假設已知)
我們用
p1(i)表示`隊i`在`1/8決賽`勝出的概率
p2(i)表示`隊i`在`1/4決賽`勝出的概率
p3(i)表示`隊i`在`半決賽`勝出的概率
p4(i)表示`隊i`在`決賽`勝出的概率
以隊1為例進行分析

3.1 1/8決賽

1.如果隊1想要在1/8決賽勝出,那麼戰勝隊2即可

p1(1)=P(1,2);

3.2 1/4決賽

如果隊1想要在1/4決賽勝出,那麼在進1/8決賽的基礎上,要戰勝 勝者3

因為勝者3可能為隊3隊4

如果`隊1 `想要在`1/4決賽`勝出,那麼在進`1/8決賽`的基礎上,要戰勝 `勝者3`

就變成了

如果`隊1 `想要在`1/4決賽`勝出,那麼在進`1/8決賽`的基礎上,要戰勝 

1.在`1/8決賽`中勝出的為`隊3`時的`隊3`,
2.在`1/8決賽`中勝出的為`隊4`時的`隊4`

p2(1)=p1(1)*(
p1(3)*P(1,3)
+p1(4)*P(1,4)
);

3.3 半決賽

如果隊1想要在半決賽勝出,那麼在進1/4決賽的基礎上,要戰勝 勝者C

因為勝者C可能為隊5隊6隊7隊8

如果`隊1 `想要在`半決賽`勝出,那麼在進`1/4決賽`的基礎上,要戰勝 `勝者C`

就變成了

如果`隊1 `想要在`半決賽`勝出,那麼在進`1/4決賽`的基礎上,要戰勝 

1.在`1/4決賽`中勝出的為`隊5`時的`隊5`,
2.在`1/4決賽`中勝出的為`隊6`時的`隊6`
3.在`1/4決賽`中勝出的為`隊7`時的`隊7`,
4.在`1/4決賽`中勝出的為`隊8`時的`隊8`

p3(1)=p2(1)*(
p2(5)*P(1,5)
+p2(6)*P(1,6)
+p2(7)*P(1,7)
+p2(8)*P(1,8)
);

3.4 決賽

如果隊1想要在決賽勝出,那麼在進半決賽的基礎上,要戰勝 決賽2

因為決賽2可能為隊9隊10隊11隊12隊13隊14隊15隊16

如果`隊1 `想要在`決賽`勝出,那麼在進`半決賽`的基礎上,要戰勝 `決賽2`

就變成了

如果`隊1 `想要在`決賽`勝出,那麼在進`半決賽`的基礎上,要戰勝 

1.在`半決賽`中勝出的為`隊9`時的`隊9`,
2.在`半決賽`中勝出的為`隊10`時的`隊10`
3.在`半決賽`中勝出的為`隊11`時的`隊11`,
4.在`半決賽`中勝出的為`隊12`時的`隊12`
5.在`半決賽`中勝出的為`隊13`時的`隊13`,
6.在`半決賽`中勝出的為`隊14`時的`隊14`
7.在`半決賽`中勝出的為`隊15`時的`隊15`,
8.在`半決賽`中勝出的為`隊16`時的`隊16`

p4(1)=p3(1)*(
p3(9)*P(1,9)
+p3(10)*P(1,10)
+p3(11)*P(1,11)
+p3(12)*P(1,12)
+p3(13)*P(1,13)
+p3(14)*P(1,14)
+p3(15)*P(1,15)
+p3(16)*P(1,16)
);

4.程式碼實現

import java.util.Scanner;

/**
 * @Title:Main_3.java 
 * @author Stone6762  
 * @CreationTime 2018年6月15日 下午3:15:12
 * @Description:
 */
public class Main_3 {
    
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            double[][] p = new double[17][17];
            for (int i = 1; i < p.length; i++) {
                for (int j = 1; j < p.length; j++) {
                    p[i][j]=scan.nextDouble();
                }
            }
            double[] p_1 = new double[17];
            double[] p_2 = new double[17];
            double[] p_3 = new double[17];
            double[] p_4 = new double[17];
            // 第一輪比賽,16進8,每隊的獲勝機率為:1個
            for (int i = 1; i <=8; i++) {
                p_1[i*2-1]=p[i*2-1][i*2];
                p_1[i*2]=1-p[i*2-1][i*2];
            }
            //第二輪,8進4,每隊的獲勝機率為2個
            for (int i = 1; i <=4; i++) {
                //i*4-3獲勝,在勝了第一輪的基礎上, 勝了第二輪可能碰到的i*4-1和i*4的概率
                p_2[i*4-3]=p_1[i*4-3]*(p_1[i*4]*p[i*4-3][i*4]+p_1[i*4-1]*p[i*4-3][i*4-1]);
                p_2[i*4-2]=p_1[i*4-2]*(p_1[i*4]*p[i*4-2][i*4]+p_1[i*4-1]*p[i*4-2][i*4-1]);
                
                p_2[i*4-1]=p_1[i*4-1]*(p_1[i*4-3]*p[i*4-1][i*4-3]+p_1[i*4-2]*p[i*4-1][i*4-2]);
                p_2[i*4]=  p_1[i*4]  *(p_1[i*4-3]*p[i*4][i*4-3]+p_1[i*4-2]*p[i*4][i*4-2]);
            }           
            
            //第三輪  4進2,每隊獲勝的機率為  4個
            for (int i = 1; i <=2; i++) {
                //i*8-7獲勝,在勝了第二輪的基礎上, 勝了第二輪可能碰到的i*8和i*8-1  i*8-2的概率
                p_3[i*8-7]=p_2[i*8-7]*(
                         p_2[i*8]*p[i*8-7][i*8]
                        +p_2[i*8-1]*p[i*8-7][i*8-1]
                        +p_2[i*8-2]*p[i*8-7][i*8-2]
                        +p_2[i*8-3]*p[i*8-7][i*8-3]);
                p_3[i*8-6]=p_2[i*8-6]*(
                         p_2[i*8]*p[i*8-6][i*8]
                        +p_2[i*8-1]*p[i*8-6][i*8-1]
                        +p_2[i*8-2]*p[i*8-6][i*8-2]
                        +p_2[i*8-3]*p[i*8-6][i*8-3]);
                p_3[i*8-5]=p_2[i*8-5]*(
                         p_2[i*8]*p[i*8-5][i*8]
                        +p_2[i*8-1]*p[i*8-5][i*8-1]
                        +p_2[i*8-2]*p[i*8-5][i*8-2]
                        +p_2[i*8-3]*p[i*8-5][i*8-3]);
                p_3[i*8-4]=p_2[i*8-4]*(
                         p_2[i*8]*p[i*8-4][i*8]
                        +p_2[i*8-1]*p[i*8-4][i*8-1]
                        +p_2[i*8-2]*p[i*8-4][i*8-2]
                        +p_2[i*8-3]*p[i*8-4][i*8-3]);
                
                p_3[i*8-3]=p_2[i*8-3]*(
                         p_2[i*8-7]*p[i*8-3][i*8-7]
                        +p_2[i*8-6]*p[i*8-3][i*8-6]
                        +p_2[i*8-5]*p[i*8-3][i*8-5]
                        +p_2[i*8-4]*p[i*8-3][i*8-4]);
                p_3[i*8-2]=p_2[i*8-2]*(
                         p_2[i*8-7]*p[i*8-2][i*8-7]
                        +p_2[i*8-6]*p[i*8-2][i*8-6]
                        +p_2[i*8-5]*p[i*8-2][i*8-5]
                        +p_2[i*8-4]*p[i*8-2][i*8-4]);
                
                p_3[i*8-1]=p_2[i*8-1]*(
                         p_2[i*8-7]*p[i*8-1][i*8-7]
                        +p_2[i*8-6]*p[i*8-1][i*8-6]
                        +p_2[i*8-5]*p[i*8-1][i*8-5]
                        +p_2[i*8-4]*p[i*8-1][i*8-4]);
                p_3[i*8]=p_2[i*8]*(
                         p_2[i*8-7]*p[i*8][i*8-7]
                        +p_2[i*8-6]*p[i*8][i*8-6]
                        +p_2[i*8-5]*p[i*8][i*8-5]
                        +p_2[i*8-4]*p[i*8][i*8-4]);
                
            }   
            //第四輪 冠軍,  8個
            p_4[1]=p_3[1]*(
                    p_3[16]*p[1][16]
                    +p_3[15]*p[1][15]
                    +p_3[14]*p[1][14]
                    +p_3[13]*p[1][13]
                    +p_3[12]*p[1][12]
                    +p_3[11]*p[1][11]
                    +p_3[10]*p[1][10]
                    +p_3[9]*p[1][9]);
            
            p_4[2]=p_3[2]*(
                    p_3[16]*p[2][16]
                    +p_3[15]*p[2][15]
                    +p_3[14]*p[2][14]
                    +p_3[13]*p[2][13]
                    +p_3[12]*p[2][12]
                    +p_3[11]*p[2][11]
                    +p_3[10]*p[2][10]
                    +p_3[9]*p[2][9]);
            
            p_4[3]=p_3[3]*(
                    p_3[16]*p[3][16]
                    +p_3[15]*p[3][15]
                    +p_3[14]*p[3][14]
                    +p_3[13]*p[3][13]
                    +p_3[12]*p[3][12]
                    +p_3[11]*p[3][11]
                    +p_3[10]*p[3][10]
                    +p_3[9]*p[3][9]);
            p_4[4]=p_3[4]*(
                    p_3[16]*p[4][16]
                    +p_3[15]*p[4][15]
                    +p_3[14]*p[4][14]
                    +p_3[13]*p[4][13]
                    +p_3[12]*p[4][12]
                    +p_3[11]*p[4][11]
                    +p_3[10]*p[4][10]
                    +p_3[9]*p[4][9]);
            
            p_4[5]=p_3[5]*(
                    p_3[16]*p[5][16]
                    +p_3[15]*p[5][15]
                    +p_3[14]*p[5][14]
                    +p_3[13]*p[5][13]
                    +p_3[12]*p[5][12]
                    +p_3[11]*p[5][11]
                    +p_3[10]*p[5][10]
                    +p_3[9]*p[5][9]);
            
            p_4[6]=p_3[6]*(
                    p_3[16]*p[6][16]
                    +p_3[15]*p[6][15]
                    +p_3[14]*p[6][14]
                    +p_3[13]*p[6][13]
                    +p_3[12]*p[6][12]
                    +p_3[11]*p[6][11]
                    +p_3[10]*p[6][10]
                    +p_3[9]*p[6][9]);
            p_4[7]=p_3[7]*(
                    p_3[16]*p[7][16]
                    +p_3[15]*p[7][15]
                    +p_3[14]*p[7][14]
                    +p_3[13]*p[7][13]
                    +p_3[12]*p[7][12]
                    +p_3[11]*p[7][11]
                    +p_3[10]*p[7][10]
                    +p_3[9]*p[7][9]);
            p_4[8]=p_3[8]*(
                    p_3[16]*p[8][16]
                    +p_3[15]*p[8][15]
                    +p_3[14]*p[8][14]
                    +p_3[13]*p[8][13]
                    +p_3[12]*p[8][12]
                    +p_3[11]*p[8][11]
                    +p_3[10]*p[8][10]
                    +p_3[9]*p[8][9]);
            
            p_4[16]=p_3[16]*(
                    p_3[1]*p[16][1]
                    +p_3[2]*p[16][2]
                    +p_3[3]*p[16][3]
                    +p_3[4]*p[16][4]
                    +p_3[5]*p[16][5]
                    +p_3[6]*p[16][6]
                    +p_3[7]*p[16][7]
                    +p_3[8]*p[16][8]);
            
            p_4[15]=p_3[15]*(
                    p_3[1]*p[15][1]
                    +p_3[2]*p[15][2]
                    +p_3[3]*p[15][3]
                    +p_3[4]*p[15][4]
                    +p_3[5]*p[15][5]
                    +p_3[6]*p[15][6]
                    +p_3[7]*p[15][7]
                    +p_3[8]*p[15][8]);
            
            p_4[14]=p_3[14]*(
                    p_3[1]*p[14][1]
                    +p_3[2]*p[14][2]
                    +p_3[3]*p[14][3]
                    +p_3[4]*p[14][4]
                    +p_3[5]*p[14][5]
                    +p_3[6]*p[14][6]
                    +p_3[7]*p[14][7]
                    +p_3[8]*p[14][8]);
            p_4[13]=p_3[13]*(
                    p_3[1]*p[13][1]
                    +p_3[2]*p[13][2]
                    +p_3[3]*p[13][3]
                    +p_3[4]*p[13][4]
                    +p_3[5]*p[13][5]
                    +p_3[6]*p[13][6]
                    +p_3[7]*p[13][7]
                    +p_3[8]*p[13][8]);
            p_4[12]=p_3[12]*(
                    p_3[1]*p[12][1]
                    +p_3[2]*p[12][2]
                    +p_3[3]*p[12][3]
                    +p_3[4]*p[12][4]
                    +p_3[5]*p[12][5]
                    +p_3[6]*p[12][6]
                    +p_3[7]*p[12][7]
                    +p_3[8]*p[12][8]);
            
            
            p_4[11]=p_3[11]*(
                    p_3[1]*p[11][1]
                    +p_3[2]*p[11][2]
                    +p_3[3]*p[11][3]
                    +p_3[4]*p[11][4]
                    +p_3[5]*p[11][5]
                    +p_3[6]*p[11][6]
                    +p_3[7]*p[11][7]
                    +p_3[8]*p[11][8]);
            
            p_4[10]=p_3[10]*(
                    p_3[1]*p[10][1]
                    +p_3[2]*p[10][2]
                    +p_3[3]*p[10][3]
                    +p_3[4]*p[10][4]
                    +p_3[5]*p[10][5]
                    +p_3[6]*p[10][6]
                    +p_3[7]*p[10][7]
                    +p_3[8]*p[10][8]);
            
            p_4[9]=p_3[9]*(
                    p_3[1]*p[9][1]
                    +p_3[2]*p[9][2]
                    +p_3[3]*p[9][3]
                    +p_3[4]*p[9][4]
                    +p_3[5]*p[9][5]
                    +p_3[6]*p[9][6]
                    +p_3[7]*p[9][7]
                    +p_3[8]*p[9][8]);
            for (int i = 1; i <=15 ; i++) {
                System.out.print(p_4[i]+ " ");
            }           
            System.out.println(p_4[16]);
        }
    }
}

5總結

然而,我們一切計算的基礎是:

已知兩隊相遇後,其中一隊獲勝的概率

3034232-84712206e2a501d6.jpg
3034232-bb6ed160614089c0.jpg
3034232-94dced90d0a5c751.jpg

相關文章